{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Databases API <a name=\"up\"></a>\n",
    "\n",
    "API for different linguistic databases can be accessed with `lingtypology.datasets`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import lingtypology.datasets"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. General <a name=\"general\"></a>\n",
    "\n",
    "Lingtypology attempts to provide unified API for given language databases. Therefore, classes in this module share some common attributes and methods. In this paragraph I will describe them and provide examples for Autotyp, Wals and Phoible."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from lingtypology.datasets import Autotyp, Wals, Phoible"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.1. `features_list` <a name=\"features_list\"></a>\n",
    "You can get the list of available features from the database using this attribute."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Agreement',\n",
       " 'Alienability',\n",
       " 'Alignment',\n",
       " 'Alignment_case_splits',\n",
       " 'Alignment_per_language',\n",
       " 'Clause_linkage',\n",
       " 'Clause_word_order',\n",
       " 'Clusivity',\n",
       " 'GR_per_language',\n",
       " 'Gender']"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Autotyp().features_list[:10] #It's cutoff in order not to take took much space"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Note__: `Phoible` has no `features_list` attribute because there are no features. However, it has `subsets_list` that shows list of available subsets of Phoible data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['all', 'UPSID', 'SPA', 'AA', 'PH', 'GM', 'RA', 'SAPHON']"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Phoible().subsets_list"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2. `get_df` and `get_json` <a name=\"get_df\"></a>\n",
    "\n",
    "These two methods access the database and return data as `pandas.Series` or `dict`. Example of usage:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bickel, Balthasar, Johanna Nichols, Taras Zakharko,\n",
      "Alena Witzlack-Makarevich, Kristine Hildebrandt, Michael Rießler,\n",
      "Lennart Bierkandt, Fernando Zúñiga & John B. Lowe.\n",
      "2017. The AUTOTYP typological databases.\n",
      "Version 0.1.0 https://github.com/autotyp/autotyp-data/tree/0.1.0\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>language</th>\n",
       "      <th>LID</th>\n",
       "      <th>VPolyagreement.Presence.v2</th>\n",
       "      <th>VPolyagreement.Presence.v1</th>\n",
       "      <th>InclExclAsPerson.Presence</th>\n",
       "      <th>InclExclAny.Presence</th>\n",
       "      <th>InclExclType</th>\n",
       "      <th>InclExclAsMinAug.Presence</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Ambulas</td>\n",
       "      <td>6</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>no i/e</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Abkhazian</td>\n",
       "      <td>7</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>no i/e</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Acehnese</td>\n",
       "      <td>9</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>plain i/e type</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Western Keres</td>\n",
       "      <td>10</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>no i/e</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Hokkaido Ainu</td>\n",
       "      <td>12</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>plain i/e type</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        language  LID VPolyagreement.Presence.v2 VPolyagreement.Presence.v1  \\\n",
       "0        Ambulas    6                      False                      False   \n",
       "1      Abkhazian    7                       True                       True   \n",
       "2       Acehnese    9                       True                      False   \n",
       "3  Western Keres   10                       True                       True   \n",
       "4  Hokkaido Ainu   12                       True                       True   \n",
       "\n",
       "  InclExclAsPerson.Presence  InclExclAny.Presence    InclExclType  \\\n",
       "0                     False                 False          no i/e   \n",
       "1                     False                 False          no i/e   \n",
       "2                     False                  True  plain i/e type   \n",
       "3                     False                 False          no i/e   \n",
       "4                     False                  True  plain i/e type   \n",
       "\n",
       "  InclExclAsMinAug.Presence  \n",
       "0                     False  \n",
       "1                     False  \n",
       "2                     False  \n",
       "3                     False  \n",
       "4                     False  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Autotyp('Agreement', 'Clusivity').get_df().head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Note__: for `Phoible` and `Autotyp` you can use `strip_na` parameter (`list`, default: `[]`) to strip rows in which there is empty cell in the given columns. Compare the following.  \n",
    "No `strip_na` (empty cells are replaced with `'~N/A~'`):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Moran, Steven & McCloy, Daniel (eds.) 2019.\n",
      "PHOIBLE 2.0.\n",
      "Jena: Max Planck Institute for the Science of Human History.\n",
      "(Available online at http://phoible.org, Accessed on 2019-06-13.)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>contribution_name</th>\n",
       "      <th>language</th>\n",
       "      <th>coordinates</th>\n",
       "      <th>glottocode</th>\n",
       "      <th>macroarea</th>\n",
       "      <th>phonemes</th>\n",
       "      <th>consonants</th>\n",
       "      <th>vowels</th>\n",
       "      <th>tones</th>\n",
       "      <th>source</th>\n",
       "      <th>inventory_page</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Korean (SPA 1)</td>\n",
       "      <td>Korean</td>\n",
       "      <td>(37.5, 128.0)</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>40</td>\n",
       "      <td>22</td>\n",
       "      <td>18</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kor_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kore1280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>KOREAN (UPSID 423)</td>\n",
       "      <td>Korean</td>\n",
       "      <td>(37.5, 128.0)</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>32</td>\n",
       "      <td>21</td>\n",
       "      <td>11</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>http://web.phonetik.uni-frankfurt.de/L/L2170.html</td>\n",
       "      <td>https://phoible.org/languages/kore1280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Ket (SPA 2)</td>\n",
       "      <td>Ket</td>\n",
       "      <td>(63.7551, 87.5466)</td>\n",
       "      <td>kett1243</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>32</td>\n",
       "      <td>18</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/ket_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kett1243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>KET (UPSID 399)</td>\n",
       "      <td>Ket</td>\n",
       "      <td>(63.7551, 87.5466)</td>\n",
       "      <td>kett1243</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>25</td>\n",
       "      <td>18</td>\n",
       "      <td>7</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>http://web.phonetik.uni-frankfurt.de/L/L2706.html</td>\n",
       "      <td>https://phoible.org/languages/kett1243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Lak (SPA 3)</td>\n",
       "      <td>Lak</td>\n",
       "      <td>(42.1328, 47.0809)</td>\n",
       "      <td>lakk1252</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>69</td>\n",
       "      <td>60</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/lbe_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/lakk1252</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    contribution_name language         coordinates glottocode macroarea  \\\n",
       "0      Korean (SPA 1)   Korean       (37.5, 128.0)   kore1280   Eurasia   \n",
       "1  KOREAN (UPSID 423)   Korean       (37.5, 128.0)   kore1280   Eurasia   \n",
       "2         Ket (SPA 2)      Ket  (63.7551, 87.5466)   kett1243   Eurasia   \n",
       "3     KET (UPSID 399)      Ket  (63.7551, 87.5466)   kett1243   Eurasia   \n",
       "4         Lak (SPA 3)      Lak  (42.1328, 47.0809)   lakk1252   Eurasia   \n",
       "\n",
       "   phonemes  consonants  vowels  tones  \\\n",
       "0        40          22      18      0   \n",
       "1        32          21      11  ~N/A~   \n",
       "2        32          18      14      0   \n",
       "3        25          18       7  ~N/A~   \n",
       "4        69          60       9      0   \n",
       "\n",
       "                                              source  \\\n",
       "0       https://archive.org/details/kor_SPA1979_phon   \n",
       "1  http://web.phonetik.uni-frankfurt.de/L/L2170.html   \n",
       "2       https://archive.org/details/ket_SPA1979_phon   \n",
       "3  http://web.phonetik.uni-frankfurt.de/L/L2706.html   \n",
       "4       https://archive.org/details/lbe_SPA1979_phon   \n",
       "\n",
       "                           inventory_page  \n",
       "0  https://phoible.org/languages/kore1280  \n",
       "1  https://phoible.org/languages/kore1280  \n",
       "2  https://phoible.org/languages/kett1243  \n",
       "3  https://phoible.org/languages/kett1243  \n",
       "4  https://phoible.org/languages/lakk1252  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Phoible().get_df().head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`tones` column given to `strip_na`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Moran, Steven & McCloy, Daniel (eds.) 2019.\n",
      "PHOIBLE 2.0.\n",
      "Jena: Max Planck Institute for the Science of Human History.\n",
      "(Available online at http://phoible.org, Accessed on 2019-06-13.)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>contribution_name</th>\n",
       "      <th>language</th>\n",
       "      <th>coordinates</th>\n",
       "      <th>glottocode</th>\n",
       "      <th>macroarea</th>\n",
       "      <th>phonemes</th>\n",
       "      <th>consonants</th>\n",
       "      <th>vowels</th>\n",
       "      <th>tones</th>\n",
       "      <th>source</th>\n",
       "      <th>inventory_page</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Korean (SPA 1)</td>\n",
       "      <td>Korean</td>\n",
       "      <td>(37.5, 128.0)</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>40</td>\n",
       "      <td>22</td>\n",
       "      <td>18</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kor_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kore1280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Ket (SPA 2)</td>\n",
       "      <td>Ket</td>\n",
       "      <td>(63.7551, 87.5466)</td>\n",
       "      <td>kett1243</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>32</td>\n",
       "      <td>18</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/ket_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kett1243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Lak (SPA 3)</td>\n",
       "      <td>Lak</td>\n",
       "      <td>(42.1328, 47.0809)</td>\n",
       "      <td>lakk1252</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>69</td>\n",
       "      <td>60</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/lbe_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/lakk1252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Kabardian (SPA 4)</td>\n",
       "      <td>Kabardian</td>\n",
       "      <td>(43.5082, 43.3918)</td>\n",
       "      <td>kaba1278</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>56</td>\n",
       "      <td>49</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kbd_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kaba1278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Georgian (SPA 5)</td>\n",
       "      <td>Georgian</td>\n",
       "      <td>(41.850396999999994, 43.78613)</td>\n",
       "      <td>nucl1302</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>35</td>\n",
       "      <td>29</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kat_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/nucl1302</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   contribution_name   language                     coordinates glottocode  \\\n",
       "0     Korean (SPA 1)     Korean                   (37.5, 128.0)   kore1280   \n",
       "2        Ket (SPA 2)        Ket              (63.7551, 87.5466)   kett1243   \n",
       "4        Lak (SPA 3)        Lak              (42.1328, 47.0809)   lakk1252   \n",
       "6  Kabardian (SPA 4)  Kabardian              (43.5082, 43.3918)   kaba1278   \n",
       "8   Georgian (SPA 5)   Georgian  (41.850396999999994, 43.78613)   nucl1302   \n",
       "\n",
       "  macroarea  phonemes  consonants  vowels tones  \\\n",
       "0   Eurasia        40          22      18     0   \n",
       "2   Eurasia        32          18      14     0   \n",
       "4   Eurasia        69          60       9     0   \n",
       "6   Eurasia        56          49       7     0   \n",
       "8   Eurasia        35          29       6     0   \n",
       "\n",
       "                                         source  \\\n",
       "0  https://archive.org/details/kor_SPA1979_phon   \n",
       "2  https://archive.org/details/ket_SPA1979_phon   \n",
       "4  https://archive.org/details/lbe_SPA1979_phon   \n",
       "6  https://archive.org/details/kbd_SPA1979_phon   \n",
       "8  https://archive.org/details/kat_SPA1979_phon   \n",
       "\n",
       "                           inventory_page  \n",
       "0  https://phoible.org/languages/kore1280  \n",
       "2  https://phoible.org/languages/kett1243  \n",
       "4  https://phoible.org/languages/lakk1252  \n",
       "6  https://phoible.org/languages/kaba1278  \n",
       "8  https://phoible.org/languages/nucl1302  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Phoible().get_df(strip_na=['tones']).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Note:__ By default when you call `get_df` or `get_json` it prints the citation. If you want to disable it, you shoud set the `show_citation` to `False`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>contribution_name</th>\n",
       "      <th>language</th>\n",
       "      <th>coordinates</th>\n",
       "      <th>glottocode</th>\n",
       "      <th>macroarea</th>\n",
       "      <th>phonemes</th>\n",
       "      <th>consonants</th>\n",
       "      <th>vowels</th>\n",
       "      <th>tones</th>\n",
       "      <th>source</th>\n",
       "      <th>inventory_page</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Korean (SPA 1)</td>\n",
       "      <td>Korean</td>\n",
       "      <td>(37.5, 128.0)</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>40</td>\n",
       "      <td>22</td>\n",
       "      <td>18</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kor_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kore1280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Ket (SPA 2)</td>\n",
       "      <td>Ket</td>\n",
       "      <td>(63.7551, 87.5466)</td>\n",
       "      <td>kett1243</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>32</td>\n",
       "      <td>18</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/ket_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kett1243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Lak (SPA 3)</td>\n",
       "      <td>Lak</td>\n",
       "      <td>(42.1328, 47.0809)</td>\n",
       "      <td>lakk1252</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>69</td>\n",
       "      <td>60</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/lbe_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/lakk1252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Kabardian (SPA 4)</td>\n",
       "      <td>Kabardian</td>\n",
       "      <td>(43.5082, 43.3918)</td>\n",
       "      <td>kaba1278</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>56</td>\n",
       "      <td>49</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kbd_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kaba1278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Georgian (SPA 5)</td>\n",
       "      <td>Georgian</td>\n",
       "      <td>(41.850396999999994, 43.78613)</td>\n",
       "      <td>nucl1302</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>35</td>\n",
       "      <td>29</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kat_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/nucl1302</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   contribution_name   language                     coordinates glottocode  \\\n",
       "0     Korean (SPA 1)     Korean                   (37.5, 128.0)   kore1280   \n",
       "2        Ket (SPA 2)        Ket              (63.7551, 87.5466)   kett1243   \n",
       "4        Lak (SPA 3)        Lak              (42.1328, 47.0809)   lakk1252   \n",
       "6  Kabardian (SPA 4)  Kabardian              (43.5082, 43.3918)   kaba1278   \n",
       "8   Georgian (SPA 5)   Georgian  (41.850396999999994, 43.78613)   nucl1302   \n",
       "\n",
       "  macroarea  phonemes  consonants  vowels tones  \\\n",
       "0   Eurasia        40          22      18     0   \n",
       "2   Eurasia        32          18      14     0   \n",
       "4   Eurasia        69          60       9     0   \n",
       "6   Eurasia        56          49       7     0   \n",
       "8   Eurasia        35          29       6     0   \n",
       "\n",
       "                                         source  \\\n",
       "0  https://archive.org/details/kor_SPA1979_phon   \n",
       "2  https://archive.org/details/ket_SPA1979_phon   \n",
       "4  https://archive.org/details/lbe_SPA1979_phon   \n",
       "6  https://archive.org/details/kbd_SPA1979_phon   \n",
       "8  https://archive.org/details/kat_SPA1979_phon   \n",
       "\n",
       "                           inventory_page  \n",
       "0  https://phoible.org/languages/kore1280  \n",
       "2  https://phoible.org/languages/kett1243  \n",
       "4  https://phoible.org/languages/lakk1252  \n",
       "6  https://phoible.org/languages/kaba1278  \n",
       "8  https://phoible.org/languages/nucl1302  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p = Phoible()\n",
    "p.show_citation = False\n",
    "p.get_df(strip_na=['tones']).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3. `citation` <a name=\"citation\"></a>\n",
    "\n",
    "You can get the citation for each database using `citation` attribute.\n",
    "E.g.:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bickel, Balthasar, Johanna Nichols, Taras Zakharko,\n",
      "Alena Witzlack-Makarevich, Kristine Hildebrandt, Michael Rießler,\n",
      "Lennart Bierkandt, Fernando Zúñiga & John B. Lowe.\n",
      "2017. The AUTOTYP typological databases.\n",
      "Version 0.1.0 https://github.com/autotyp/autotyp-data/tree/0.1.0\n"
     ]
    }
   ],
   "source": [
    "from lingtypology.datasets import Autotyp\n",
    "print(Autotyp().citation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Note__: if you use `Wals`, citation will be shown for every feature. If you want general citation for the whole Wals, use `general_citation`. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Citation for feature 1A:\n",
      "Ian Maddieson. 2013. Consonant Inventories.\n",
      "In: Dryer, Matthew S. & Haspelmath, Martin (eds.)\n",
      "The World Atlas of Language Structures Online.\n",
      "Leipzig: Max Planck Institute for Evolutionary Anthropology.\n",
      "(Available online at http://wals.info/chapter/1, Accessed on 2019-06-13.)\n",
      "\n",
      "Citation for feature 2A:\n",
      "Ian Maddieson. 2013. Vowel Quality Inventories.\n",
      "In: Dryer, Matthew S. & Haspelmath, Martin (eds.)\n",
      "The World Atlas of Language Structures Online.\n",
      "Leipzig: Max Planck Institute for Evolutionary Anthropology.\n",
      "(Available online at http://wals.info/chapter/2, Accessed on 2019-06-13.)\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "w = Wals('1a', '2a')\n",
    "print(w.citation)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dryer, Matthew S. & Haspelmath, Martin (eds.) 2013.\n",
      "The World Atlas of Language Structures Online.\n",
      "Leipzig: Max Planck Institute for Evolutionary Anthropology.\n",
      "(Available online at http://wals.info, Accessed on 2019-06-13.)\n"
     ]
    }
   ],
   "source": [
    "print(w.general_citation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Wals <a name=\"wals\"></a>\n",
    "\n",
    "It is possible to access Wals data (online) using `lingtypology.datasets.Wals`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "from lingtypology.datasets import Wals"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Citation for feature 1A:\n",
      "Ian Maddieson. 2013. Consonant Inventories.\n",
      "In: Dryer, Matthew S. & Haspelmath, Martin (eds.)\n",
      "The World Atlas of Language Structures Online.\n",
      "Leipzig: Max Planck Institute for Evolutionary Anthropology.\n",
      "(Available online at http://wals.info/chapter/1, Accessed on 2019-06-13.)\n",
      "\n",
      "Citation for feature 2A:\n",
      "Ian Maddieson. 2013. Vowel Quality Inventories.\n",
      "In: Dryer, Matthew S. & Haspelmath, Martin (eds.)\n",
      "The World Atlas of Language Structures Online.\n",
      "Leipzig: Max Planck Institute for Evolutionary Anthropology.\n",
      "(Available online at http://wals.info/chapter/2, Accessed on 2019-06-13.)\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>wals_code</th>\n",
       "      <th>language</th>\n",
       "      <th>genus</th>\n",
       "      <th>family</th>\n",
       "      <th>coordinates</th>\n",
       "      <th>_1A_area</th>\n",
       "      <th>_1A</th>\n",
       "      <th>_1A_num</th>\n",
       "      <th>_1A_desc</th>\n",
       "      <th>_2A_area</th>\n",
       "      <th>_2A</th>\n",
       "      <th>_2A_num</th>\n",
       "      <th>_2A_desc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>kiw</td>\n",
       "      <td>Kiwai (Southern)</td>\n",
       "      <td>Kiwaian</td>\n",
       "      <td>Kiwaian</td>\n",
       "      <td>(-8.0, 143.5)</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>1. Small</td>\n",
       "      <td>1</td>\n",
       "      <td>Small</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>2. Average (5-6)</td>\n",
       "      <td>2</td>\n",
       "      <td>Average (5-6)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>xoo</td>\n",
       "      <td>!Xóõ</td>\n",
       "      <td>Tu</td>\n",
       "      <td>Tu</td>\n",
       "      <td>(-24.0, 21.5)</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>5. Large</td>\n",
       "      <td>5</td>\n",
       "      <td>Large</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>2. Average (5-6)</td>\n",
       "      <td>2</td>\n",
       "      <td>Average (5-6)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ani</td>\n",
       "      <td>//Ani</td>\n",
       "      <td>Khoe-Kwadi</td>\n",
       "      <td>Khoe-Kwadi</td>\n",
       "      <td>(-18.9166666667, 21.9166666667)</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>5. Large</td>\n",
       "      <td>5</td>\n",
       "      <td>Large</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>2. Average (5-6)</td>\n",
       "      <td>2</td>\n",
       "      <td>Average (5-6)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>abi</td>\n",
       "      <td>Abipón</td>\n",
       "      <td>South Guaicuruan</td>\n",
       "      <td>Guaicuruan</td>\n",
       "      <td>(-29.0, -61.0)</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>2. Moderately small</td>\n",
       "      <td>2</td>\n",
       "      <td>Moderately small</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>2. Average (5-6)</td>\n",
       "      <td>2</td>\n",
       "      <td>Average (5-6)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>abk</td>\n",
       "      <td>Abkhaz</td>\n",
       "      <td>Northwest Caucasian</td>\n",
       "      <td>Northwest Caucasian</td>\n",
       "      <td>(43.0833333333, 41.0)</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>5. Large</td>\n",
       "      <td>5</td>\n",
       "      <td>Large</td>\n",
       "      <td>Phonology</td>\n",
       "      <td>1. Small (2-4)</td>\n",
       "      <td>1</td>\n",
       "      <td>Small (2-4)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  wals_code           language                genus               family  \\\n",
       "0       kiw   Kiwai (Southern)              Kiwaian              Kiwaian   \n",
       "1       xoo               !Xóõ                   Tu                   Tu   \n",
       "2       ani              //Ani           Khoe-Kwadi           Khoe-Kwadi   \n",
       "3       abi             Abipón     South Guaicuruan           Guaicuruan   \n",
       "4       abk             Abkhaz  Northwest Caucasian  Northwest Caucasian   \n",
       "\n",
       "                       coordinates   _1A_area                  _1A  _1A_num  \\\n",
       "0                    (-8.0, 143.5)  Phonology             1. Small        1   \n",
       "1                    (-24.0, 21.5)  Phonology             5. Large        5   \n",
       "2  (-18.9166666667, 21.9166666667)  Phonology             5. Large        5   \n",
       "3                   (-29.0, -61.0)  Phonology  2. Moderately small        2   \n",
       "4            (43.0833333333, 41.0)  Phonology             5. Large        5   \n",
       "\n",
       "           _1A_desc   _2A_area               _2A  _2A_num       _2A_desc  \n",
       "0             Small  Phonology  2. Average (5-6)        2  Average (5-6)  \n",
       "1             Large  Phonology  2. Average (5-6)        2  Average (5-6)  \n",
       "2             Large  Phonology  2. Average (5-6)        2  Average (5-6)  \n",
       "3  Moderately small  Phonology  2. Average (5-6)        2  Average (5-6)  \n",
       "4             Large  Phonology    1. Small (2-4)        1    Small (2-4)  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wals_page = Wals('1a', '2a').get_df()\n",
    "wals_page.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Map example for feature **1A**:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzk1M2ViNzU0MjAyNjQ4YWY4MzM2YWVkMTA5ZGFkZjBlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF85NTNlYjc1NDIwMjY0OGFmODMzNmFlZDEwOWRhZGYwZSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5Db25zb25hbnQgSW52ZW50b3J5PC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmYwO29wYWNpdHk6MC43OyI+PC9zcGFuPjEuIFNtYWxsPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjYTdkZjAwO29wYWNpdHk6MC43OyI+PC9zcGFuPjIuIE1vZGVyYXRlbHkgc21hbGw8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICM2MGJmMDA7b3BhY2l0eTowLjc7Ij48L3NwYW4+My4gQXZlcmFnZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzI4YTAwMDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj40LiBNb2RlcmF0ZWx5IGxhcmdlPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMDA4MDAwO29wYWNpdHk6MC43OyI+PC9zcGFuPjUuIExhcmdlPC9saT4KCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfOTUzZWI3NTQyMDI2NDhhZjgzMzZhZWQxMDlkYWRmMGUgPSBMLm1hcCgKICAgICAgICAnbWFwXzk1M2ViNzU0MjAyNjQ4YWY4MzM2YWVkMTA5ZGFkZjBlJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfOTUzZWI3NTQyMDI2NDhhZjgzMzZhZWQxMDlkYWRmMGUpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfMjRmNjliNDBkNzg5NGM4ODk0YWVjODYzN2VhN2JkNWQgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwXzk1M2ViNzU0MjAyNjQ4YWY4MzM2YWVkMTA5ZGFkZjBlKTsKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOTUzZWI3NTQyMDI2NDhhZjgzMzZhZWQxMDlkYWRmMGUpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyMjc0NWNhOWZjYTQxZGY4ODhlMzg1MGY2YTliM2M4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTguMCwgMTQzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllMjk0NzE4MjhiNDQ1ZWFhOWUxNDY1ZDFiMmUyZmVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI1LjI1LCAtNTUuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2VjN2RiMzljZGVkNDIzNWJiYzk1N2RhNGIwZTBkNWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wLCAxNDMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmZkMDUzMjIxZGNmNDJhOGJmOWNmMmZiZmNlYWQxNmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjAsIC01OS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lM2YyODVlODI0ZjE0OTZiYjY4YmY3MzNiODlhMjA0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjMzMzMzMzMzMzMsIC04Ny40MTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YzgwZjZiZjVmZjE0MjgxYTQxMWY1MjI4ZGYwOGRlNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMC41LCAtNzIuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTkzZWZiMmZmYTZiNGYwMmFhYmMzMmE0NTFiY2Q5NTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMC42NjY2NjY2NjY2NjcsIC03Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMDNlMDBjYTRlMGI0Y2VmYmZhZjA2NWIyZTQ3NWMyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy03LjIxNjY2NjY2NjY2OTk5OSwgMTQ2LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Njk1Njc1N2Y5MjM0ZTFlYWU4NTJhNDZkN2NkNTNmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI2LjU4MzMzMzMzMzMsIDk0LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViM2I5ZWI0YjZhYTRhYmQ4NzA4ZGU0MDZiZjMwMGJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNSwgLTQ4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmY2I3MWI0YTkwMjRiZGJhMmFlZTFhYmM2MTUxYjBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTkuMCwgLTY3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4ODhmNGZjMWNiODQyY2JiYjFiZGJhZTVlMTAxZWEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuMCwgLTc1LjE2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhNzZkZjI0YmI3NTQxYmQ4ODBjNzY1N2FmOTE0ZDJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNSwgMTM4LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1NmU4NDJkOTk0ZDQxOWVhMDQxYjBhODNlNGY3YjViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMS41LCAtNzguMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmY2IyZDE3NjQ4MzRjY2RiNmU4NTViMGYxYTNjMDJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI3LjkxNjY2NjY2NjcsIDE1My4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMDdhMDM3YTBhZjY0MzU2OWJjZDRmOWE5ZWQ2YWM1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi4wLCAtNTcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRkZjBlNjEwOWQyNDY2YmFjZTE0OGQyNGVjNDQ4N2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjA4MzMzMzMzMzMzLCAtNzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTAxODg2MzU0MWMyNGU3ZWEzNmY2NjkyMWFjODMyOGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4wLCAtNDYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmNiNTM4N2JkMWQ3NDgzNThhMTM3ZjBhNzJiMTJlOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS41LCAtODMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGVmZWEzZDMzMWZkNDlmM2I2YzI3YmQyNjJjZThmODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4xMTY2NjY2NjY2NywgMTQ1LjExNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTY0NWVkZmI0OTIxNGJiNzgzY2I4YTFiNWJiN2ExNWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy41LCAtMTAxLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiZmZlOTA2OGY4NDQzMTA5ODk3YmUxNjllMTY0YTA5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuMCwgLTExMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDlhNDdkZDIwYWI0ZDk1Yjg2MjA5MDk3MjQ5NzEzNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEuMzMzMzMzMzMzMzMsIC03MC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYjIyZTI3MTAzMGQ0MjQ4YWVjMWMwZWIyZDQ5ZmI1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjU1LCAxNDQuNTgzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0ZjY2ZWQ5MmU1NjQ5OWE4ZWYyZmExMTcwMTQ4MTQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEwLjAsIDE0OS4zMzMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2JmNjc2OGJhMWYyNGE5MjgwOTAwMTY5MTE2ZjA5ZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4zMzMzMzMzMzMzMywgMTM4LjgzMzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMjNmZDYyMWIwMmM0ZTc4YjdhMWM4ZTE4Mjk1MzQxYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjU4MzMzMzMzMzMzLCAxNDEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTdjN2VkYmVhZjk2NDQ0OWFlYmU0NjM1NjI0NjZmMWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi42ODMzMzMzMzMzMzAwMDAyLCAxNDEuM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWJkYmI2MjM1YzQyNDA0NWJkM2Q4YzgzNDU1YzVkMzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuODMzMzMzMzMzMywgMTQ1LjU4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZjZiZWFlNTgzNGY0NzU1OTBhNzljNzU1ZmYwYzk4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQuOTE2NjY2NjY2NjcsIDguNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjVkMTE2NjZiZGQ0NDY2YWJlYmY0NDlkYmZkYjZhMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy44MzMzMzMzMzMzMywgMTM1LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1MDEzNjFjMzU4MjQzYjE5YjY4ZDUwY2M4YTQ3ZTA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuNTgzMzMzMzMzMzMwMDAxLCAxNDMuMzMzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjYzk1Y2UyN2EyOTQzMzE5YWY2NWJjNWI5ZTJiMDdkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuMCwgMTE5LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmYzAxNDQ3YjdlMjQ1ODhiYTJkNjEyZGQ0YTNjZWY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMjUsIDE0Ni4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNDczNDY0YmU3ZTQ0YzkxYjVjMTJiZDA1YjAwYzY4NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjAsIC03Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZDc0YTg5OTZiMWY0NDhmYTIzNzViZDdlZjczNzVjMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy03LjUsIDE0Ni4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmQyNDJkNGRkY2Q5NGFlMGFiYTY2YWM5NTJiNDNjN2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS41ODMzMzMzMzMzLCAtMTU1LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkNDExZjc1MjE2YzQ3NjBiNWQ5NjdmY2RjMWY2ZDM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuMzMzMzMzMzMzMzMsIDE0MS4xNjY2NjY2NjcwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzNkNzdkZTY3NWQzNGUxOWJlODM0NzdhZGFmYjgxN2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy4wLCAxMzMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzY2YTVjMjJlY2UxNGZkN2E2MzAwYjlkMTk1Yzc3MjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4zMzMzMzMzMzMzMywgMTQyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExYzM4ZjE4MTUzMTQ2Yjc5ZGY2ODcwZmUxYmJhN2VlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNSwgLTczLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiYjNjOGZiZjAzMTQxMGM5NzY5MDY2Y2RiYWE3NDZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNTgzMzMzMzMzMywgMzAuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2E2MmRkNjkzYmY4NDQzMGEwNmIyOTFjY2Y4MjhkMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjYuMCwgLTUyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlZmJiODQxZjQ3ZTRlN2ZhNGU3NzU0ZmZiNDYyNmZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMS4zMzMzMzMzMzMzMywgMTczLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2ZGVhYTA5ZmY0NTQxNmZiYzhhZjY2ODI3MDhmNTU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC43NSwgLTguNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0NTU3NGJlZTIzZjRiMTU5NGMxY2RlYzI5ZDViZTk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuODMzMzMzMzMzMywgLTg1LjE2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAyNjQxMGU4NjgyNzRmOTE5ZGM2N2U5MTE2N2YwNzFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTkuNSwgMTQ3LjMzMzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMzA5ODU5MGZjNjQ0ZGU1Yjk0MDEwM2FjMWNjOGRmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi4wLCAxNDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTcyMzliZGIxNzJlNDAyMjkxMGY4MmU4NmE0NTcyYWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMS4yNSwgMTMwLjkxNjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMzE3N2Y1NWZlZmU0NjE2YTcxNjFkZDNjZTRiZjQzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy40MTY2NjY2NjY3MDAwMDEsIDEzMC40MTY2NjY2NjcwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDc5NmU5ZTkzMWY2NGNiMmJkZGRhNDFhMjZkMTQxYTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNDAuMCwgMTc2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2ZGUzNjkzMjUzMjRhYzU4ZjUxOGRiNDFjNzhiYjY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy44MzMzMzMzMzMzMzAwMDEsIDEyNC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmI2ODJjNWVhYzIxNDhiZGE2NmVkZTQxODhiYzczMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuNjY2NjY2NjY2NzAwMDAxLCAxMzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzgzNTRmNmY0MmM1NGRmZDkzNjU2MTU3ZjZkNzBmNTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTguMCwgLTQwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEyNmE4ZWQ2YjVjYjQ2ODc5MDM4M2Y0MmFhNDViZDQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuMzMzMzMzMzMzMzMsIDEzMi41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjFlZTAzMGJjNzE0YWZmOWE1YjA4YmMxMDAyODM4OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjI1LCAtOTYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWU1MzQzNmU1MDkzNDdmZmE2M2Q5MDU4YzFmMDhkYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi45NSwgMTM1Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOTc0NTI2MWY0MGI0MmRjOTBkMmU1ODNkZmYxNWJhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuMjUsIDM1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiNjYwMzgyMjBmZDQ3MjU4MjkzMGJmZTc3ZTBjY2QyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMzMzMzMzMzMzMzMwMDAxLCAxNTUuNTgzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2MzJiODJhOWZmZTQzMDZiOTcwNGIzMzIxOGQzYzE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuNSwgMTQwLjE2NjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzMxNTI4MzJlMjI0OGYxYWRkN2FlZGEwNGFhMTExMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjAsIC03NS42NjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MDc1ZTY1MjNjOGY0Y2Y5YmQ5YTY1OGE4ZmZhNzc5NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuNSwgLTY2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4OWMwMWNlMDAwMjQ3ZGY5ODBjMDM2NmYyNjMyNTMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuMCwgMTQ1LjA4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNmI2YTQ4ZGIxZTQ0NTEwYmQ3ZTMzMWFmNjdiYTFiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy03LjAsIC02Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NWMyNTJjZDQ4M2I0ZjU2YWM2YjgzYzVlNmE0OTdmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuODgzMzMzMzMzMzMsIDE1OC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDJhMmI0ZGQ5NDI0NDE1Mzg3NzU4NjhmZGY0MDc5ZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC41ODMzMzMzMzMzMywgMTUyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0OTliYzM0MTRlOTQ0MGI5MzIxNzEyZjM0YThkODlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI3LjExNjY2NjY2NjcwMDAwMiwgLTEwOS4zNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiMDc4ZDc0OTAxMTQyMGVhYmJkNTJiNzc0YWE3NDVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTguNzUsIDE0Ni41ODMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODk1YzFjZTE2MWQ3NGUzMmE2OTU3ZTI5N2ZkOTlhYWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4wLCAxNTUuMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyOTBlYTRmM2JiZDQxMjI5NDkwMDNkNjA2NTc0ODdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC41LCAtNjQuNjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmVhYTJkNWY4NzEwNGJmNDhiZTQ1NjJiYzRhM2M1ODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjMzMzMzMzMzMzMzLCAzNC41ODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjdlMzM3YWI0OTg0Mzk4YWMwOTNjNzViNzAwYjVlOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjUsIC03Ny41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NDI1ZWEzMTNmYjU0MTRhODRlNTdiZWVhOTIyOGQxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjU4MzMzMzMzMzMzLCAxNDAuNTgzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmMjgyOTA5OTg0ZTQxMGU5YjY1Y2NkMWFkNjYzOTk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMy41LCAtNjIuODMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTljN2MzNGQyZThlNDg2MTgwNzAwZWFkNDIyNGYyZmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy43NSwgMTQ3LjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDNkNWQwNTQyNjU0YjgzYmU5NGI1OWIwMmU5NjhhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy05LjAsIDEyNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNjFkODMzMWM1NjQ0NmQzYjUyMDM1OWFlZDI4NGJhYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjcxNjY2NjY2NjY3LCAxNTAuOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2VhNjhhNTg2NDc5NGUwN2IyY2Y1MjFmNDEyYzY5NDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC4zMzMzMzMzMzMzMzAwMDEsIDE0Ni4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI3YTM5MGI0NTA2NGM2NDgyMDJkMWQ4ZDcwOTUwZGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC44MzMzMzMzMzMzMywgMTQ1LjE2NjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OGU2ZGJjNThjMzE0MWM2YmY2Njk2NWYyMTI3MDYzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuMzMzMzMzMzMzMzMyOTk5OTcsIC03MC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzhjNzdlZmI3M2QxNGE0NjhiZWM1MDRjZWE1NTUxYWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjMzMzMzMzMzMzMzMDAwMSwgLTYxLjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRlMWY4NDhkMzg5ODRkMzI4MjZiM2VmNmZiMWMxY2FmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuMTY2NjY2NjY2NjcsIDE0MS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZjdmMTBlN2JmNjg0NWY5OTNkMDQyODc5ZGYxMmIxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy45MTY2NjY2NjY3MDAwMDEsIDE0MS43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTQzMmYyZmJjZmE5NDVjOGJmN2U4MTEyNDRiN2FjM2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4zMzMzMzMzMzMzMzAwMDEsIDE0NS40MTY2NjY2NjcwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWY0OGRiZmIzOWJiNGUxZTgzNDdhOWE0NDIyZDJhM2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy41LCAtNzIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTRkNzBiZjk4ZDQwNDVmM2ExNzY4MWFiMzhiMGE2OTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOS41LCAxNDguNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzMzNmE4NmUwZDMwNDZiOGFmOTYxYjE0NmNhOWFmYzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMS43NSwgMTM2LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNTAxODE0NDEyYTY0MjA5OWMxNjdkOWYyZjAxNzE4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy4wLCAxNDUuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjYzk5NmNlMGVkZjQ0MDliNzliMTc2ODhlYzAyYmRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQuNjY2NjY2NjY2NjcsIDE0My41NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTg4OTI4Yzc3Yjg4NDI0OTg0ODhjMjFkZjdjNTg4YTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjkuMCwgLTYxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5M2M3NDZiZjY5NzQ3MTZiMzU5ZjdjM2RhNTg3MmUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNSwgLTEyMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzJlYjBjNWMxODg0YjJlYWM4OWM4YzBjZmRkMmJmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjI1LCAxNDYuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3YTRkMzNjNzhjMDRjYTZiMzJlMmFkNDcwYWMyNmZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQuNjY2NjY2NjY2NjcsIDE0My4zMzMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmJiNWJiNWUzMjI1NDA0MmFhODE0OTQzODdhNmVmY2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4yNSwgMTQ1LjU4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmRmZmQ2YjcyNmU0NTkzYTI0ZDYyNzgyOGEyNTg4ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjQ2NjY2NjY2NjY3LCAxNDMuMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1ZTEzNzMxMGZlODQ4M2Q4MjFkZDIzZGM0YTY0MjI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuMCwgMTAwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmZTVhMmQ4YjljMDQ1OTBiMjcxMzA2Zjg3NTMzZGY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjAsIC01NS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjY2ZWNiNTgyNmE0ZDM1OGNmYzgwNDRmMTNkNDBlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi41ODMzMzMzMzMzLCAxMjIuOTE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lODAwM2NmNWE1MjI0NGFlYWRjMzY5ZTI4NGMzMzgxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjAsIDIuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTZhZDExYzEyNTRkNDhiMThkMTUyNjlmMGMxZGFjMDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjI1LCA5OC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmFjZjJjZjQxMWM4NDRkOTlmMjhhYjFlMzEwNTA2ODIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjUsIDk5LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiYjg0YWJkZjQ3MDQ1OGNhYTM3MDU4YjBmMjE5MzBlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuOTE2NjY2NjY2NjcsIDE0LjA4MzMzMzMzMzI5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzdmNjE1MjM2ZDI1NDZkOGFjYTkxYzU4MTQ5MjY0NjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS41LCAtMC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kN2M1N2M5NzViZWY0NTJlODk0MDNmZTI3OTkzMzNmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI2LjgzMzMzMzMzMzMsIDkyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliMmRkYzE5MGM1NTRiNGI4NDExNGU2ZDgzYzRkZjE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS40MTY2NjY2NjY2Njk5OTksIC04My4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81N2VlNDVkZjNhNmM0YzUzOTcxYWMxZjM4MTZhNzU1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi4yNSwgMTM0LjU4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OTY4MTFlYzhhNTU0MTkwYWE2ZTljODRlZTRmYjU1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi4wLCAtNzQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGIwODdiZTdmY2NhNDBhMThiMzViMzE4OWJjOGNkM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjUsIC01Ni4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTdiYzRmMWZkYWQ0NWY2ODMwOWI0YWU4YzRmNDdhZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy41LCAtNjUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTcwMmU4Mzg4M2ZlNGMzNGFmYTlkZTkzM2UzNTQ2MzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi4yNSwgLTk3LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1NGJhZTRmZjg2YjQwODNhNTAzM2I3NzRmZjg2NDBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMCwgLTg4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiMjk0OGVkNmJmYjQ0MzA5NGY3MjBmYWFlYjNkYmFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjcuMCwgLTE3My4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNmZlMzk4MzcyZmY0YzcwOGFkNDE5MjE4NTUxNmYxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMuMCwgLTc3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1OGY0OTg3MGVlNzRlNzA5MThjZjhlOGM1MGM0NWZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjguMCwgMTMwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyZDljMDRiOGMzZTQ3ZDFiZmE3NTk0YmRlNDgzM2E0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTYuMCwgMTI1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0NzI3NTg2YmZjMTQxZjE4MzkwZWRiMDlhNDI5ZTc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4yNSwgMTAuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTVmOTQxNzY4MWViNDRjYWI2MTEyZjJlOGI5Y2VkZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Mi4wLCAyNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZWVlNTRhMGNmZDA0YzVkOWFiNmQwZmYxMzQ3YjZjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjUsIDI1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2M2RmYjY1OGJlMDQ0OWVhMmFjZTI4NjQ5MjNmMDkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjUuNjY2NjY2NjY2NywgOTAuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGZlYjUzODQ0MDNlNDVlMjk0ZmE4YTNjNzdkMzAxOGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjAsIC02OS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYWQ0NDA1YWI2Yjk0ZWYxYTU2NTNjNjk4MTNlNDZiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuNSwgLTc2LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwOWE0MTc4OTNiZDQxYzliODlhNTk4M2MzMGI4MzU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI2LjAsIC01Ni4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YmFhYmM3MjM5N2I0MmJlOWQ3YThiMGViMGEzOTVkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI1LjAsIDExNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNGEyOTJlM2Y5OWE0NTMxYjAzOTYyMDdlNWI2OTMyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjc1LCAzNS4xNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYWJjZjFjZDczY2I0NTIwYjQyYmZlMWVkNzg4Y2MzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xLjAsIC01OS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZTg1N2QyNDYxYTE0NWNmYTFkYmRmOTM5Y2RiNjg5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xLjAsIC03My41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Y2U3M2QxMzExZjE0ZDM3YjAwZTkwZTE5ZWQzODExOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjY2NjY2NjY2NjcsIC03My43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDFmMzIyYzBiY2I4NGU1MTg5MzhlZTcwOTE1MTY5ZjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy4wLCAxNDAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDc0N2EzZTM5NzA0NDEyMTgxNmNhNzFkNTQzYTFjMDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi41LCAtNzguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzVkYjIyYWE3NDFiNDllOGE2ZGNmZmM3NzljZmJiYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTAuMTE2NjY2NjY2Njk5OTk5LCAxNDIuMTE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yY2E5ZDJhY2FjMmM0MzdmOTI4ZGY2ODM4NjM5ZmE4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjY2NjY2NjY2NjcsIC0xMjMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2RlNzIxZWMzMmI4NDRlOTljNzdhMmZjMmUwYTY5ZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuMDUsIDEzOS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZTM2ZTUxYTA3OGI0ZGNjODIzOGJhYjVhMzQ2ZTYwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjI1LCAxMjMuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5MmM2Zjk3NzFiMDQyMmZhZThmYWUwOTBlMDY3NjkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjQuMCwgODcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTEzNWMxODliM2JlNDZiMWE1NzQyZDQ3N2ZhYzM3NTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi41LCAxNDMuODMzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JjZWQ3NjAyZDNhOTQ1NGQ4ZDY2NzU1YmFjNGEwMDFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjUuMCwgNjUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzk1ZjJiNGY1OTllNDI0YmFiNzQ1MWY3YzNhNDUxOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjUsIC0xMC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2I2ODcxNmJhN2YyNDg3YWI1M2MzZDUzMmJiN2Q5YmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC4yNSwgLTAuOTE2NjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMjc3ZDhhNmVmNDM0ZTRlOTA0MDIzN2ZkZDUzZjg1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYxLjAsIDE2Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NmJmNmFkZGQwNmU0ZmYyYjZmMDZiYTg1YWE3N2JiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjAsIC0zLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzZTQwNDYxNWRlMjRhOWE4OWU1MDcyYzQ5ZDcwZGViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTYuMCwgMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZmI1NWEyMjc1OGI0ZjE5ODJjOTQ2YWM5ZjMxN2UzOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzguMCwgLTc3LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1Y2RjYjEzZWUwYjQ2NjNhOGRmM2JlYzFkZjkxYzgxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTguMCwgMTQ2LjgzMzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZDkwM2YxYTEwYzU0Zjg2YWI1YTA1NDQ0ZWRmZTVlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04Ljk1LCAxNjEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODQ0NzNjZWVjZTAwNGE1MmJjZWY5YzVkODYwZjA1MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjE2NjY2NjY2NjY3LCAzMy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YWM5N2UwOGNiMDA0YzU5YTgwMzI1YjQ3YWVlOTU2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy05LjA4MzMzMzMzMzMzMDAwMSwgMTU5LjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlM2EzZDdhZjJjNTRjNjJiNWVkMjYzYWJkMWI0MzZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjQ1LCAxNjkuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4NDgwMTEzMzdhZDQ2NWU5ZWUxYzIwZmViMGUyZTE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNTgzMzMzMzMzMzMwMDAxLCAxNDkuNjY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljMDJlYWRlOGUyMjQ3YjE5OGQ3N2VlNzY3NmMxMDAxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjAsIDIyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwMWEzZWQzZDAxOTQ0NjVhZGY5OTFjN2M0ZDU2ZWY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMCwgLTEyMC42NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0NGM2NjY2YmI4OTQ1YTNhZWZkYmYwZmJlYmE4NzMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNSwgMTI3LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzZWIzNGI2MGViYzRhMTc5ZDUwMWMzNzk5YmFmYjNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjY2NjY2NjY2NjcwMDAwMSwgMTMzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzNjFmYTQ5MzFlZDQwNzI5ZGNmNzVhZmE5NmM5NjI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuODMzMzMzMzMzMzMwMDAxLCAxNDAuMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ZDlmMTYxODMwOTQzMzlhMWI0ZmM4ZGJmMGIyM2IxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjkxNjY2NjY2NjcwMDAwMSwgMTMzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3NmRlYWZiMTYyODRlOGM5OWU0MzMyOGI4MzRhM2IxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNSwgLTEyMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNmQ2ODJiMDYzNzg0ZmNkYTNiZTI0MDRlMTNiZDgzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjA1LCAtOTcuNTgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2MwMDA1MTc2YzA4NDcwZDg0ZGE5NGRiODhhNGU3Y2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy4wLCAtOTcuNTgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjllZmNkZjM1OWE0NGQ3OGFiZGE0ZGI5ZTIyZTBkODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuODMzMzMzMzMzMjk5OTk5LCAtNjUuNjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWMyOWNhZDAyNjYxNGIyZmJjYzI4ODI4OTIyZDVlYWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4wLCAtOTguMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEyMTkzZjBmZjA3YzQ0MTg5NDQwYTQ3NTJlNWU1MGZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNjY2NjY2NjY2NywgLTk5LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4MjU0NThhYTlmYzQ5ODRhYjJlOTk5NTJlNmM3YjIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNSwgMTM3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwYzMzNTE3MGU2NzRjYzM4ZDNmYThhNTExNDZkODBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOC4wNSwgOTMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzJmNzQ2YTk4MDdiNDk3OTliMDNhNTJiNTUzMDEyMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0LjUsIC01NC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNWU4NjBjZGFlMmE0MDZhYjlhODc1NWMxNmVkYTdiZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIxLjAsIDMxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlZTU0YjEwZTFkMTQ4M2ViZmJiNmNmYWM2ZTI4MmQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMy40MTY2NjY2NjY2NywgMzMuNTgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzRiNDgxNTZjNjMzNDgzY2IxZjcwNjNkNWVmMDA4OWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4xNjY2NjY2NjY3MDAwMDEsIDI5LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNmMzQ1ZDQzZmNlZjQ1MGNiODNhODk1MjNkNTYwMmQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjcuNSwgOTMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmExYjNmNWU1MTQzNDdmMzgzYjA1ODFjNzJiYzIyYmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4wLCAtODAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTgyMzk2YjY1YzQ5NGY1MGJhMmI3MDU0ZGRkMzk3YmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTYuNSwgMTY4LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YWJhNTQ1OGVkMWU0ZDk4YjE0ZDE3ZjVlYzhlYWM3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAsIC02Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMDA4YjFhZTQyNGI0NzMwOWY0MTFmYjQ0ZjMwNmY1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjAsIC04NS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNDQzZmQ1YTc2NzY0MWNmYTg2NTk1ZTBlMmRiYjVhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yNi4wLCAxMzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNkNDI1MTIzZmQ0NGExMmI3MDZlOTlkMzJlMmFmZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuNjY2NjY2NjY2NywgMTY0LjgzMzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NGVkZGZmNTNhMTM0YTc1OTgxYmNlMmVjMzUxZDk3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjc1LCAtODMuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3ZjI3MDc5OTRhOTRlMGI4MjFlMDRlMGYwMzBiZjRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTkuMTMzMzMzMzMzMzMsIDE1OS44XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xODAxMzQ1MjYwNzM0OTc4OWMwMjg2OWUzMTJjY2UzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjE2NjY2NjY2NjY2OTk5OSwgMTQ3LjE2NjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMGE3NGQ0OTdiMzY0YzgxYWYwOThmZDdhYjQ2ZjNjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY1LjAsIDgyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwMWMwN2Q4ZjNhZDRmN2Y5ZTgyMDViMzMzZTM4ODA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODMzMzMzMzMzMywgLTEyMi42NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkNjczNzQ2MzU1NjQ1MjU4NGU2NGJkOWI5MDc2YjliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuNSwgLTc1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1YzE5ZTI3MWQ5YTQ0YTU5ODRiOGQzZTVlMDYxNThlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC4zMzMzMzMzMzMzMzI5OTk5NywgLTc2LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYmJjMjE2MThkMDE0OGZhOTM0MmMzZDg4NzExYTc4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIwLjAsIDg0LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5NWRjMTgwOWJhOTQxYzA4ODIyNDE3NzIyYzNjOGUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC4wLCAxMjcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjg0ZDJhYmM2YzA2NGZlY2JkNjBlMGYwYTAwOWQ0NmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuNSwgLTY4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3OTEyNzE0YmM1ZTQ3MjBhMDMwM2EyMzBmNmJhYmQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMCwgMTIxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxMzY4Yzc0YjQ3YjQzZjViOGM2OTBlZmRkNGY1ZDVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4wLCAxMjEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzJiNTE4ZGQxZTVhNGI2OTg3YmY2Yjg0YWMwM2QzNDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS45MTY2NjY2NjY3MDAwMDEsIDI5LjQxNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VjYTYyMGZmM2YzMzQ5NjlhNDhjYjI0NzE3NzhjNTVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOC42NjY2NjY2NjY2Njk5OTksIC0xMy4wODMzMzMzMzMyOTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1MDBlOGNlYmQ4MzRiZDNiZTYyZDBhOThjM2VlOGFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQuMCwgLTcwLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YxY2M5ZTQ3NDdkODRjMmRhMmIzOTU3ODdmNDgxZDAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi43NSwgMTI0LjE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzI5ZTI5OWIxMzdhNDExZmEyMmQ2Y2Y0N2U0Y2JhNjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMC4yNSwgLTk2Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kY2IwYThmOGI1ODE0YTQ5YmFiNDM3ZjBmNDAxNDc3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjQxNjY2NjY2NjcwMDAwMSwgLTMuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjMzdjOWJkNGE0YzRmYTU5MTIwZjcyMDNiOGJlNzYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjAuMzMzMzMzMzMzMywgLTk3LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FhMTQ1Y2E1NDlkZDRhNzNhN2ZkNzE5ZmNhZWNlNTc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjMuNSwgMTIwLjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MzU3MmExZmUwYjM0Y2IxOWZmZWUxMjc5MzM4N2FmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjY2NjY2NjY2NjcsIC05MS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNmNhNWYzMGQ3YmU0MTJjYTExZjM4MTI4Y2EyYTIzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi4zMzMzMzMzMzMzLCAxMjYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWM4YjM5NjFmYTU1NDQyMWJkYTg2ODNkY2FkMmI4MzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi4zMzMzMzMzMzMzMywgLTQ2LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVmOWIzNDNjMzkxNTQ5ZGViN2FmZjVjMDZiMDZkYmI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuODMzMzMzMzMzMzMwMDAxLCAxNDQuNzE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTY0OGU4YWJmZjI0MTU0YWFlOTQ2Mzc4ZmNhMzE4OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOC42NjY2NjY2NjY3LCAxMzUuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU1NGY5MGUzYjAyYTRmNDlhMjRkYWI1YTlmMmJiOTk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMTY2NjY2NjY2NjY5OTk5LCAxNDYuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWI3NTE0NmU2OGE2NDRmZGEwMDRlNmQ5YWMwMjQ5ZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjY2NjY2NjY2NjY3LCAtNjAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTYwMTA3MWJkZWI1NGJhMWEwMTNjNDQ0NDNmZTM1YWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuMTY2NjY2NjY2NzAwMDAxLCAxMzEuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1MjI4MzkyMjQwMzQ0ZTQ4YmExYmQyZTA2MDM1NGVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE1LjUsIDEzMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mN2ZlOTk0M2M2ZTc0NjEwODI4Yzk4ZmQ4OWU3YTg2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS4zMzMzMzMzMzMyOTk5OTksIC02NS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTU2ODA3ZWRjZTM0ZTRlYTYyODZjYzA2Nzg2NzdhNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNSwgMTI3LjU4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGEzN2E5ZjhjNTJkNGZkYjg5MmY3OTJhZDY4ZmNkZjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzAuNSwgMTMyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2NzUwZDAzNWEwYzQ1MTFiOTZmMDQ4MjJkZGY0MTUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTguMjUsIDEyNC44MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FkNTZlNGEyZGE1NTQwNDg4N2VlZWU0MTI4ZGU5NTk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjcuNSwgLTExMC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTQzNTQ2ZDk5ZTAxNGM4OGEzOWVjZWU1YTY0ZTVlNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4xNjY2NjY2NjY2NywgMTQyLjU4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZTRhMDg3YzFjYWM0ZTYzODRhMThkNTU5ZDZiNjViYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzguMCwgNC4zMzMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2U3NDBlODA2NWZiNGM5NTkxMjIwM2NiOTBmZWQ5NjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMC43NSwgLTcxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwM2VmOGJiOTQyZTRiMjNhMzU2MTAwOTRlNGZkMmI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMCwgLTkzLjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOWZhYTVkYjZmZTI0ODc1YjIwNGUxYTMwMzcxODYyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuNjY2NjY2NjY2NjY5OTk5LCAxMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMTQ0YTQzZTQ1M2Q0MWU3OWY3MDJkMTg5MTVjNjkyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi42NjY2NjY2NjY3MDAwMDEsIC02MC42NjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZWJhYjNhYjYzNWI0YTUwOGExMmM3Yjg0NjE5ZjdhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuMjUsIC00LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2ZWEyMDU2MmQxYjQyZmNhMjJjNDIxNGY1MjQ0YjVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi41LCAtMS4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDNkMWYxZDM0YzdiNGUyZmIwMDc3NWI2YzA3MDNhN2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTUuMTY2NjY2NjY2NzAwMDAxLCAxMzQuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1NzgxNGU4NjQxMjRmOWZhZmM5Y2RiMWY0NmE5YmZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMCwgMjAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWVmMmE1MWU1YTM3NDIxOGI2OGZmYTJlMGJhYzZhOTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1NC43NSwgLTE2NC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTg2NjVjODlhY2U0MWI5YjJjMjY2ZDE2YTA4NWM1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuMTY2NjY2NjY2NjcsIC00LjMzMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjcwZmRkOWNkODg0ZTcxYjY4MWY3M2FlZjk5MThlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjMzMzMzMzMzMzMsIDguNjY2NjY2NjY2NjY5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMmUxNjI2MjVlYTU0MmYzOGVmMWU2ODVmNjNhMGVhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMC41LCAtNzUuNDE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzBhNjRiZjM4ODUwNDMxYTg0N2U1MzE4MTAxZTA2YzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi44MzMzMzMzMzMzLCAtOTguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWI5ZjhmYzY5NWYwNDY3NGE2MTZhYTljYWE1ZTNiZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuMzMzMzMzMzMzMjk5OTk5LCAtNjcuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNmNzI5ZmIxZWQ5MzQ3NmM5NTJiZDg3YWYwYzRmNWM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjQuNSwgMTIxLjMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWQ2ODgyNzliOTIzNGI2YTkzNDNlMWY0ZmU1ZTIwYzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41LCA0OC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OTIyNjMzNzZhYjA0ZjFiYjI5ZDgzZGM4MjE1M2FmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjUsIC03LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlYTUxNTkwMDc2ODQ1ZjY4ZjU3NjE0M2NkNTdmZjJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMCwgLTMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDM4ZTRlNWM0N2VhNGMzY2I2NjYxMTE4ZDZiMWUzZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi41LCA5Mi4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTJkNDgyODA5MDcyNDEzYzg3MTY1OWJjNWI2MTc2MDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC4wLCAzNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZTU0NDc1NTQzN2U0N2ViYjkzYzVhN2JkNGIyODQ1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjMzMzMzMzMzMzMsIDM0LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4OWIwYjY4NzJhZjRkOWY5YzVlN2I1Njk0OGM3ZWZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS42NjY2NjY2NjY2Njk5OTksIDguODMzMzMzMzMzMzMwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iN2M2M2NjYmQ5OGQ0MjY3ODY3M2IxMzg0NmJlY2NlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjQxNjY2NjY2NjY2NjY5OCwgLTQuMzMzMzMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQxOTQ1N2FiYmRjNDgxOGJkZTYwYzY5OWRkNWM1OWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyOC41LCA2Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTA5NDVlNzdkMGM0OTYyOThmMGU5MTljMjJmMzFhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjE2NjY2NjY2NjcwMDAwMSwgMTA3LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwYWQ3MDgwNzZjMzQ0ODg5MTgxMzZjZjRhYTJlZjVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMCwgLTMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGRjYzA1MjM2NDliNDM0Y2EyZGE3ZWI5MzMxYTdjN2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi43NSwgMTA0Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNGY0ZjdiYjI3ZDM0N2Q0ODlmMjMzODk3YThiOTBmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjUsIDI1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhM2E1NTM4OThlMzRmYTI5YmZhMDM4ZTMxMzFjYTU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4yNSwgLTYuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyZDE2Yjg4NjhmODRhZjQ5MjEwZDJhNmZlOGMzNzljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuMzMzMzMzMzMzMywgLTkzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0ZDUzNjk2MTYxMDQ2YzE5MzAwYTYyN2RiNTVlYTZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNSwgLTExNi4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGRlMmQ2NTFlY2ZiNDkyM2I5MmM0YWUwODJhY2FmN2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjE2NjY2NjY2NjY3LCAtNzcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDU1OTQ5ZmZjNzc4NGE2NGExNThjMTE3MzNjNjI2NjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMy4wLCAxMTMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTBjOTQyNjViMDhlNGJlOWFjZmNmM2I2OWFhMGE3YzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS43NSwgMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZjE5MDQzYWIxZDk0NWMyYTgwYzE0OGE2OGFjMzgyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNjY2NjY2NjY2NjY3LCAtNzkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzVjMzk1MTFkNGQyNGM3Njk2OTgzYmYwYjk4ODE1NmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4wLCAxMDUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGZiOTEwMjlmNjQ0NDQxOWE5NGE2YjJjOWVlZjZjOGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMy40NSwgMTQ0Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZTNlOGM3NmE2ZDE0M2YyYTliZTExMDM4ZjJlYmE1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIzLjMzMzMzMzMzMzMsIDkzLjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNmYTlkNmYyNThhODRiMDY4YjYzM2UxODk3Zjk2MmU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMzMzMzMzMzMzMywgLTk1LjkxNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0MzNiZTA3YjM2YTQxYzFhNjFkOTg0NmI4NTQzZWJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTUuNSwgNDcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWRmZDk1OTYxZTQwNDcyZjlkMmExMjBiMTc4YTE4ZjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4wLCAyMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDRiYzgwOTBkZDk0YTYwODFkN2Y0MTVhYzY2YmNjMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjMzMzMzMzMzMzMsIC0xMTUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWMyZWQ4YjkyYTVlNDEwY2JiZWNlNmExMDAzNjdjYjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjU4MzMzMzMzMzMzMDAwMSwgLTAuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjlkMzNjYTc5MTIzNGNmZmIyZWUxZmI4YTcwNGFkNDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAxMjQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGUzMzU4OGQ0NjNkNDllNzhiMGFjZTdhOGEzNjBiOGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4yNSwgMjUuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxMWZkYWZhMTFmYTQ5MTU5MTA5MmFlNjllY2I1NjBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy41LCAtOC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MDhlMDdkNDMwNTQ0OTYyOWQyNjg2ODhhMjA4OTgwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjE2NjY2NjY2NjcwMDAwMSwgMTguMzMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzQzZjNmMTQyMDk0NGM4YmE2ZjQ2NjEwNTk5ZGQ0MmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMi42NjY2NjY2NjY3LCAtMTE2LjE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDU0YTJiZjQzZDAyNDcwYThjZGI3NGE5ZDc5OTViMmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjUsIDI4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjMmZkZjY4MDI2ZDRkM2ViNWFiMThiNWI1NTRlNDUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTMuMCwgLTE2LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNGQ0OTM0NGQ5OWQ0NTQ3ODk0ZTIwNDQ0NzEyYzMwZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yOC4wLCAxMzkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2U2YzdiOWM5OGNiNGQ5YmI5OGJmYWM4ZTY0ZGMwOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjE2NjY2NjY2NjY2OTk5OSwgMzYuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjdkNjNjOGIyYjJiNDZkMThiNGNmYjhkODVkMDk0MzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuNjY2NjY2NjY2NzAwMDAxLCAxMzYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzBmNjA0N2U5OGM3NDJmMjliMjM0N2U5M2M3YjhlNmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjY2NjY2NjY2NjY2OTk5OSwgMTMuMDgzMzMzMzMzMjk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTA4Zjg3ZGMzOGU0ZTZjODNiZTViYzNlNWQ2NTg1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuNDE2NjY2NjY2NjY5OTk5LCA4LjY2NjY2NjY2NjY2OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGM5MDdiMTAwOTI2NDU1MTliZGIzODBlMGUyMDM4OGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wLCAwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzM2MxNDIyYWUwYjQzNTI5MzNiNjY2ZjA2N2E0OGJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3LjgzMzMzMzMzMzMsIDE3OC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NzQyZjIyZjU0Mzc0M2E0YTQwOGE1ZjBiZWJjMTI3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjAsIDIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTA1OTIyNDY3NDZhNGIzMDg1NDU4MjhjNzQ1YjkzNzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC4wLCAtMzcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDExMDhmN2MzNDcxNDAzNDgzOWNmMTBiYTRmM2JkMTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuMDgzMzMzMzMzMywgMTM3LjE2NjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80N2RmMGRhMzU4ODM0ZmMyODZmNTRhMDE3M2FmNWZmNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjAsIDEwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlMmQ5MWNiOGFkNjQwYjc5MzdmNjYzMmZmNDQ0MGE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE4LjMzMzMzMzMzMzMsIDEyNi4zMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2ZTE3ZTE5ZDFlZDQwMWQ4Y2RkODE3Yzk5YTczMTA5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMCwgOTIuNjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjA5MmI4MjUwZmZiNDYzNWI1ZjA3YzczNzkxMjRhMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjAsIC04LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1ZTY5MDBhNDQyMzQyMTZiMjBjZTVhYWYwOGRjOTU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMCwgMjIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzM2MzcyY2RiNTgxNGE2NWI0MjZjN2I5MGFiZjE3NmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NC4wLCAtNTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWZhNWIwOTY5MzQyNGQxYmEzMjhkY2JlMzNlZDZjYzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjUsIDcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTZmMGU3NmZiYzdlNGUyZDg3NDAzOGVhY2ViZmEwZDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjAsIDM2LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVmOWI5MDAwZTJlZjRkMDdhNTFmOWZkY2U5ODRjNzdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMCwgLTExMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MzM0NDI1NGZmMmY0NzE1OWEyM2RhZjc3NmM1NGNmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIyLjA4MzMzMzMzMzMsIC05OS4zMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmE5MmM4NjkyMjg0YjkzYTYwMGViMTI4YzgzMzc3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjIxNjY2NjY2NjcsIC05NS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZWQwYzI1NjBlN2U0MmUyYTFmYjA0MzBjZmNkN2JjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuMCwgMTEyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljNDk2M2I1ZmI0MzQ5YjJiZTY3MzM3Yzk4MzllOWIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE1LjE2NjY2NjY2NjcwMDAwMSwgLTY1LjQxNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlNjRiMTAyMjM2NDRkNmFhYWY3Y2U3YzliMzg5YTI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC45MTY2NjY2NjY2NywgNS42NjY2NjY2NjY2Njk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIyNGI1NzI3ZjRhNjQ2YjRhYmI5ZDFjOGRiZjkzZDU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC4wLCAxMDYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjRkNzIxZGIwZGNiNDk0NjkyNGQxZDVlOThmNzVhNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS41LCAzNC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jODI0Y2Y2M2UyMTc0YmZmYjQ1MzI3YTQzN2U0MzVjNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy4wLCAtNTguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjBhYmE0ZjU5N2UyNGYyYjhlMTcxZDkwMDdhYTg1Y2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuODMzMzMzMzMzMjk5OTk5LCAtNjQuMzMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzYwOWIxOTJkOTk4NDUwYTlmNmViZGZkNGY3NDE5ZGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4zMzMzMzMzMzMzLCAxMjEuODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MmQ1MTZkMWIwOTk0ZDU2ODM4NTYzMzRiOTQ3ODdkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy03LjAsIDExMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MjU3ZTQxNzE3NDI0MWI2YjBlM2FlNzhhOGJmZjg4OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01LjQxNjY2NjY2NjY2OTk5OSwgLTc2LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlYmE4ZTQwM2Y4YzRjOWJhYjljNTZhZTNhNTM1ZjJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjUuNDE2NjY2NjY2NywgOTcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzg0ZWIwZjg4M2JlNDU4MWIwMmZkZmRmNDMzZGQ0ZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi4wLCAtODkuODMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTFhZmY3MWYxNjk3NDBkNjhhOGFjZTUzZmYyY2U3NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS4wLCAyOS42NjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYWY3NDU2N2QzZGU0N2Q4ODQxMjliY2UxZjVhN2MxNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMS4wLCAxMzkuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzkzNzJhMzZhNDQ0NDAxZjg1MmE4MDEwMzFlOGNlNWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNi4wLCAxMDguNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmNkOTdiN2FjY2JmNDYwN2I0YWUxYzQxMTA5MDVhMzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4wLCAxMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZDYxZmE3NzJiMTI0NGZmOTAxYzU4ZmZkMWY1NGE1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjAsIDEzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmYWVmMzFiMDVhODQ3OWNiNTdjNzVhMmQxNzg3NDE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMCwgLTExNy41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZDU0YjhkNTIwNjc0ZDdmOTZhYjUyYzViN2NhNDZkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE5LjAsIDk3LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmMzQ0ODUyYzY4YzRmMTJiZGY1ZmExMmYxNzJhODM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4yNSwgMzYuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2ZGYzY2NiYWIyMDRlNGViMzM0YTllYjhkMWUzNDg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS44MzMzMzMzMzMzMzAwMDEsIDE1LjA4MzMzMzMzMzI5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2U2MTkyYWI2YjQ2NDZhOWIxZTVhNmMyYWVmY2VkODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ny4wLCAxMDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGI3OWNkOWI3MTU1NDc3ZWI4NjA2NzZhYjE1ODM1MWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS41LCA5Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNzY4ZmU3YjJkNmM0ODE3YmRjOTcwY2MwZWMyOTExOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjUsIDEwNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDI0Mzc4YzdiMTI0OWJkODY5YWFhYzk4NjlkMTFkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIxLjAsIDEwMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NWQzODAxZTBjZTA0YzdjYTgyODhlZTNhZGRmMGM4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjUsIDE1MS4wODMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmNlN2UxNjMxZmJlNDlmZjhjYTY0ZTU2NjNhODg4MzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy4wLCAtOTkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDgxMDAwYmJlZDk3NDljMWEyNmRjODljNjJjZTg3MGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4wLCA3NS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMmY3ZWYzNjc0NzE0ZmVkYmFjNWIwN2VjYWFjNjJmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01LjE2NjY2NjY2NjY3LCAxNDQuMzMzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmZWY4YzIwOTEyNzQxNWNhMzliMjIwNWZiOWJmYWRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOC43NSwgMzMuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxMmYwZTU4NTcwNTQ5YTBhYzYwODRhOGVlYTAxOGEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMjUsIDc0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiMmIxOGI5NjEwNDQzNjBhNTJhYWYzNDI0MzY2YzQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1ZDU1Yzg3MTBkMTRhMzZiNWY1YTQ1ZTEyMTZiZTBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNSwgNzcuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmFmMTA4ODMwNTUzNGZjMDhiMDJkNzcwNTU2ZGJhOGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy41LCA4MS4zMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjkyODFkMmY4YmU0MjQyODgyMjEwNDI2ZjYzZWZiMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzcuNTgzMzMzMzMzMzMwMDAxLCAxMC4xNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OGUyZjRjYWQzYmY0NjViYjUzMWI0MmY4ZmNhYzk5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzcuMCwgLTEwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmZDUwOTM2YTMyZDQ5YjliZDdmNDI2N2RiN2M2NGYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNSwgMzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWYxMTc4MmQ5ZGM2NDBlNGE3ZDAwYTljMzk3ZDgzZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Ljc1LCAzNy4wODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMThhYzkwNjU1MGE0MGRkOTA5OTZiNzYzODhmMTM4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjUsIDM3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhMDQ4MmNmNTI2NDRmM2M4NjBmMTQxNjM1ZTI5MTYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjIuODMzMzMzMzMzMywgODUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWNmNDU3ODBiMWY1NDYzMDgyZDU5MWEwOWE2YjY4NzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4xNjY2NjY2NjY2NywgMTQyLjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZmNmMzQzZjM4NWM0ZWMzYmYxZjU1Y2IwM2M4N2Y2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzMzMzMzMzMzMsIC0xMDEuODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ODVlMWE0YTk0MzM0MTNmYjVlNTc0MzBlMjU5YmUzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzcuMzMzMzMzMzMzMzMwMDAxLCAwLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JkMmYxNDhjZWZlMTRhNjY4YWFmZTZiNTU4NGE3ZDIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS43NSwgMTcuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwNzViNDE0N2QxYTQ2Mjk5NjhmYjZjMTZiNjFlZGQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuMzMzMzMzMzMzMywgLTExNy4xNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1NGJhMjE2M2EwNDRhY2RiYWE2OGY3ZWI2ZWYxOTdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjIuMCwgMTAwLjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTc5N2FiYmI0YjY2NDNjM2IxNDAyMzMxNGYzOTFlNjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy4wLCAzNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZjhiMTliODRlZDY0MTUyYjc4ZGNhOTQ3MGYzNWQxZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjc1LCAyMC44MzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjM0MGNjYTdjNzg0NTdjYmYyMmZkNDI3NzA1YzMwYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuNzUsIDExLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwZmEyYzg2Mzg1OTQwZGJiNzU1YjAzMzVlM2JiNTI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMCwgMTEwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkZmIxZmEyNjRhNzQzNDQ5ZmNhZDQ0ZDg5NDZjMDhiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMCwgMTAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5ZTViZGNhMDI0ODQ4YWZhYTM3OTkyNTZhNjg4OGZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTM4LjAsIC03Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZGE3YWE2MjMxODE0N2E4YTU3ZTNhNGNkNDRlYWI1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU3LjAsIDQ4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlZmZiNjc1OWNlMDQ5YWZhMGJhMDA4MTI2ZGQ4MzFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuMTY2NjY2NjY2NywgLTExMy4xNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxMzFkNjVjMTQxNjQ4YTI4MGQ5ZjNlNGU2N2VkZmM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjgzMzMzMzMzMzMsIDExNi41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNjJkMWY0NjFhMzA0NTU2OTI4ZWFmMWM2MWQzNTlmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3Ljc1LCAtOTYuOTE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGRiYWRiMjMzNzc0NDAyMjg3NzQ1MTE1NzljZWRhOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjAsIDI1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmNzk1OWZmZDQ4NTRiNmY5NDgxNWM0MDhjYzkwOWVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3LjE2NjY2NjY2NjcsIDE0NS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMzkwOWZmNTU3Yzg0MDM3OWJjMzhiY2Y5NDI1ZmNmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI0Ljc1LCA5NC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOWQxYzQ1NDNhNGY0NzEwOGYzZWYxOWM3MjYyZmZmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDYyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlNmE2NGQ1NzE4NDRlYmY4Mzk1OGQ4MGZjMzdhYzVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMCwgMzAuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM4YzVjMDdiYTQ0NGMxYWFlZjVkODA1ODIwYThlNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMS4wLCAtNzIuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTI1ZDFjN2QzNjQ1NDQyMWEyYjk0ZmFiMTQ1OGM3MzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjAsIDExLjY2NjY2NjY2NjcwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmIxZDk4ZmY2ZWNjNGYwN2I4NjBhODhkNTEyOTIzOTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjUsIDMzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyZmY0ZGQ5N2ExODQ5MTY4ZDg4ZGE2ZTA2NThkNTBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjY2NjY2NjY2NjcwMDAwMSwgMTI5LjY2NjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOGIxNjliYTdiNzU0NzU2OTdlMzA2MmE2OGZmYmIwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNC4wLCAtNTkuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWI5ZDg3NmE5OTUyNDBhMDkwMGE0ZDZjNWMzYzAxMTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4wODMzMzMzMzMyOTk5OTksIDM3LjU4MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwZGZmYzJhNDJhZTRhZDRhMjU2MTcwYTY5Yzk3ZTBhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMCwgNDcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjVlZTg2OWNiNDhlNDI3OWEyZjUxNzk5ZDIwNmJjMzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNy42NjY2NjY2NjY3LCA4NS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NzE3MDlhYTk4NDM0NzcyOGY1YjIwYWI4OWYwNjQ5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzcxLjAsIDkzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkNTE2ZjY1NDJmZTQ5MDliMTgzNWI3ZjgwOGI2MjQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIzLjUsIC02MC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kODlhNDk2YTFlODM0MjYxODgyYTUxMDZjMGVkOGM2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjkxNjY2NjY2NjY2NywgMjkuODMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDI0M2FhNDJmMWQ0NDMzN2FhMjBjODk4ZmMxMDAxZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjQxNjY2NjY2NjY2OTk5OSwgMTAuNTgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2NjNDY5NTYyZDgzNGFhOTgxNWQ3YWNiYmYxY2ExOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2MS4wLCA4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyYmQ1ZGI2YTJkNTQ0YjRhMTg3ZTY4NzFlNDI1NmI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjEuOTE2NjY2NjY2NywgMTA2LjQxNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTNhZGY2ZjBhODJhNGZiYzhhZGJkYmY1NjQ4NjgwOWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuNzUsIDEzNS42NjY2NjY2NjcwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODFiN2M5NTMwZmY2NGZiNTkxMzNjYTgxY2UxZmI5ZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMi4wLCAtMTEyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmM2FiOTQ0YjFjNDRhYWM5ODUxYzc3OWEzN2E4Mzk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC42NjY2NjY2NjY2NywgNi4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzRlMTk3ZmQ5NTViNDg3MWI4ZDBjNzA3MjViMmE0NGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMi41LCA2OS43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjNlMDA5ZTAyNDY3NDY0ZWIwMmVmMWVkZDRkZTNkMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4xNjY2NjY2NjY3LCAtOTkuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDhlYTU3ZDU1ZjlhNDIzMGE4NzNkZmE1NWE5ZjI1MGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi40MTY2NjY2NjY3LCAxMDcuMDgzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMWUwZDU2ZWZmNTE0N2E4YThkY2JhYzYxMWYxNjM2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIyLjUsIDEyMC44MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzOWJiMDM3OTM2MTQ4YTU4NDdhZjNlODUxOWE4NjU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMCwgLTY0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5MzZjNmQ3Nzk5NjQxNGE5NmYyMDNmMzNjMzdmY2U3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuMCwgNTQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODBjOGE1YjA4N2Q3NGIwYThmMzFmMjhmY2Y5MWU4MmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4wLCA5OS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NWJkMTBkZDRkYjg0MGI3OThmNmI4MGM2ODZjNzkyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00OS4wLCAtNzUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQ2N2ZmYTg3YmZiNGU1NjkzMGNiZGQyNTBkNzEzYmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4wLCAyNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOTcxZmExOWVjM2E0NTI2YmVjZjFhYTZjMGMxZTlhYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2Ljc1LCA5LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViNzY1ZDVhYWI4OTQxN2ZiZjc2OTMxNDhiOGE5ZTgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjIuODMzMzMzMzMzMywgMTIwLjgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTc4MGMzODc4NzQxNDJmMGE3OTZiMTk0N2I4ODMzNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjY2NjY2NjY2NjY3LCAxMTUuNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOTNlNWFmNTQ5YmQ0OWZlOGFhZTJhMTc0YzdiY2I5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01My4wLCAtNzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGQ0ZmNlYjEwMTkwNGQzMWI1OWI3YjNkZDcyMmM2OWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjUsIC02LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MWUzZTFlYjljZWU0MjEzODg1Yzg5ODg4OTQ5Mzc1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIyLjAsIDk4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzN2M4ZGI5NmFjMDRhOGViOTkyOWMzZTY5MjQ0MWJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4wLCA4MC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NGFjNjZlZWI1NjY0ZTBmYTIxOGQ3YjAwM2JhYmMyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS41ODMzMzMzMzMyOTk5OTksIC02NC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MjYwZmE1MjJlZmY0NTkyYTYyNjNlYjU2NTBlNzY5NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMuMCwgNDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODY5YjRlZmY5YjE2NDljMDk1NDliYWI0ZWFiMGQ1OWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4wLCAtNC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZGVmYTRmZWNlN2Y0YTU1YTcwMjY4YTc4OGMyZjljMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjUsIC01LjU4MzMzMzMzMzMzMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjJjMDQ0ZTQ1OWUzNDY0NWI2OWZjNzQ1NjkyYzUxOTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjAsIC03MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOGIxMDZhYWI1YTQ0OTRmOTljODYzMzRlOWY0OWU5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjUsIDIyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBhM2Q2ODMxMzM4NTRkMTE4NjI2ZGI5NGEwOGQ2NTdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjcuNSwgODUuNjY2NjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMmRmMjE1YmY3NDI0Yzk1YWFjYmVlOTQ3ZjEzZDkxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjQxNjY2NjY2NjcsIC0wLjU4MzMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmYxNDFlZDcxMWYwNGUyZDgzOWY5MWJjNDdkMGVkNmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi4zMzMzMzMzMzMzMywgMTQuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTNhN2I4NWViYWMwNGYzZGIyMjEyMDk2NDgxN2I2NGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi4wLCAxMDEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzYyMmE4NmI2YjU2NGI5MmJjOWFmYmFlZjczZWRiNzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuNSwgMTMxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyN2Y2MjFkZTZkNDQ5M2Y5MTU3MThhMTU5NDAyZTdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuNjY2NjY2NjY2NzAwMDAxLCAtODcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDY0ZDc1MDE5ZWRlNDQ0ZDk3OTI3MjAwNDIxMjI2YzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuOTE2NjY2NjY2NzAwMDAxLCAtNTMuNTgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWM5OWFjYzJiNWQ3NDI0NmJlNGE5MGNiZmIwZGY0Y2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMy4wLCA2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y0MzMzNjMwNDQ1ZjQyOGVhNTY0YTQ1YjhkMzNjNGY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNSwgMTIzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiMTY2ZTMxMmQyMzRkNzJhOTk4MmYyZjZlOWZlOTM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuNzUsIDc1LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlYjRmNzU2YTBkNjRlODk4ODI3YzUxODM2NDRiYzU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMCwgMzUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmNiZjAwYmUxYWZjNDEzZGE2OWQ4Zjg3ZjQ3ZmJjZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wLCA5NS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Zjg3YTI4YWQzNzI0MjBlODA2NjA0ZDRlNjM0NGQ5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjQxNjY2NjY2NjcsIC05Mi41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMTk5ZGIxYTE4Y2Y0NjBhYmRlMjZmZTdjYzgxYzVmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi41LCAxNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGFlMDdiNGM1MmU0YjE2YmZmYzJmNWFkMGI4N2U3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjY2NjY2NjY2NjY3LCAxNDAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTgwNDhkOGI0ZTIxNDFjMjgwNjZlM2Y4NDZlNDBkZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NjY2NjY2NjY3LCA2Ni41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MWI5MDJhMzliM2Q0OTZlYWZiZjI4MGU5YzZmOGNmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjUsIDEwNi41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjc0N2JmMmViOGU0ZGRlOWE0NGYyZTAzODI5ZjhkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjMzMzMzMzMzMzMsIC05Ny4zMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTI1MGI2Nzg3YTc0ZDNjOTIwMmJlYjNlZTU3NDkzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMi41LCAtNjIuNTgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGIxZGRiNDkwNWYwNDNjZTg2NzhmYTBhY2NmMzQ3NzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MzMzMzMzMzMzLCAtMTI0LjE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDNjOTkzMGRmMDNkNDA3NGJlZjMwZDFhNmIzM2RiMmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS42NjY2NjY2NjY3LCAxMTkuOTE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMjJmMzlhYmU4NWI0MjY1YTA2Njc3YzAwNjJjNzAzNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI0LjUsIDExOC4xNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0YjBmZmIwM2Q4ODRhMzA4MDI3MDhiZWY5MTBkOTNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjIuMCwgMTMwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlNGYzYWM2NzUwOTQwNmFiOTVmMDNlZWZiY2NhZWYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNSwgLTEyMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYWQ2MjZiODNhODY0MTYxYjdkMWU5YjNlMjM1M2Y0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuNTgzMzMzMzMzMzMwMDAxLCAxMzguMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4Mjg0MjM3Y2NjMDQ2MWViZjU2ZTBhMmZhMjlhNmZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjIuNDE2NjY2NjY2NywgMTA0Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMTdhNjc3ZjMwYjQ0NmRhYjFlZGY2MmFjNWVmMjEzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIwLjAsIC04OS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MzVmY2I5ZTQzYzQ0ZDgyYmYxMGVjNDAzY2MyMDFkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY1Ljc1LCAxNTAuODMzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiNDI5MmVlMjEzMjQ2MTVhYjdjNTdkNGI2NmEwNjU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjkuMCwgMTU1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0OTVlZTE1NWRjNDQ0MGRhZTU5OTYzOGRlNDNlMDM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC4wLCAyNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZmU4MDI5YmMyNGU0NTUxOGM5ZTQzODExMGY4MmMxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjA4MzMzMzMzMzMsIC0xMDguODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MDlmOWMxOWY5MDM0ODkzODNmZjU1ZjQ4NTkwYmQzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYyLjAsIC0xNDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmVkNzRjYzM4NTQ4NDVlZGEzNDY0OTk5Yzg5NmZmZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4wLCAzOC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNGU2MzQ2NjFmMTQ0NjRmODg0OGQ5ZWQ4Nzg0N2U4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuNSwgOS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjhmYzA1N2MxYzQ0NmIyYWU2NmQzMmViMmYwMmMyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjAsIDMxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3MmIyMmEzYzQ0MDQzMDFhOTdmNjhmZDc3MjAyYmNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMCwgNDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTY2YTgwYzRiNjZmNGM1MGJiN2ExMjgwNWYyMDAwODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC44MzMzMzMzMzMyOTk5OTksIDM2LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg3NDhhNjI2OWZlZDQwNjk5YjU2OTQ5MmQ2M2QzODVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3LjAsIC02OS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZGYzMTcwZDAzNmY0MGY0YmI2YjQyNjE2ZjE0NmMwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjY2NjY2NjY2NjcwMDAwMSwgMTYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmU2MjJjZDk1ZGM2NDU1YWE3ZDI2OTM4NzRhMjhjOTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4zMzMzMzMzMzMzMywgMTIzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5NDU3NjNkZGVhMDQ2M2JhZWYxZjI5ZGFiYzJhMGYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgNTguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDcyYmFlOWRlMWMxNGNmNGFjOWEwNWJiZGZmODgxNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi41LCAtMTI2LjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTViOTNmMDliOTQwNGU5MjhkNWY0ZDZjYmE2MGZkNWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC4wLCA5MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYTMyZDIwMTVkYWE0Nzk1YWE5NTEzNjgzMjZhYjUzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjAsIC01LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkNTQzMzNkZGQyODRkMTFiYjgwOTA3MTk3ZjliYzNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjEuMCwgOTYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2JjOTRkNmFhYjQxNDJmY2JjYjZmN2JiMDdlYmMxN2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni41ODMzMzMzMzMzLCAtMTIzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0MzVkOTU0MTU0ODQxMmNiNTdmNjJjNjU3ODdlNGI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuNTgzMzMzMzMzMywgLTk2LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjY2U1Y2FiNTA3YjRjYjM4YzkzMTgyZDk2YmI1YzhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC4xNjY2NjY2NjY2NjcsIC03Ny4xNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMjFlZDQxNDA0MjY0ZDA3OTQ0YzFhOWJhMzQyOTQxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI0LjAsIDg0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RlOGM3OGRiNjcyMjQ4NzdiZjA3MDZmMWU3ODU1NjdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIxLjAsIDE2Ny4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWE4OWM3Nzc3NWNlNDg1M2E1Y2Q4ZTcwYzIyOGU1MWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjMzMzMzMzMzMzMzMDAwMSwgMC40MTY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5N2M1NThhOGE0MjRkNWQ5YWRmZjk1ZGRjM2RlMzU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC4wLCAxMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYzk4NTQyZjQzYjQ0ZjcwYWU2MDc2NjNkYzU1NTg5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYwLjUsIC0xNDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDA3ZjViNmY4Mzc2NDY5ZWE4ZTE2ZGJkYzM2OGM0NTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjY2NjY2NjY2NjY2OTk5OSwgMTcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWUxZTU0NmQ3YjI5NDZjYmFmNTcyMTU0OGNiYjRkZTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi45MTY2NjY2NjY3LCAxMDUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjRkMjdiOTNjYmM0NDI4ZmFlZWM3MzlhYmQxOTliY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4wLCA0NC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNjIyY2RjNWYyMGQ0OTA3ODI0OWM0ZDFmMTZhMTFjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuNjY2NjY2NjY2NjY5OTk5LCAtMC4xNjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjYzJmNDc2MTM4ZTQwMzlhZTg0ZGU1MjI1YmE5ZGFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMCwgNy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYzc3YmU2Mzg0NzI0ZDNlOGNiMWI3MTVjY2Y2N2UwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ3LjAsIDIwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1YjBmZjM2ZGZmMjQyMDA5YzljZjdmNDNhYjAxMWQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMDgzMzMzMzMzMywgLTEyMy42NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkMWRmY2E0ZjVkYTQxOWNiYzY5YTliYjc0MGU3OTZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4wLCA3LjMzMzMzMzMzMzMzMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDMyNGMzOWJkN2NmNGVjYzhhMzVmNTkxODhlN2VmZGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjc1LCAzNC4xNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NjE0MjI5MGE4NzM0ZjYyODQ5Mzg2MTI5M2UwNTIyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjAsIDM1LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YzNjkyMThmYmY1YjRhMmQ4NTExOTNiZTM5YjllNzVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNS41LCA2LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNWE1ZTEzMDA0MjE0NDg2YjM0ZDY5MzkyMjI2MzE1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU3LjAsIDE1Ny41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMTIxMTY1ZWQxMjY0Yzk3YmRlYzU0YjUzODIxYzEwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjY2NjY2NjY2NjcwMDAwMSwgLTkxLjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3NTk5ODI5NDMyZTQ3OGFiZDA5YmQ0NTIwMmM4MmE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuMCwgNzYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmJkMTEzOWZhYzUxNDJjYWI5ZmE1MTQ2OTZiNDY0YTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC4wLCA5Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMjljZGIxNDMzYjc0OTI4ODg1NjdiMWY1N2I0OThlNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAsIDc2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlYjZlNGVhZjliMTRjYWY4ZTNlNzk3N2E5MTc4NDk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjIuNSwgODQuMzMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzU5ZDM0ZDZjYzNlNDkzYjhlMDZhNTBmYTQ4ZmIzOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjUuNSwgMTguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDU1ZjE5N2MzZmYwNGRlN2E3MmE5Y2E1ZDBmNDJlZGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi41LCAtMTIxLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI4YjQ3OTc4YTRhNDRiYWZhNDhlMDJjMjEwYjA4NzBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4wLCA4LjExNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMGQwOWE1NDRjMjU0ZDQzYTMyYWZiYWE1ODEyOWYyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY1LjAsIDU1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzYTY4ZTRiNjk1NzRmOWNhNDViNmUzYTFlY2NhYzdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMzMzMzMzMzMzMjk5OTk5LCAxNS4zMzMzMzMzMzMyOTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwOWUyODZhZDE3NTQ1NDk5MzI3YjYzMTY2MWE5ODQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMCwgNDQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmEyOTY2OTFkZjRmNDA5YzgxNTAxZjNkZjUwNmQwMDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS41LCAtMTE2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiZDMwZjY0ODAyYzQzNmQ5MGM0NDA4MzAxYzI4MmUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMCwgNzguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGIxYjVhY2ZmMTc2NDg0NzlhYjMxNjc4ZTI4OGZjODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4wLCA5OC4xNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MzY2YjcyOThjODI0OTM1OTE1MzFlZDM0MWM2ZGUxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI0LjA4MzMzMzMzMzMsIDExMC4xNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZhY2Q0NTM3OGEzMDRkOWZhNGE0NmY5NmJhMWNmNjE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4wLCAxNC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTc3ZTQ0ZGE1YWQ0NTQxYjMyNjU2NTVlMTU1OGFkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU3LjAsIDI0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlZDZmNDZhYWU3MTQ0ZjU4NGQ4NDhmYjI0NTIxMzQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjcuMTY2NjY2NjY2NywgODguNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjAxNDg0YzFkMThmNGEzYWI4NDIxZDEyNDJkYzZkYWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjA4MzMzMzMzMzMzLCAzMC45MTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zODcxYjM2YmViOGI0MWE5ODcyMzI5NjI5MGU2N2RiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjUsIDM0Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZmI0ZTg3OTRmOTU0ZDc4YTgwOGM3NjFiZjNjMGU5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC4wLCA0Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZGNhMTFmMDU3Yjc0N2VkODA1ODNkZTIzYmNhYTRmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjAsIDEzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5Y2Y1MTkyOTY1NjQxZjc4MTM4YzVhNzNmMDQyYTNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjUuMCwgMTExLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE3NWI2ZmIxZTdlMDQ3NjM5NGE2NzBiNDdiOGNmYjFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjMuMCwgODQuNjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzNiZmQ2YTBjNmE4NDEzZGEyMzk5Njk0NWY1MzNjYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTAuNzgzMzMzMzMzMywgMTY1Ljg2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjE4YzYwY2EzODBhNDRiODkyYWQ2YTliZjdlOTk4ZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNi4xNjY2NjY2NjY3LCAtMTA4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkOWQwMDI0N2YzYjQwNzlhOGE5ODk0YWI3ZGY4NmM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuOTE2NjY2NjY2NzAwMDAxLCAtMTYuOTE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg4ZTZhMjBkZTY5NGQwMDg4NWMyMjYxYmEyZmVjZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2OS4wLCA3Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjMwNzkwMDE0YzI0M2EzODAwZjZjNGE2ZDU5OWFjYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI4LjAsIDg1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4ZDJlMWJjYmIwMzQ4MmM4YjliOGY1MDVjYTkxOGZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMCwgLTExNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMzRkYWQ0ZDYzMjI0NGE0OTllNzM1Njk1MmYwMTU3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjMzMzMzMzMzMzMsIDE0Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZWJhYzIwODI2M2U0MDg3YTcxNjU1MzQ3OWNlODRlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjY2NjY2NjY2NjcwMDAwMSwgMTAxLjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGE4YzRiOWFlNWM3NGI4NDk4M2U2YmM1Zjc0ZmYxMDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi43NSwgLTcxLjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iM2QxMGVmMDUxMWQ0YzNhODMyNjczYzcwNmM4MjE0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuMCwgNDIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjhjYTNjOTc2OWRkNDllNGI4MGE5ZjE0NTM5NzcxOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy4wLCA2Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZDZjYjE5MzU2MDk0OWIyOTc2MzRlMmQwYWMzY2FjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAsIC0xMjIuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODI3NGQzMmEyNTA5NGYwNTk1MTk5ZmYxMDBlOTMwYjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS41LCAtMTAxLjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQ5NWEwOWNhNDEzNGYxMmFlNTY2NmI0ZGY4MjFmZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuNSwgLTY2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlYmZhZmQ4ZWMwNzRmNzBhOGY5ZTBkZTU4ZjdlZjRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDcuOTE2NjY2NjY2NywgLTEyNC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjQwOWU0YjUyYmEzNDZlMDlmOGM5ZGRlY2Y2OGRiZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi40MTY2NjY2NjY2NywgLTcxLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwNzZjOWUzMDViMjQwMjk4NmYzMjliMjEwYzI4NzM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTYuMCwgMzguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGI1NGJkNWEyMWZmNDdmNjhkNzM0M2UxZjI3ZTU5ZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjAsIDE4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y0NjNmZTZmMjBmODQyM2I4NDAxYjgwYjQ4NzczMzQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMy4wLCAxMDMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTAzMjI3YzFiN2RmNGJkNTgwZWMzMjU5NDhjNjZmMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Ny4wLCAtMTI1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmNmRjOWRmMzcyMTQ1ODg5MDdkMzllZTI0OTQ1Y2EyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuNSwgNTQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGU5NWMxZDZiNGZhNDlmYmE5YTFjN2EzMjM5NmM5YjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS41LCAxMDguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWNkYzUyNGRiYTk1NDEyOGJmMTNmNWIyNjNlNWVkODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi41LCAzOS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMWZlOTI0MTM4Y2M0MWI2YWI2ZDU0YTFlZGYwODI1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuMCwgMTAuMDgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODg5ODJhODU4NTBiNGU1ZDk4MjNjZmMyYjQwNjk5YmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNDguMCwgLTY4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxY2UzNTZjN2Y4MzQxYWU4ZGQ2NTUxMjI5YTRmOTQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTYuMCwgNzkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGYwNzA1OWU2N2FkNGFmZGJmZGY3ZGEyYzVmOTc1ZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi41LCAzOC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZGM3YmY1YmYxYTQ0OTYzODQ4NzkxNmQ4ZmZiOWViZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjUsIC0xMDUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDM2MjkzNDJhMThmNDk4ZjgxYTQ3MTMzYjlkMzI3OGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41LCAtMTIyLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmZDlmYWU3M2VlMDRkNjBhYmFjMWMzMTc5Mzk1Y2NlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMCwgLTEyMi41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YmQzMjk4N2ExMmY0NDRkYWVjNDZkYmRhOTFmOGMxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjI1LCAtMTYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWFjYmYyMTA1ODcwNDhiMDk0MjYxOTVjYjNlY2MwYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTYuNDE2NjY2NjY2NywgMTM3LjE2NjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOTg5MGNiOThjMzg0MDhiOGZkZWYxNTI3M2ZjNGUyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY1LjAsIC0xNzMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzk2ZWZlMGM1NzgxNGJhMWI4MDA0M2FhNzNiMTAxZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS4zMzMzMzMzMzMzLCAtMTI0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiMjNkMTUyNTVlZDQyY2FiYWUyNGIwYmFhNGNlNTU1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMwLjAsIDMwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRlODhkNzdlNTAwZDQ1OTRiMzRjY2NmMDlhOGE3ZTM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI0LjAsIDIxLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2NjUxNTg0MjI2ZTRkMDg5Y2MxOWRlYzhiZmU1Njc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE4LjkxNjY2NjY2NjcsIDIxLjkxNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA4NjhiM2Q3OTlkNDRhMGFiYjc3MTEzZDk1OTVlMzBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDgzMzMzMzMzMywgNDEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM0MDcxYmY5MjdkNDc2OThjNTE5ODRhOTBkZDg3OWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC45MTY2NjY2NjY3LCAtMTA3LjU4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWY0MjFiNzJlYzdlNGUzNTg1MmMzZjI4ZmVlMDdjMTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4wLCA0Ni44MzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Mjg4M2FkZTNjYTk0MDliOGQ3N2RhNjIwODAzNTQ0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yNC4wLCAxMzYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTU4NTdlNjU4NDE1NDFjZTg4OWJkMTAxZTFlMTAxN2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi41LCA0Ni41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNThiOTNlMjJhZmI0ZjQwYTQ4OTNlNGVjOGYxOWQ3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjUsIDc0LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlYjQ4ZTgxYjA2MzQzNzFiZmU2Y2UxMjgyOTM4YzRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgLTEwNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDVmY2MyZjU4YjM0OTQ0YTQ1ZDcxYjNlNzkxNGVmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUsIC0xMjQuMTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZGVmODE5YWNiYWU0ZDc1YjM3ZDk4YzU2ZjUwMWI5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjMzMzMzMzMzMzMzLCA0MC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZGM2MmM5ZDA1ZjM0MDI1YjRjZTg5ODAwOWMwZjkxZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC41LCAyNC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MjI5M2VmMTc3MmY0MzFlOTE4ZTBlYjY2OGEwMjJhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuNTgzMzMzMzMzMzMwMDAxLCA5LjMzMzMzMzMzMzMzMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGE3OWVmZmVkM2VlNDQwMGFmODE3NzdiZGM2YjNhMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy43NSwgMzUuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzg3YTZiY2I1OWIyNGVhYWE5Yzg5MTc0M2IyNGRjM2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wLCAtMTMyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwYjVlMzliYmJiNTQ1YjdiM2JmNTUzZmY2YzliMmM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjUuMCwgNzcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmE1Yzk2OTExYTI1NGRhYmJjMThiYTE3YjYzYWI2MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyOC4wLCAxMDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjZkYzcyNjZmNmEzNGU4Mjk3ZTk5MzNjZmVmZGY3MTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4xNjY2NjY2NjY3LCA0Ni4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODljYzQzN2VhZDk4NGNkY2FkMDJmOTA2OGZiYzZlYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuNDE2NjY2NjY2NywgMTY2LjU4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xODlkODZkOTM5NDk0MDJlODk2N2FmNWM0ZDZlMzZiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjE2NjY2NjY2NjcsIDQ1LjA4MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBmOGY4ZjcxNDNkNTQ4NzFiNWQyYTZlNDI5YzllNDY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTUuMCwgLTguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTllOTg4NDQ3N2IyNDczMWJiYzc5MmUyOTYxYmYyZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuMCwgLTc2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2Yjg2NGU2NTkxNTRjNThhYWVmMjIxNTU4MDcyNzIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMTY2NjY2NjY2NzAwMDAxLCAxMDcuODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NDZmYTUwOTUwODE0NDk3YTNmNjg1MTg4MGFiZDUxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS4wLCAyMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzdjN2E1ZDI4YmE0ODk1YTVmYzk4NjkwODgzN2YxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUsIDQzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNhMjU4MDM4YWJiNDQ2M2RhMWU1YzMxZTEzM2M2NjU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuNSwgNzIuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWE0Yzc1NWFmYTcxNDQ1ZTk2M2E2NGQ4ZjkwOTQyYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4wLCAtMTI3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2MzIyZmU0YzI2NDQzMjdhMjU0MGUwNTU2NzcyYWEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMTY2NjY2NjY2NywgNDcuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmJjNTAwNTI4ZGZjNDVhNGEwN2FiNTgzYmZhOGE3YjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS42NjY2NjY2NjY3LCA0Ny44MzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjkwODY3ZDNhODI0ZDBmODZhOTBkYTgzYTRlMGYzOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU1LjAsIDI0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2N2ZkOGJiZDc4MzQ3MzBhOTM0Yzc4MzhjODQyMWMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMCwgLTEyMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzhiN2YzNGJmZTk0NDg3ODQ0NmUyNjM4MTRiOTcyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE5LjQxNjY2NjY2NjcsIC05OS45MTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMzBjMjc4MWFkOWY0YTQwOGM0ZGU1NTQxMzQwMTMzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI3LjUsIDEwMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZDc3ZDIzY2ZiYmY0MTVjYjIxMDk3ZTQ5MTRmOGMzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEuMzMzMzMzMzMzMzMsIDMwLjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZmRhNjZjZmE2MGY0ZDBjOTJmMWZlNDdjODBkZmJiMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjA4MzMzMzMzMzI5OTk5OSwgMTAuOTE2NjY2NjY2NzAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjA5NmY5ODNhNmI0OTVmOGQ3NWMyZjMzZTk4ZjI4OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjY2NjY2NjY2NjcsIC0xMjYuNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNDJmMGQ5NTNiZmI0MzY2OTQ0M2Y0NmQwN2NjZTNkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIzLjI1LCA5OS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjYyMGMwOWJiMWY0ZmQ3YWNjNTNmYTNiZjc1Yjk1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjAsIDIwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1NDVhNjVmYWM0OTQ5ZTA4MTQzOWRiZDczMzQ3MGVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMi42NjY2NjY2NjY2NywgLTc2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MyNGRjNzY1YWE4NDQ2YzM4N2E3Njg0N2RmZGE2YjhjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNSwgNDcuNDE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzg1MTNlYzFkYjJjNDM5MmIyMzhhMjE4Nzk4MGM3MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NC42NjY2NjY2NjY3LCAxNi43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTNhYzI2ZTBmMTFiNDgxM2EyZTcwMWM2Zjc3N2JhZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4wLCAzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMWE0OTA4Mzk2ODM0MzliODczZjM5MTJiZjk3OGQ4MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjgzMzMzMzMzMzI5OTk5OSwgMTA4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzNDBhMzM2OGQxMDQwYjJhOTUxOTkxNzJjMjhiYjJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMCwgLTEyMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kODU1ZjdkNjhiZjQ0MDQ4ODI5MTBhYWU1ODcxMGFmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI2LjAsIDY5LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5MjI2MjNjZTliYjQ3MDU5NGY4YmJhZDJkZWNkN2VkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNjY2NjY2NjY2NywgLTEyMy4xNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3NTk2OTgxMzMzZDQxMGNiZGIzOWEzNDgzYWMyMzdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuMCwgMTA3LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA4NzI2MDhmNzIxMTQ2YzA5MWRmOWQzMDk4YjZkY2E1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMCwgMTEuODMzMzMzMzMzMjk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOTdmZDcwNjY5N2Q0MjBmYmNlZjAwY2ViMTQxMzdhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjAsIDkxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxZWM3NGYyZDNmZjQ2NzVhMDJkYmZkN2U5MjkxMTQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgLTEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDQ2MTQzMWViOGY0N2E5YTU4ZTAwNGVhMTM4NTVmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjUsIC0xMjkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjYyODJiMjdiMWJhNGY0ZWFlMDU0NDUwOWU5ZmQ4MjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi41LCA0NS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTUzOTBhM2IzZTc0NTliYjNmYmQ0ZDlkZGFmZjA0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS4zNjY2NjY2NjY3LCAxNTQuMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjYjgwMjE3N2UwNDRlZmViNzcyNjFkZDNiZTUwMGI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjAsIDIzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5MWY5ODdlNzU1ZTRlZWRhNjc0NzU4Y2RhM2IyZjdkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuNzUsIC04Ni43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2IzZDEyZTc2YzE5NGMwZmE3MGVmOTQ5N2I1OTQxYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjUsIDI1LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTA4MWQ5ZmU1ZDM0NjA5YTRlOWI1NjRmNThjNDg1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjAsIDE0My41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmY3NGU2MmUyZmQ2NGNkM2I5YmE3NzUwMWZjZGU2ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmU5ZjEwZGE0MjM1NDYwZjljZWIyODAwNjEyNzE5YTYgPSAkKGA8ZGl2IGlkPSJodG1sX2JlOWYxMGRhNDIzNTQ2MGY5Y2ViMjgwMDYxMjcxOWE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gS2l3YWkgKFNvdXRoZXJuKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmY3NGU2MmUyZmQ2NGNkM2I5YmE3NzUwMWZjZGU2ZGUuc2V0Q29udGVudChodG1sX2JlOWYxMGRhNDIzNTQ2MGY5Y2ViMjgwMDYxMjcxOWE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1MDgxZDlmZTVkMzQ2MDlhNGU5YjU2NGY1OGM0ODViLmJpbmRQb3B1cChwb3B1cF8yZjc0ZTYyZTJmZDY0Y2QzYjliYTc3NTAxZmNkZTZkZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzgyZTYwODNhNjM5NDA4OWI0ODFkM2E2NjUyYTdjM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjUuMjUsIC01NS4xNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzE3NjQ0NjMwNTY2NDNjZDlhZGNlODgzMjJkNmU3ZmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2U3MDMyMDVhNTEzNDg1ODk4NTFjYjc1NDFhN2UzZDAgPSAkKGA8ZGl2IGlkPSJodG1sXzdlNzAzMjA1YTUxMzQ4NTg5ODUxY2I3NTQxYTdlM2QwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWNoZTEyNDYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWNow6k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE3NjQ0NjMwNTY2NDNjZDlhZGNlODgzMjJkNmU3ZmYuc2V0Q29udGVudChodG1sXzdlNzAzMjA1YTUxMzQ4NTg5ODUxY2I3NTQxYTdlM2QwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc4MmU2MDgzYTYzOTQwODliNDgxZDNhNjY1MmE3YzNhLmJpbmRQb3B1cChwb3B1cF9jMTc2NDQ2MzA1NjY0M2NkOWFkY2U4ODMyMmQ2ZTdmZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMThjZjI0MWI2NTdkNDA4Yjg1YmE0YWNkNjhkYTJjNWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wLCAxNDMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5YWVhNTg2NWY4NTQ0ZTdiOWJkMGY1MDFjMzBiNzJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxMjAyMzFkNDc2NTQ2MGY4MmU4MzAzNDAwZmJiZjU2ID0gJChgPGRpdiBpZD0iaHRtbF84MTIwMjMxZDQ3NjU0NjBmODJlODMwMzQwMGZiYmY1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FpbnUxMjUyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFpbnU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTlhZWE1ODY1Zjg1NDRlN2I5YmQwZjUwMWMzMGI3MmQuc2V0Q29udGVudChodG1sXzgxMjAyMzFkNDc2NTQ2MGY4MmU4MzAzNDAwZmJiZjU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE4Y2YyNDFiNjU3ZDQwOGI4NWJhNGFjZDY4ZGEyYzVjLmJpbmRQb3B1cChwb3B1cF9lOWFlYTU4NjVmODU0NGU3YjliZDBmNTAxYzMwYjcyZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzY0M2UyM2NkNGQ5NDIyZjgwNzdmMmZhZDhkYTEwZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjAsIC01OS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjYwMWE1NzQ5ZjAxNDY2Mzg2NjcwMmMzN2IxZDhiYTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzJjZGNiOTJkNThhNDA5ZmEzY2RhYzZkNTdiNTc4MGUgPSAkKGA8ZGl2IGlkPSJodG1sX2MyY2RjYjkyZDU4YTQwOWZhM2NkYWM2ZDU3YjU3ODBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWthdzEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWthd2FpbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNjAxYTU3NDlmMDE0NjYzODY2NzAyYzM3YjFkOGJhOS5zZXRDb250ZW50KGh0bWxfYzJjZGNiOTJkNThhNDA5ZmEzY2RhYzZkNTdiNTc4MGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzY0M2UyM2NkNGQ5NDIyZjgwNzdmMmZhZDhkYTEwZDEuYmluZFBvcHVwKHBvcHVwXzI2MDFhNTc0OWYwMTQ2NjM4NjY3MDJjMzdiMWQ4YmE5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NjU2MjQ0NWFiMzY0NDdhOTczYjJiMDdlYmFkZDIyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjMzMzMzMzMzMzMsIC04Ny40MTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDE1MzcyODYyMzVkNDY4Nzg0MjM4NzBiNDI5NTYwMDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjc0ODRkNDhiYTg1NGQ3Y2EwZDE0ZGVlYjY5YWViNDcgPSAkKGA8ZGl2IGlkPSJodG1sX2Y3NDg0ZDQ4YmE4NTRkN2NhMGQxNGRlZWI2OWFlYjQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWxhYjEyMzciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWxhYmFtYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MTUzNzI4NjIzNWQ0Njg3ODQyMzg3MGI0Mjk1NjAwNi5zZXRDb250ZW50KGh0bWxfZjc0ODRkNDhiYTg1NGQ3Y2EwZDE0ZGVlYjY5YWViNDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODY1NjI0NDVhYjM2NDQ3YTk3M2IyYjA3ZWJhZGQyMmYuYmluZFBvcHVwKHBvcHVwXzQxNTM3Mjg2MjM1ZDQ2ODc4NDIzODcwYjQyOTU2MDA2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMThiZDdkMmYzYjQ0MjcxOTRlNzJiNGJmNGVhZmZkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMC41LCAtNzIuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiZDc0NjgzN2I2YzRiZjFiZjU2NWU1NGRiNDk1ODc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4NjI5ZTVlMWRmMDQxMjViYmMzOTNmZGM4YzdhNjQ5ID0gJChgPGRpdiBpZD0iaHRtbF9lODYyOWU1ZTFkZjA0MTI1YmJjMzkzZmRjOGM3YTY0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FtYWgxMjQ2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtYWh1YWNhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiZDc0NjgzN2I2YzRiZjFiZjU2NWU1NGRiNDk1ODc4LnNldENvbnRlbnQoaHRtbF9lODYyOWU1ZTFkZjA0MTI1YmJjMzkzZmRjOGM3YTY0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMThiZDdkMmYzYjQ0MjcxOTRlNzJiNGJmNGVhZmZkYi5iaW5kUG9wdXAocG9wdXBfNGJkNzQ2ODM3YjZjNGJmMWJmNTY1ZTU0ZGI0OTU4NzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxNTY4NzM1MDViNDQ3MGNhZTk4MWE3OGY3OGUwN2Y1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTAuNjY2NjY2NjY2NjY3LCAtNzIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViYmY1NjZlYTgxYTQ4ZGRhMDEzNmY2MjNkNDA5M2IzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2ZjUzYzdkMjI2ZjQyM2Q4MGJlMWYxNThkNjAxOGVkID0gJChgPGRpdiBpZD0iaHRtbF80NmY1M2M3ZDIyNmY0MjNkODBiZTFmMTU4ZDYwMThlZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FuZG8xMjU3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFuZG9rZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYmJmNTY2ZWE4MWE0OGRkYTAxMzZmNjIzZDQwOTNiMy5zZXRDb250ZW50KGh0bWxfNDZmNTNjN2QyMjZmNDIzZDgwYmUxZjE1OGQ2MDE4ZWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTE1Njg3MzUwNWI0NDcwY2FlOTgxYTc4Zjc4ZTA3ZjUuYmluZFBvcHVwKHBvcHVwX2ViYmY1NjZlYTgxYTQ4ZGRhMDEzNmY2MjNkNDA5M2IzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZmI2MjhlNTQ3MDg0NWU1OTVkNGE4ZTcxYzIyNzNkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy03LjIxNjY2NjY2NjY2OTk5OSwgMTQ2LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjVmYjc3YWE5ODdjNDhkYzkxMzE4M2RjYmVkOTJjOGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDdhODFhZGI3NDkxNDgwOThhMzA5M2ZkZGMwZTFjNzkgPSAkKGA8ZGl2IGlkPSJodG1sXzQ3YTgxYWRiNzQ5MTQ4MDk4YTMwOTNmZGRjMGUxYzc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BbmdhYXRpaGE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1ZmI3N2FhOTg3YzQ4ZGM5MTMxODNkY2JlZDkyYzhkLnNldENvbnRlbnQoaHRtbF80N2E4MWFkYjc0OTE0ODA5OGEzMDkzZmRkYzBlMWM3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZmI2MjhlNTQ3MDg0NWU1OTVkNGE4ZTcxYzIyNzNkYy5iaW5kUG9wdXAocG9wdXBfMjVmYjc3YWE5ODdjNDhkYzkxMzE4M2RjYmVkOTJjOGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmMmNhMzBjNzMwZjRjMDViOTBhOWE0YTIwYmNkMWE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuNTgzMzMzMzMzMywgOTQuNjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3NDcwYzE0MTUwMzRkODA4ODE0ZDNmNzc3M2VlZTM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE5NDFhMGJiMWNkYTRiM2I4MGUxOGFhZjU3OTk5OTVjID0gJChgPGRpdiBpZD0iaHRtbF8xOTQxYTBiYjFjZGE0YjNiODBlMThhYWY1Nzk5OTk1YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW88L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3NDcwYzE0MTUwMzRkODA4ODE0ZDNmNzc3M2VlZTM0LnNldENvbnRlbnQoaHRtbF8xOTQxYTBiYjFjZGE0YjNiODBlMThhYWY1Nzk5OTk1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZjJjYTMwYzczMGY0YzA1YjkwYTlhNGEyMGJjZDFhNS5iaW5kUG9wdXAocG9wdXBfYzc0NzBjMTQxNTAzNGQ4MDg4MTRkM2Y3NzczZWVlMzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiYTJiYzM4MDdmNTQ3OTQ4OTUxMzJkMDFhZjI3YTUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNSwgLTQ4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOTAzYmZiYzIxMDI0MmYxYTM5MmJhNTFkYmUyOGU3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MDQ0ZTM2ZjlmYTI0YTM0YjZkZjM2NmNiNzE2M2JjOSA9ICQoYDxkaXYgaWQ9Imh0bWxfODA0NGUzNmY5ZmEyNGEzNGI2ZGYzNjZjYjcxNjNiYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hcGluMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BcGluYXnDqTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOTAzYmZiYzIxMDI0MmYxYTM5MmJhNTFkYmUyOGU3ZC5zZXRDb250ZW50KGh0bWxfODA0NGUzNmY5ZmEyNGEzNGI2ZGYzNjZjYjcxNjNiYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGJhMmJjMzgwN2Y1NDc5NDg5NTEzMmQwMWFmMjdhNTMuYmluZFBvcHVwKHBvcHVwXzA5MDNiZmJjMjEwMjQyZjFhMzkyYmE1MWRiZTI4ZTdkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNDI3YmFmYTc1MzM0MjYxOGQzNDk1MDhlNjNiMTdlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy05LjAsIC02Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWY2OTExNDdhZjhmNDFhZjgxMTNiYjIxNTg2Zjk5ZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTVlNTk4ZmU4YjQyNDYyOTgwNmJkMmI5NjVhNDY1YTQgPSAkKGA8ZGl2IGlkPSJodG1sX2E1ZTU5OGZlOGI0MjQ2Mjk4MDZiZDJiOTY1YTQ2NWE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYXB1cjEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QXB1cmluw6M8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWY2OTExNDdhZjhmNDFhZjgxMTNiYjIxNTg2Zjk5ZjAuc2V0Q29udGVudChodG1sX2E1ZTU5OGZlOGI0MjQ2Mjk4MDZiZDJiOTY1YTQ2NWE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M0MjdiYWZhNzUzMzQyNjE4ZDM0OTUwOGU2M2IxN2UwLmJpbmRQb3B1cChwb3B1cF85ZjY5MTE0N2FmOGY0MWFmODExM2JiMjE1ODZmOTlmMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDg5ZGM3ZWFlZGYyNGJiZmE3Nzg3MDlkNzQwNmY0OWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi4wLCAtNzUuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiNWVkMDQ0N2Y0MTQ2ODk5MGMwZjMyMmRlNDY5NjUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExODA3ZTIzMzViNjRkZWNiMjMzMDljNjhjOTgwMWNjID0gJChgPGRpdiBpZD0iaHRtbF8xMTgwN2UyMzM1YjY0ZGVjYjIzMzA5YzY4Yzk4MDFjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FyYWIxMjY4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFyYWJlbGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI1ZWQwNDQ3ZjQxNDY4OTkwYzBmMzIyZGU0Njk2NTMuc2V0Q29udGVudChodG1sXzExODA3ZTIzMzViNjRkZWNiMjMzMDljNjhjOTgwMWNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA4OWRjN2VhZWRmMjRiYmZhNzc4NzA5ZDc0MDZmNDlkLmJpbmRQb3B1cChwb3B1cF8xYjVlZDA0NDdmNDE0Njg5OTBjMGYzMjJkZTQ2OTY1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWQwNWQyMWQ5ZjMxNDNjYzk1ZDE2NzNkOTk0MjdmNTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS41LCAxMzguNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlY2ExZWFjZWNiOTQ4NzZiNGRmYzY1N2IzNWJmZWY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkYTM1OTcyZjIwMTRkMDI5YzFhYTFkNGMyZTk3MzJjID0gJChgPGRpdiBpZD0iaHRtbF81ZGEzNTk3MmYyMDE0ZDAyOWMxYWExZDRjMmU5NzMyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FzbWExMjU3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFzbWF0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlY2ExZWFjZWNiOTQ4NzZiNGRmYzY1N2IzNWJmZWY0LnNldENvbnRlbnQoaHRtbF81ZGEzNTk3MmYyMDE0ZDAyOWMxYWExZDRjMmU5NzMyYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZDA1ZDIxZDlmMzE0M2NjOTVkMTY3M2Q5OTQyN2Y1MS5iaW5kUG9wdXAocG9wdXBfMGVjYTFlYWNlY2I5NDg3NmI0ZGZjNjU3YjM1YmZlZjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxNzc0YmI3MGNhZjQwMzA5YzFlMzQwZTM0MGE5ZjM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMS41LCAtNzguMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDQ3ZmRlYmJhM2M0NGRlOTg2ZDVlZTdkMGU4NGIzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NTU1NjJhYjBjMzg0MDJhOGU4ZGFmYjA4ZWRiNTMyNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjU1NTYyYWIwYzM4NDAyYThlOGRhZmIwOGVkYjUzMjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkF3YSBQaXQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkNDdmZGViYmEzYzQ0ZGU5ODZkNWVlN2QwZTg0YjNiLnNldENvbnRlbnQoaHRtbF82NTU1NjJhYjBjMzg0MDJhOGU4ZGFmYjA4ZWRiNTMyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMTc3NGJiNzBjYWY0MDMwOWMxZTM0MGUzNDBhOWYzOC5iaW5kUG9wdXAocG9wdXBfZGQ0N2ZkZWJiYTNjNDRkZTk4NmQ1ZWU3ZDBlODRiM2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5OGJmMThhMmY3NjRiMTViOTQ2NDM2NzU2Y2Y4Mjg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI3LjkxNjY2NjY2NjcsIDE1My4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGI1N2I1NWQ5YTkwNGRjNmJmZGZmM2I3ODBlNDA0YjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmI0NjIwOTU0ZDY1NDkxM2I1MTk2ZTg3Yzc3NjQ0N2UgPSAkKGA8ZGl2IGlkPSJodG1sXzJiNDYyMDk1NGQ2NTQ5MTNiNTE5NmU4N2M3NzY0NDdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYW5kamFsYW5nIChZdWd1bWJpcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiNTdiNTVkOWE5MDRkYzZiZmRmZjNiNzgwZTQwNGI5LnNldENvbnRlbnQoaHRtbF8yYjQ2MjA5NTRkNjU0OTEzYjUxOTZlODdjNzc2NDQ3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OThiZjE4YTJmNzY0YjE1Yjk0NjQzNjc1NmNmODI4OS5iaW5kUG9wdXAocG9wdXBfZGI1N2I1NWQ5YTkwNGRjNmJmZGZmM2I3ODBlNDA0YjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3MWE0Mzk2NDUxMDRhZmU4OTEyOGU1OTg4Yzk0ZTdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE2LjAsIC01Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjYyOGE4OWE0NzQ4NGRkYmIwNzhlYTJlNWNlNTA4ZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjBiOGE5MmRjMzZmNDFmOWFkYTZhYmE3OWU3MDQyYzEgPSAkKGA8ZGl2IGlkPSJodG1sX2IwYjhhOTJkYzM2ZjQxZjlhZGE2YWJhNzllNzA0MmMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYm9ybzEyODIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Qm9yb3JvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2MjhhODlhNDc0ODRkZGJiMDc4ZWEyZTVjZTUwOGQyLnNldENvbnRlbnQoaHRtbF9iMGI4YTkyZGMzNmY0MWY5YWRhNmFiYTc5ZTcwNDJjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NzFhNDM5NjQ1MTA0YWZlODkxMjhlNTk4OGM5NGU3ZS5iaW5kUG9wdXAocG9wdXBfNjYyOGE4OWE0NzQ4NGRkYmIwNzhlYTJlNWNlNTA4ZDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljMzBkOTc4ZmFhNDRhYzg5OTgyNDRhOGZlNDM5OTcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMS4wODMzMzMzMzMzMywgLTcwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OTQyZjI5NTExM2M0YTU3OTljNjBiYmJhNTU0NjQ3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YjY3YTBjYzg4YWY0MGNmOWU1Zjg4M2ZjZDBlNGEyYSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2I2N2EwY2M4OGFmNDBjZjllNWY4ODNmY2QwZTRhMmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhY3VhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OTQyZjI5NTExM2M0YTU3OTljNjBiYmJhNTU0NjQ3Yy5zZXRDb250ZW50KGh0bWxfN2I2N2EwY2M4OGFmNDBjZjllNWY4ODNmY2QwZTRhMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWMzMGQ5NzhmYWE0NGFjODk5ODI0NGE4ZmU0Mzk5NzEuYmluZFBvcHVwKHBvcHVwXzg5NDJmMjk1MTEzYzRhNTc5OWM2MGJiYmE1NTQ2NDdjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDBlMmNjZmExNWU0ZTk0OTBlNjNhMGQ2NTFjYmIxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjAsIC00Ni4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdjY2Y2MTAwZjkxNGZkZThmODMxNTA5NDI0ODVlNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTc5ZjFjYWRlMTU5NDNiZmEwMDAyODg4OTYxYjllZGUgPSAkKGA8ZGl2IGlkPSJodG1sX2U3OWYxY2FkZTE1OTQzYmZhMDAwMjg4ODk2MWI5ZWRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2FuZTEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2FuZWxhLUtyYWjDtDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jN2NjZjYxMDBmOTE0ZmRlOGY4MzE1MDk0MjQ4NWU1Yi5zZXRDb250ZW50KGh0bWxfZTc5ZjFjYWRlMTU5NDNiZmEwMDAyODg4OTYxYjllZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGQwZTJjY2ZhMTVlNGU5NDkwZTYzYTBkNjUxY2JiMWQuYmluZFBvcHVwKHBvcHVwX2M3Y2NmNjEwMGY5MTRmZGU4ZjgzMTUwOTQyNDg1ZTViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMDNlYjVkZTg2ZDY0MWFmYTAzMzQwMGJiOWJmOTdhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjUsIC04My41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTBkYzBhOGY0YzY3NDAyMTgxZTllMzI2ZWQ5ZmRhYTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTdlMTY0OGE1ZWUwNGY2NWI5YTM0MzRjYWVjNDA2OTQgPSAkKGA8ZGl2IGlkPSJodG1sX2E3ZTE2NDhhNWVlMDRmNjViOWEzNDM0Y2FlYzQwNjk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2hlcjEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2hlcm9rZWU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTBkYzBhOGY0YzY3NDAyMTgxZTllMzI2ZWQ5ZmRhYTcuc2V0Q29udGVudChodG1sX2E3ZTE2NDhhNWVlMDRmNjViOWEzNDM0Y2FlYzQwNjk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMwM2ViNWRlODZkNjQxYWZhMDMzNDAwYmI5YmY5N2FlLmJpbmRQb3B1cChwb3B1cF9lMGRjMGE4ZjRjNjc0MDIxODFlOWUzMjZlZDlmZGFhNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWZiMDI1YTFmOTNkNGUxNDlkMTZiNWYwODJjZDk0ZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4xMTY2NjY2NjY2NywgMTQ1LjExNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA3NWFlMjkzM2MyODRjNzQ5YTQzMmRiNjFjZWU3NjdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2M2IwZjM3NmU5NTRmY2RiMmE2ZjkzMDhjMmQ4NWY4ID0gJChgPGRpdiBpZD0iaHRtbF9mNjNiMGYzNzZlOTU0ZmNkYjJhNmY5MzA4YzJkODVmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2NodWExMjUwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkNodWF2ZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNzVhZTI5MzNjMjg0Yzc0OWE0MzJkYjYxY2VlNzY3Zi5zZXRDb250ZW50KGh0bWxfZjYzYjBmMzc2ZTk1NGZjZGIyYTZmOTMwOGMyZDg1ZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWZiMDI1YTFmOTNkNGUxNDlkMTZiNWYwODJjZDk0ZTAuYmluZFBvcHVwKHBvcHVwXzA3NWFlMjkzM2MyODRjNzQ5YTQzMmRiNjFjZWU3NjdmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOTY2NDljY2Y1YTk0MzViYWU5NDU5Y2YxMDY3OWRjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjUsIC0xMDEuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk4ZmJiODIyMzJiYjQyMzk4ZWI1MmRhMDVkOGI5ZjY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzOTQ0M2FlZjcyYjRlMWViYWU2NzRjZTUzODk2N2RjID0gJChgPGRpdiBpZD0iaHRtbF9mMzk0NDNhZWY3MmI0ZTFlYmFlNjc0Y2U1Mzg5NjdkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2NvbWExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkNvbWFuY2hlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4ZmJiODIyMzJiYjQyMzk4ZWI1MmRhMDVkOGI5ZjY3LnNldENvbnRlbnQoaHRtbF9mMzk0NDNhZWY3MmI0ZTFlYmFlNjc0Y2U1Mzg5NjdkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOTY2NDljY2Y1YTk0MzViYWU5NDU5Y2YxMDY3OWRjZS5iaW5kUG9wdXAocG9wdXBfOThmYmI4MjIzMmJiNDIzOThlYjUyZGEwNWQ4YjlmNjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxYzU5ODZiNDVjMDQ5NGZiNTE0MjhiYTdiYjdkMWUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuMCwgLTExMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTc5ZDZlODk5NTM1NDA3YzgwOTA5YjZhNDJlYWZmYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzlmZjFjYTQzNzM3NGRiMzgwYzgyODRiOTkzYTc4ODEgPSAkKGA8ZGl2IGlkPSJodG1sX2M5ZmYxY2E0MzczNzRkYjM4MGM4Mjg0Yjk5M2E3ODgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DcmVlIChQbGFpbnMpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNzlkNmU4OTk1MzU0MDdjODA5MDliNmE0MmVhZmZjOS5zZXRDb250ZW50KGh0bWxfYzlmZjFjYTQzNzM3NGRiMzgwYzgyODRiOTkzYTc4ODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTFjNTk4NmI0NWMwNDk0ZmI1MTQyOGJhN2JiN2QxZTAuYmluZFBvcHVwKHBvcHVwX2U3OWQ2ZTg5OTUzNTQwN2M4MDkwOWI2YTQyZWFmZmM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYzJiYjUxNTg1NmY0NDQ2OTdjYTBmODQwYzU0MmNlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEuMzMzMzMzMzMzMzMsIC03MC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTdmNjkyMWNlMmRjNGUyYTkwZTViODJhMzBiZjA5MzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWJjMWNjMzQzMThkNDBiZjg1MDE5NTM1ZWVkMTQ0ZTggPSAkKGA8ZGl2IGlkPSJodG1sX2FiYzFjYzM0MzE4ZDQwYmY4NTAxOTUzNWVlZDE0NGU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY3ViZTEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q3ViZW88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTdmNjkyMWNlMmRjNGUyYTkwZTViODJhMzBiZjA5MzEuc2V0Q29udGVudChodG1sX2FiYzFjYzM0MzE4ZDQwYmY4NTAxOTUzNWVlZDE0NGU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjMmJiNTE1ODU2ZjQ0NDY5N2NhMGY4NDBjNTQyY2UxLmJpbmRQb3B1cChwb3B1cF85N2Y2OTIxY2UyZGM0ZTJhOTBlNWI4MmEzMGJmMDkzMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWE1YWE5YjJjZWI3NDZiZjhmNzU5MzU1YmE5ZGRjMTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi41NSwgMTQ0LjU4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTkxOGU0ODc3YmYyNDNmODg2MjVhNWExMDFhMmYzNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDBlZGI2ZjA2ZjdmNDQ1ZGIwMzZjOGZmODYyOGUyNzcgPSAkKGA8ZGl2IGlkPSJodG1sX2QwZWRiNmYwNmY3ZjQ0NWRiMDM2YzhmZjg2MjhlMjc3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZGFkaTEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RGFkaWJpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5MThlNDg3N2JmMjQzZjg4NjI1YTVhMTAxYTJmMzYzLnNldENvbnRlbnQoaHRtbF9kMGVkYjZmMDZmN2Y0NDVkYjAzNmM4ZmY4NjI4ZTI3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YTVhYTliMmNlYjc0NmJmOGY3NTkzNTViYTlkZGMxMy5iaW5kUG9wdXAocG9wdXBfZTkxOGU0ODc3YmYyNDNmODg2MjVhNWExMDFhMmYzNjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyNGY5M2QzOTUxNTQxMWI5Y2VhN2E2OTRjNWY1ODI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEwLjAsIDE0OS4zMzMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiMDA3ZmU3MWMxZDRlYmU5YjQ5YjI0ZThjOTJiMGE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0YTYwZjNhMmNjYTRhMzg5NDcxM2E3YzA0ZThmNjQwID0gJChgPGRpdiBpZD0iaHRtbF9jNGE2MGYzYTJjY2E0YTM4OTQ3MTNhN2MwNGU4ZjY0MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2RhZ2ExMjc1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkRhZ2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWIwMDdmZTcxYzFkNGViZTliNDliMjRlOGM5MmIwYTcuc2V0Q29udGVudChodG1sX2M0YTYwZjNhMmNjYTRhMzg5NDcxM2E3YzA0ZThmNjQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YyNGY5M2QzOTUxNTQxMWI5Y2VhN2E2OTRjNWY1ODI5LmJpbmRQb3B1cChwb3B1cF8xYjAwN2ZlNzFjMWQ0ZWJlOWI0OWIyNGU4YzkyYjBhNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzE2ODNjZjRkM2ExNDE2OWEwZTJjYzc5ZDgxNjhhODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4zMzMzMzMzMzMzMywgMTM4LjgzMzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWFiZGU2ZGFkNzBkNDA5N2JmMTBlZTUwMjdlY2IyNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTJlMzM2MmRhN2E5NDlhMzlkOWE2ZTllZjk1MmI0M2IgPSAkKGA8ZGl2IGlkPSJodG1sXzEyZTMzNjJkYTdhOTQ5YTM5ZDlhNmU5ZWY5NTJiNDNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EYW5pIChMb3dlciBHcmFuZCBWYWxsZXkpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYWJkZTZkYWQ3MGQ0MDk3YmYxMGVlNTAyN2VjYjI2OS5zZXRDb250ZW50KGh0bWxfMTJlMzM2MmRhN2E5NDlhMzlkOWE2ZTllZjk1MmI0M2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzE2ODNjZjRkM2ExNDE2OWEwZTJjYzc5ZDgxNjhhODEuYmluZFBvcHVwKHBvcHVwX2FhYmRlNmRhZDcwZDQwOTdiZjEwZWU1MDI3ZWNiMjY5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NzAxYWM0NzM5ZDk0ODZjYWU1ZTAwYTEzYzFkNGNmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjU4MzMzMzMzMzMzLCAxNDEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyMDNjZjgwYWM4ZTQwY2M5M2UxYjQwYzFmNjViZTEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyMTU5NzZmYmJiOTQ0NjQ4MGFjYWJmMWZjYjNjMjU0ID0gJChgPGRpdiBpZD0iaHRtbF9iMjE1OTc2ZmJiYjk0NDY0ODBhY2FiZjFmY2IzYzI1NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGxhIChQcm9wZXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMjAzY2Y4MGFjOGU0MGNjOTNlMWI0MGMxZjY1YmUxMC5zZXRDb250ZW50KGh0bWxfYjIxNTk3NmZiYmI5NDQ2NDgwYWNhYmYxZmNiM2MyNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTcwMWFjNDczOWQ5NDg2Y2FlNWUwMGExM2MxZDRjZjcuYmluZFBvcHVwKHBvcHVwX2UyMDNjZjgwYWM4ZTQwY2M5M2UxYjQwYzFmNjViZTEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNGJlNmVlYTVjYTc0NzY4YjRkODI1M2Q5NzQwZTlkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjY4MzMzMzMzMzMzMDAwMDIsIDE0MS4zXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTU4YWQ2ZGNhMzU3NGRkZjk0ZDJhNGIxOTU1NDMxZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzhjMzVhYWU0YmFlNDIzYTg0YzMyMTdkNzIwZTA5ODggPSAkKGA8ZGl2IGlkPSJodG1sXzc4YzM1YWFlNGJhZTQyM2E4NGMzMjE3ZDcyMGUwOTg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZHVtbzEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RHVtbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NThhZDZkY2EzNTc0ZGRmOTRkMmE0YjE5NTU0MzFkMi5zZXRDb250ZW50KGh0bWxfNzhjMzVhYWU0YmFlNDIzYTg0YzMyMTdkNzIwZTA5ODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjRiZTZlZWE1Y2E3NDc2OGI0ZDgyNTNkOTc0MGU5ZDQuYmluZFBvcHVwKHBvcHVwXzU1OGFkNmRjYTM1NzRkZGY5NGQyYTRiMTk1NTQzMWQyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDRjNjZkMzU3NDU0Nzc2YTAyNGNkYTdmNGQyNGVmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy44MzMzMzMzMzMzLCAxNDUuNTgzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDQwMmRlMGJhZjQ0NTRlOGNmODViMTRhNzM1Yjg2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzY3NDllZTBhYzk0ODZmYTJmMzg3OTQ5NjIxNTIzYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTc2NzQ5ZWUwYWM5NDg2ZmEyZjM4Nzk0OTYyMTUyM2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9keWlyMTI1MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5EeWlyYmFsPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwNDAyZGUwYmFmNDQ1NGU4Y2Y4NWIxNGE3MzViODYzLnNldENvbnRlbnQoaHRtbF9lNzY3NDllZTBhYzk0ODZmYTJmMzg3OTQ5NjIxNTIzYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZDRjNjZkMzU3NDU0Nzc2YTAyNGNkYTdmNGQyNGVmMy5iaW5kUG9wdXAocG9wdXBfODA0MDJkZTBiYWY0NDU0ZThjZjg1YjE0YTczNWI4NjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljYzI1MGJjNjYxMzQ0ZTk5ZWM1ZWRmZTMxMmIzNDVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC45MTY2NjY2NjY2NywgOC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmYwNDc2MmFiZGE5NDc0MDg3YWY1Y2M0MTMxOWZkOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmFjZjk0ZmNiZmFmNDM4MmJkZTU3OGRiNDU1YTVjMWEgPSAkKGA8ZGl2IGlkPSJodG1sX2ZhY2Y5NGZjYmZhZjQzODJiZGU1NzhkYjQ1NWE1YzFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZWZpazEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RWZpazwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjA0NzYyYWJkYTk0NzQwODdhZjVjYzQxMzE5ZmQ5MS5zZXRDb250ZW50KGh0bWxfZmFjZjk0ZmNiZmFmNDM4MmJkZTU3OGRiNDU1YTVjMWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWNjMjUwYmM2NjEzNDRlOTllYzVlZGZlMzEyYjM0NWYuYmluZFBvcHVwKHBvcHVwX2ZmMDQ3NjJhYmRhOTQ3NDA4N2FmNWNjNDEzMTlmZDkxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YzBiYTEzZDAwNTM0YTY2OTIxNTMxMGViZmVjMmIwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjgzMzMzMzMzMzMzLCAxMzUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzYjljYjU5OWE2YjRhNTY4OTQwNWU5MGIzYjg3YzBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiN2NjM2YzMTM5ZTRjNzI5NDEzMmIyOTNjOWM0OWUzID0gJChgPGRpdiBpZD0iaHRtbF9hYjdjYzNmMzEzOWU0YzcyOTQxMzJiMjkzYzljNDllMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2VrYXIxMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVrYXJpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzYjljYjU5OWE2YjRhNTY4OTQwNWU5MGIzYjg3YzBiLnNldENvbnRlbnQoaHRtbF9hYjdjYzNmMzEzOWU0YzcyOTQxMzJiMjkzYzljNDllMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YzBiYTEzZDAwNTM0YTY2OTIxNTMxMGViZmVjMmIwNy5iaW5kUG9wdXAocG9wdXBfYTNiOWNiNTk5YTZiNGE1Njg5NDA1ZTkwYjNiODdjMGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0Y2QzNTAwNGUzMzRjZWU4ODFhZmNhNTI1YzkxNmU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuNTgzMzMzMzMzMzMwMDAxLCAxNDMuMzMzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTEyYzQ5ZDU0NDU0N2VkYTZmY2Y0ZjViYzMwZDNhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yY2ZiYTJjZWIyNWI0NDY3OWE3NmJhNGI4ZDhmY2IxZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMmNmYmEyY2ViMjViNDQ2NzlhNzZiYTRiOGQ4ZmNiMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9mYXN1MTI0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GYXN1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhMTJjNDlkNTQ0NTQ3ZWRhNmZjZjRmNWJjMzBkM2FjLnNldENvbnRlbnQoaHRtbF8yY2ZiYTJjZWIyNWI0NDY3OWE3NmJhNGI4ZDhmY2IxZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNGNkMzUwMDRlMzM0Y2VlODgxYWZjYTUyNWM5MTZlNi5iaW5kUG9wdXAocG9wdXBfZGExMmM0OWQ1NDQ1NDdlZGE2ZmNmNGY1YmMzMGQzYWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmYTIzNzEyNmQwZjRmZjQ5MmE1NzhlNWVkNzIzYTA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuMCwgMTE5LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YzUxZDhhYWZhNzU0ODI1ODk1NjA5MjU4NTRmYTFlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZDNmZTIyOTFhNmI0ZDUzOTYyNjkwN2U2ZDBhNzQ2ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWQzZmUyMjkxYTZiNGQ1Mzk2MjY5MDdlNmQwYTc0NmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9mdXpoMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GdXpob3U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmM1MWQ4YWFmYTc1NDgyNTg5NTYwOTI1ODU0ZmExZTMuc2V0Q29udGVudChodG1sX2FkM2ZlMjI5MWE2YjRkNTM5NjI2OTA3ZTZkMGE3NDZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmYTIzNzEyNmQwZjRmZjQ5MmE1NzhlNWVkNzIzYTA1LmJpbmRQb3B1cChwb3B1cF82YzUxZDhhYWZhNzU0ODI1ODk1NjA5MjU4NTRmYTFlMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWZlM2MxM2FjYzk3NDY1MTgwMGM5OGIxY2RkMmRkMmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4yNSwgMTQ2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMGI0ODEzM2VlZjU0NWIwOTY2YjI1M2U1OThhZTc0NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83N2Q1ZmZhYzAxNzc0YjgyOGFiNjZkNTk2YTg1NGM3YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzdkNWZmYWMwMTc3NGI4MjhhYjY2ZDU5NmE4NTRjN2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9nYWRzMTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HYWRzdXA8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjBiNDgxMzNlZWY1NDViMDk2NmIyNTNlNTk4YWU3NDQuc2V0Q29udGVudChodG1sXzc3ZDVmZmFjMDE3NzRiODI4YWI2NmQ1OTZhODU0YzdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVmZTNjMTNhY2M5NzQ2NTE4MDBjOThiMWNkZDJkZDJiLmJpbmRQb3B1cChwb3B1cF9mMGI0ODEzM2VlZjU0NWIwOTY2YjI1M2U1OThhZTc0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjQ5MWQwNjZiYmQ1NDgyN2IzNmI2ZTI4NDYxZjUyZjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4wLCAtNzIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4YTYzOTQ5OWQ4ZTQ2ZWE5NGVmOGIxYzlkMDViNTFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2NzI0YWIzMjE5MjQwZThiM2QwNGQ2MTk2NDE4NTNlID0gJChgPGRpdiBpZD0iaHRtbF8yNjcyNGFiMzIxOTI0MGU4YjNkMDRkNjE5NjQxODUzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R29hamlybzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjhhNjM5NDk5ZDhlNDZlYTk0ZWY4YjFjOWQwNWI1MWUuc2V0Q29udGVudChodG1sXzI2NzI0YWIzMjE5MjQwZThiM2QwNGQ2MTk2NDE4NTNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0OTFkMDY2YmJkNTQ4MjdiMzZiNmUyODQ2MWY1MmY3LmJpbmRQb3B1cChwb3B1cF9iOGE2Mzk0OTlkOGU0NmVhOTRlZjhiMWM5ZDA1YjUxZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDFlZWE4MzdmNTRiNDVlMjljMTk5ZDlhYjdiZTk2OTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy41LCAxNDYuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZTgwNjJhYWI1Nzc0YmZkODM4MDc1MDkzNmE0OGJlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MzUyNWEzZWU3NWY0ZWE5YjczYjhhMGZjNmUyNTcwZCA9ICQoYDxkaXYgaWQ9Imh0bWxfODM1MjVhM2VlNzVmNGVhOWI3M2I4YTBmYzZlMjU3MGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYW10MTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYW10YWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmU4MDYyYWFiNTc3NGJmZDgzODA3NTA5MzZhNDhiZTEuc2V0Q29udGVudChodG1sXzgzNTI1YTNlZTc1ZjRlYTliNzNiOGEwZmM2ZTI1NzBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxZWVhODM3ZjU0YjQ1ZTI5YzE5OWQ5YWI3YmU5Njk5LmJpbmRQb3B1cChwb3B1cF9iZTgwNjJhYWI1Nzc0YmZkODM4MDc1MDkzNmE0OGJlMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWExZDVhNDA4N2QwNDJiM2JlODkzNDJlMDUxYmIzNGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS41ODMzMzMzMzMzLCAtMTU1LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzdkZmFlMmJhYmQ0M2VhYWMyYjgyNGExYzgxODA2OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDNlOWFhODdkNzY0OWE4OGY2MTg1MzIzNTViZWE1NiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWQzZTlhYTg3ZDc2NDlhODhmNjE4NTMyMzU1YmVhNTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYXdhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYXdhaWlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzdkZmFlMmJhYmQ0M2VhYWMyYjgyNGExYzgxODA2OC5zZXRDb250ZW50KGh0bWxfOWQzZTlhYTg3ZDc2NDlhODhmNjE4NTMyMzU1YmVhNTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWExZDVhNDA4N2QwNDJiM2JlODkzNDJlMDUxYmIzNGYuYmluZFBvcHVwKHBvcHVwXzFjN2RmYWUyYmFiZDQzZWFhYzJiODI0YTFjODE4MDY4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOGFlNjY2ODFkODE0ZDUwYWM1ZDE2MjlmNDQyMWQ2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjMzMzMzMzMzMzMzLCAxNDEuMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYmZjN2E2ODFmNjE0YThjOGJjYjBmZGYzNTIwZmJlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODU0YjdiYWFjMjA0YmI0YmQ0MWQ1NTI4ZGRlODczYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjg1NGI3YmFhYzIwNGJiNGJkNDFkNTUyOGRkZTg3M2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pbW9uMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JbW9uZGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGJmYzdhNjgxZjYxNGE4YzhiY2IwZmRmMzUyMGZiZTYuc2V0Q29udGVudChodG1sX2Y4NTRiN2JhYWMyMDRiYjRiZDQxZDU1MjhkZGU4NzNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y4YWU2NjY4MWQ4MTRkNTBhYzVkMTYyOWY0NDIxZDYxLmJpbmRQb3B1cChwb3B1cF8wYmZjN2E2ODFmNjE0YThjOGJjYjBmZGYzNTIwZmJlNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWFlMWZlYjM0MWFhNDRjN2IyNzgyNTkzNmI4MjY5NjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy4wLCAxMzMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0ZWVjZTAyMTA3ZDQxMjM5NDI0ZGUyOTUyYmJmM2EzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3NDRhYTRhNGI5ZTRlNTZhOGYxYjFlZjExNzNhZTY1ID0gJChgPGRpdiBpZD0iaHRtbF9jNzQ0YWE0YTRiOWU0ZTU2YThmMWIxZWYxMTczYWU2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2lyYXIxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPklyYXJ1dHU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzRlZWNlMDIxMDdkNDEyMzk0MjRkZTI5NTJiYmYzYTMuc2V0Q29udGVudChodG1sX2M3NDRhYTRhNGI5ZTRlNTZhOGYxYjFlZjExNzNhZTY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFhZTFmZWIzNDFhYTQ0YzdiMjc4MjU5MzZiODI2OTY1LmJpbmRQb3B1cChwb3B1cF9jNGVlY2UwMjEwN2Q0MTIzOTQyNGRlMjk1MmJiZjNhMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2MxZDQ3MDVhNDdiNGRiNGFmNjZhOWE5M2ZlZmEyYTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4zMzMzMzMzMzMzMywgMTQyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZGJmMzVlODlhYjE0ZTA5OGUyNTQ1YmE4ZGRmNzYyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTQ5MWYyZDc3YWI0MDFmOTE5MzcxNzA2OTllYjkzNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWE0OTFmMmQ3N2FiNDAxZjkxOTM3MTcwNjk5ZWI5MzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pd2FtMTI1NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Jd2FtPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkYmYzNWU4OWFiMTRlMDk4ZTI1NDViYThkZGY3NjIxLnNldENvbnRlbnQoaHRtbF8xYTQ5MWYyZDc3YWI0MDFmOTE5MzcxNzA2OTllYjkzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YzFkNDcwNWE0N2I0ZGI0YWY2NmE5YTkzZmVmYTJhNi5iaW5kUG9wdXAocG9wdXBfNmRiZjM1ZTg5YWIxNGUwOThlMjU0NWJhOGRkZjc2MjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2OWY0YTQ0Yjg3YzQ1YWFhZjM5NGFkZDJhMjM0NjBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNSwgLTczLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNThlNzI1YWU0ZTk0MGY2ODc3ZTJhNDMyY2NlMzg2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ODViYzdjNDY4OTg0NmJlOGY1ZTE3ZjZkMTdlNzliNyA9ICQoYDxkaXYgaWQ9Imh0bWxfOTg1YmM3YzQ2ODk4NDZiZThmNWUxN2Y2ZDE3ZTc5YjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkphcHJlcmlhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNThlNzI1YWU0ZTk0MGY2ODc3ZTJhNDMyY2NlMzg2Mi5zZXRDb250ZW50KGh0bWxfOTg1YmM3YzQ2ODk4NDZiZThmNWUxN2Y2ZDE3ZTc5YjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTY5ZjRhNDRiODdjNDVhYWFmMzk0YWRkMmEyMzQ2MGMuYmluZFBvcHVwKHBvcHVwXzM1OGU3MjVhZTRlOTQwZjY4NzdlMmE0MzJjY2UzODYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOGZiODUzMGI3OTI0NjNjODVkMDhiOTIyOWQ2NDhhNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjU4MzMzMzMzMzMsIDMwLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MzQ2M2ZmZjdmZWU0MWZlYjkwMWNjZTRjZDE2NDM1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NzU5ZmM0Njg5ODg0MzQ0OTBmZjkxYzU4YmFmN2RjNCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTc1OWZjNDY4OTg4NDM0NDkwZmY5MWM1OGJhZjdkYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpvbWFuZzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDM0NjNmZmY3ZmVlNDFmZWI5MDFjY2U0Y2QxNjQzNWEuc2V0Q29udGVudChodG1sXzU3NTlmYzQ2ODk4ODQzNDQ5MGZmOTFjNThiYWY3ZGM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4ZmI4NTMwYjc5MjQ2M2M4NWQwOGI5MjI5ZDY0OGE3LmJpbmRQb3B1cChwb3B1cF80MzQ2M2ZmZjdmZWU0MWZlYjkwMWNjZTRjZDE2NDM1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWY5NGNhMDMyZWY1NDIxNjliZTlkMmQ1NjljYzk0ZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjYuMCwgLTUyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mN2NkNzQxNmZkNjQ0ZjM5YTljOTNjNGJhNGQ4ZDE5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNzE0YzUyMjk3ZDE0ZmUzYjQ5Nzc3ZDA5ZGZlMGVjYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjcxNGM1MjI5N2QxNGZlM2I0OTc3N2QwOWRmZTBlY2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWluMTI3MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWluZ2FuZzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mN2NkNzQxNmZkNjQ0ZjM5YTljOTNjNGJhNGQ4ZDE5Yi5zZXRDb250ZW50KGh0bWxfZjcxNGM1MjI5N2QxNGZlM2I0OTc3N2QwOWRmZTBlY2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWY5NGNhMDMyZWY1NDIxNjliZTlkMmQ1NjljYzk0ZDEuYmluZFBvcHVwKHBvcHVwX2Y3Y2Q3NDE2ZmQ2NDRmMzlhOWM5M2M0YmE0ZDhkMTliKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZTYxODQwYzM3NTk0NmMxYWUwOTU2N2YxM2U4MzQ0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEuMzMzMzMzMzMzMzMsIDE3My4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWVmNGQxZTY5M2YxNGI3ZDhmZWIzOTJkNmEwY2ExMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDk0NjkyNTJmYTNmNDJmNzk2YTg1YTNmZGYxZmY1MTQgPSAkKGA8ZGl2IGlkPSJodG1sXzQ5NDY5MjUyZmEzZjQyZjc5NmE4NWEzZmRmMWZmNTE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LaXJpYmF0aTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWVmNGQxZTY5M2YxNGI3ZDhmZWIzOTJkNmEwY2ExMWEuc2V0Q29udGVudChodG1sXzQ5NDY5MjUyZmEzZjQyZjc5NmE4NWEzZmRmMWZmNTE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFlNjE4NDBjMzc1OTQ2YzFhZTA5NTY3ZjEzZTgzNDRhLmJpbmRQb3B1cChwb3B1cF9hZWY0ZDFlNjkzZjE0YjdkOGZlYjM5MmQ2YTBjYTExYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTIwODEyZWM1NTU0NDZhMjhkOGQ3ZTk1ZWUzNTllYjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ljc1LCAtOC43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1ZjYxNDA2YzcyODRjZmNiYWJjYWFhNTIzNWM4ZWJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUyOWQwY2VkNjgxNTQ3ZGRiODRmZmU5MTgxYTBjNzU5ID0gJChgPGRpdiBpZD0iaHRtbF81MjlkMGNlZDY4MTU0N2RkYjg0ZmZlOTE4MWEwYzc1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tsYW8xMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktsYW88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDVmNjE0MDZjNzI4NGNmY2JhYmNhYWE1MjM1YzhlYmYuc2V0Q29udGVudChodG1sXzUyOWQwY2VkNjgxNTQ3ZGRiODRmZmU5MTgxYTBjNzU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EyMDgxMmVjNTU1NDQ2YTI4ZDhkN2U5NWVlMzU5ZWI4LmJpbmRQb3B1cChwb3B1cF80NWY2MTQwNmM3Mjg0Y2ZjYmFiY2FhYTUyMzVjOGViZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFlM2VmNjQ1MmFmNDM1ZmJmNzljOGIzMzgxNjIxODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC44MzMzMzMzMzMzLCAtODUuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhNmJiNWQ2NDliMDQ5YmE5YTJmMDFkODQ1YWZjMzAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1NzJmZTRhZTA3YzRmMTVhZTdiNTMxZTJjNGU1M2U1ID0gJChgPGRpdiBpZD0iaHRtbF82NTcyZmU0YWUwN2M0ZjE1YWU3YjUzMWUyYzRlNTNlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tvYXMxMjM2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktvYXNhdGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWE2YmI1ZDY0OWIwNDliYTlhMmYwMWQ4NDVhZmMzMDIuc2V0Q29udGVudChodG1sXzY1NzJmZTRhZTA3YzRmMTVhZTdiNTMxZTJjNGU1M2U1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FhZTNlZjY0NTJhZjQzNWZiZjc5YzhiMzM4MTYyMTgzLmJpbmRQb3B1cChwb3B1cF81YTZiYjVkNjQ5YjA0OWJhOWEyZjAxZDg0NWFmYzMwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjlhNTJkYmEzOGI4NDk5ODllMzkxYmEwOGVhOTljZjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOS41LCAxNDcuMzMzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTExNGMzMDNiMDg0MjVmOWNjNzMyMTI1NmFiZjQzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NWNlZjZmMTczZWU0NGI2YjQwNGVhZTE3YmNmZGRlMCA9ICQoYDxkaXYgaWQ9Imh0bWxfODVjZWY2ZjE3M2VlNDRiNmI0MDRlYWUxN2JjZmRkZTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktvaWFyaTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzExMTRjMzAzYjA4NDI1ZjljYzczMjEyNTZhYmY0MzQuc2V0Q29udGVudChodG1sXzg1Y2VmNmYxNzNlZTQ0YjZiNDA0ZWFlMTdiY2ZkZGUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI5YTUyZGJhMzhiODQ5OTg5ZTM5MWJhMDhlYTk5Y2Y2LmJpbmRQb3B1cChwb3B1cF83MTExNGMzMDNiMDg0MjVmOWNjNzMyMTI1NmFiZjQzNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTNkYjMxMTFiNDEyNGMwNDk0MjNmMTU2NTljZmE3YmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTYuMCwgMTQ1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDk3MjdkZWQ0NDY0MGRiYmM0YjcxMTdiYjMxMDdkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMDA1Y2E3ZWQ2MWE0OWRhYmFlZmI1ZmJlMjVjOTIyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjAwNWNhN2VkNjFhNDlkYWJhZWZiNWZiZTI1YzkyMmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rdWt1MTI3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LdWt1LVlhbGFuamk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmQ5NzI3ZGVkNDQ2NDBkYmJjNGI3MTE3YmIzMTA3ZDguc2V0Q29udGVudChodG1sXzIwMDVjYTdlZDYxYTQ5ZGFiYWVmYjVmYmUyNWM5MjJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UzZGIzMTExYjQxMjRjMDQ5NDIzZjE1NjU5Y2ZhN2JjLmJpbmRQb3B1cChwb3B1cF82ZDk3MjdkZWQ0NDY0MGRiYmM0YjcxMTdiYjMxMDdkOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjM4OTZmMzAyZjczNDIwYjg1MTFlMTg5YzA1NDZmMmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMS4yNSwgMTMwLjkxNjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODhmMzU4YzkzYTY5NGU3OWFmYTY5ZDJkNjQ4YzFjY2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzdkYTJmZWM4NDhhNGRiNDg2NGMxYjJkYjU3OTg4YjcgPSAkKGA8ZGl2IGlkPSJodG1sXzM3ZGEyZmVjODQ4YTRkYjQ4NjRjMWIyZGI1Nzk4OGI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYSd5YTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODhmMzU4YzkzYTY5NGU3OWFmYTY5ZDJkNjQ4YzFjY2Quc2V0Q29udGVudChodG1sXzM3ZGEyZmVjODQ4YTRkYjQ4NjRjMWIyZGI1Nzk4OGI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIzODk2ZjMwMmY3MzQyMGI4NTExZTE4OWMwNTQ2ZjJhLmJpbmRQb3B1cChwb3B1cF84OGYzNThjOTNhNjk0ZTc5YWZhNjlkMmQ2NDhjMWNjZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWRkYjYwZTA3YjhmNGU3MDljNGY0NTgzYmY5MTFlOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuNDE2NjY2NjY2NzAwMDAxLCAxMzAuNDE2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMWQwMDZmMGI4ODc0MmEyYTJhNDU3MGFhMjdkNTExMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTY5ZWY1MzAyMDE0OTdkYmNjNGY3ODFhOTNmNjdkOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGE2OWVmNTMwMjAxNDk3ZGJjYzRmNzgxYTkzZjY3ZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hbGFrbWFsYWs8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ExZDAwNmYwYjg4NzQyYTJhMmE0NTcwYWEyN2Q1MTEyLnNldENvbnRlbnQoaHRtbF9kYTY5ZWY1MzAyMDE0OTdkYmNjNGY3ODFhOTNmNjdkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZGRiNjBlMDdiOGY0ZTcwOWM0ZjQ1ODNiZjkxMWU4Zi5iaW5kUG9wdXAocG9wdXBfYTFkMDA2ZjBiODg3NDJhMmEyYTQ1NzBhYTI3ZDUxMTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5MjdmMTQ5YjJmOTRlZjhiMTIxZWQ4OTJmZmVjZWRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQwLjAsIDE3Ni4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDIyNWQ2ZTBjODdjNDdlYWE2N2U2ZjljNTY2ZGU4ZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWQ0YjM0MjZhMWYxNGUzOTgzNjkwMGM0ZDU4Zjc3OWMgPSAkKGA8ZGl2IGlkPSJodG1sXzFkNGIzNDI2YTFmMTRlMzk4MzY5MDBjNGQ1OGY3NzljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFvcjEyNDYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFvcmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDIyNWQ2ZTBjODdjNDdlYWE2N2U2ZjljNTY2ZGU4ZGMuc2V0Q29udGVudChodG1sXzFkNGIzNDI2YTFmMTRlMzk4MzY5MDBjNGQ1OGY3NzljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk5MjdmMTQ5YjJmOTRlZjhiMTIxZWQ4OTJmZmVjZWRkLmJpbmRQb3B1cChwb3B1cF9kMjI1ZDZlMGM4N2M0N2VhYTY3ZTZmOWM1NjZkZThkYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2UyZDNmN2ZhZTEwNDhjNzk0Y2ZhMjAwNTg1YmNmOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjgzMzMzMzMzMzMzMDAwMSwgMTI0LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmEzNDZiYjhhZGUxNDc3MGJhNWJjNjM4MDM5YWE4ZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmRhMjYwYTM5ZTgzNGVhNjhhNGQwYTllYzZlZjZjMjYgPSAkKGA8ZGl2IGlkPSJodG1sXzJkYTI2MGEzOWU4MzRlYTY4YTRkMGE5ZWM2ZWY2YzI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFyYTE0MDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFyYW5hbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTM0NmJiOGFkZTE0NzcwYmE1YmM2MzgwMzlhYThlNi5zZXRDb250ZW50KGh0bWxfMmRhMjYwYTM5ZTgzNGVhNjhhNGQwYTllYzZlZjZjMjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2UyZDNmN2ZhZTEwNDhjNzk0Y2ZhMjAwNTg1YmNmOWEuYmluZFBvcHVwKHBvcHVwXzZhMzQ2YmI4YWRlMTQ3NzBiYTViYzYzODAzOWFhOGU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMmE5NjBhZGZmODc0MjZiYjdmNzdkNTAyMzZlYzYzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy42NjY2NjY2NjY3MDAwMDEsIDEzMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmZmM2Y4YzVlYzg4NDc1MDljNzNkYzBmNjQ0MTIxMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI4NGE2Zjg1NzE2NGQ3YWE2Y2FjYzEyNmI3ZjRkZWYgPSAkKGA8ZGl2IGlkPSJodG1sXzkyODRhNmY4NTcxNjRkN2FhNmNhY2MxMjZiN2Y0ZGVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXJhbnVuZ2t1PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZmYzZjhjNWVjODg0NzUwOWM3M2RjMGY2NDQxMjEzMy5zZXRDb250ZW50KGh0bWxfOTI4NGE2Zjg1NzE2NGQ3YWE2Y2FjYzEyNmI3ZjRkZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjJhOTYwYWRmZjg3NDI2YmI3Zjc3ZDUwMjM2ZWM2M2UuYmluZFBvcHVwKHBvcHVwX2JmZjNmOGM1ZWM4ODQ3NTA5YzczZGMwZjY0NDEyMTMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDgyODA4YTU1ZGY0ZDAzOTEyMmQzNzUxODZmOTY5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOC4wLCAtNDAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3MjUxMDU3OWQ3MDQyNjE5ZjQzMzI0NGRhNzBiNjAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmZTc4M2M5MGI1YjQ5ZDdiMWVmZGY2ZGQ4ZTdlMWQ5ID0gJChgPGRpdiBpZD0iaHRtbF80ZmU3ODNjOTBiNWI0OWQ3YjFlZmRmNmRkOGU3ZTFkOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21heGExMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1heGFrYWzDrTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NzI1MTA1NzlkNzA0MjYxOWY0MzMyNDRkYTcwYjYwMy5zZXRDb250ZW50KGh0bWxfNGZlNzgzYzkwYjViNDlkN2IxZWZkZjZkZDhlN2UxZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTA4MjgwOGE1NWRmNGQwMzkxMjJkMzc1MTg2Zjk2OTIuYmluZFBvcHVwKHBvcHVwXzU3MjUxMDU3OWQ3MDQyNjE5ZjQzMzI0NGRhNzBiNjAzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNGFjNGY4ZDQzMjY0ZGM3ODMzMTk3YjZlZDJiNzIzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xLjMzMzMzMzMzMzMzLCAxMzIuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5NjVlMWYwNDc4NTQ4YmQ4ZTZlZjRjNDUzYjNlOGRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhMzVlNWNlNGU4NTRmNDVhOWYxYWQ2N2QzYzUxMzY3ID0gJChgPGRpdiBpZD0iaHRtbF9jYTM1ZTVjZTRlODU0ZjQ1YTlmMWFkNjdkM2M1MTM2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWF5YnJhdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODk2NWUxZjA0Nzg1NDhiZDhlNmVmNGM0NTNiM2U4ZGEuc2V0Q29udGVudChodG1sX2NhMzVlNWNlNGU4NTRmNDVhOWYxYWQ2N2QzYzUxMzY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0YWM0ZjhkNDMyNjRkYzc4MzMxOTdiNmVkMmI3MjMzLmJpbmRQb3B1cChwb3B1cF84OTY1ZTFmMDQ3ODU0OGJkOGU2ZWY0YzQ1M2IzZThkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzAxYWYxMTZjOWU0NGI0NTljMTlhYzlmNjZlMDI1NTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy4yNSwgLTk2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iY2MyYzFjMTI3NjM0YWFmYWU0ZjNmOTY5MTg2NWMxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MmZkMzhiNjFiNGI0Mjk0OTEzMzUyOGI3YzkyYjU5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTJmZDM4YjYxYjRiNDI5NDkxMzM1MjhiN2M5MmI1OTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1peGUgKFRvdG9udGVwZWMpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iY2MyYzFjMTI3NjM0YWFmYWU0ZjNmOTY5MTg2NWMxOS5zZXRDb250ZW50KGh0bWxfNTJmZDM4YjYxYjRiNDI5NDkxMzM1MjhiN2M5MmI1OTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzAxYWYxMTZjOWU0NGI0NTljMTlhYzlmNjZlMDI1NTIuYmluZFBvcHVwKHBvcHVwX2JjYzJjMWMxMjc2MzRhYWZhZTRmM2Y5NjkxODY1YzE5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMmE3YmVhYTk1NDE0N2QyYjgxNDE2NzVlMTgzY2RmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjk1LCAxMzUuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYjM3NDdjYzQ5ODQ0MWRjYmM2ODVjNmIwNWZmYjJiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYmQ2MjMyNzY4YmM0NjUzOGYzM2JkMDYwNzZlNjhiZiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2JkNjIzMjc2OGJjNDY1MzhmMzNiZDA2MDc2ZTY4YmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmIzNzQ3Y2M0OTg0NDFkY2JjNjg1YzZiMDVmZmIyYjMuc2V0Q29udGVudChodG1sXzNiZDYyMzI3NjhiYzQ2NTM4ZjMzYmQwNjA3NmU2OGJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAyYTdiZWFhOTU0MTQ3ZDJiODE0MTY3NWUxODNjZGZjLmJpbmRQb3B1cChwb3B1cF9iYjM3NDdjYzQ5ODQ0MWRjYmM2ODVjNmIwNWZmYjJiMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzBkOWYyZGMyMjA3NDU0NWJlOWI5NTE1ZTcyMDMzOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFswLjI1LCAzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTI3NDliZTg4MzFhNDFjZjkyNGQxNjFjNjc4NTBiODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGFmNWM0ODMyZDkwNGQ2NTk4MTg0MDI3NmY4MGQ0NTggPSAkKGA8ZGl2IGlkPSJodG1sXzhhZjVjNDgzMmQ5MDRkNjU5ODE4NDAyNzZmODBkNDU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbmFuZDEyNjYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TmFuZGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTI3NDliZTg4MzFhNDFjZjkyNGQxNjFjNjc4NTBiODUuc2V0Q29udGVudChodG1sXzhhZjVjNDgzMmQ5MDRkNjU5ODE4NDAyNzZmODBkNDU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwZDlmMmRjMjIwNzQ1NDViZTliOTUxNWU3MjAzMzhlLmJpbmRQb3B1cChwb3B1cF8xMjc0OWJlODgzMWE0MWNmOTI0ZDE2MWM2Nzg1MGI4NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmYxMjc3ZjgxZDY1NGZjM2EwOWEyZGMzYmMwNzI3Y2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4zMzMzMzMzMzMzMzAwMDEsIDE1NS41ODMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1MmFjMjYzMDQwNzQ3ZWQ5MTZkYzI3YmFjY2Y5NDg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1YmU3YjdiYWIxNzQyYjhiNGQ3M2ZkYzcwYzViNjE5ID0gJChgPGRpdiBpZD0iaHRtbF8wNWJlN2I3YmFiMTc0MmI4YjRkNzNmZGM3MGM1YjYxOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25hc2kxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5hc2lvaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNTJhYzI2MzA0MDc0N2VkOTE2ZGMyN2JhY2NmOTQ4NC5zZXRDb250ZW50KGh0bWxfMDViZTdiN2JhYjE3NDJiOGI0ZDczZmRjNzBjNWI2MTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmYxMjc3ZjgxZDY1NGZjM2EwOWEyZGMzYmMwNzI3Y2YuYmluZFBvcHVwKHBvcHVwX2M1MmFjMjYzMDQwNzQ3ZWQ5MTZkYzI3YmFjY2Y5NDg0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNmIxYzI4NmY3ZTg0NWRjOWE0MTg5MDQ3Mzk5MjAwZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjUsIDE0MC4xNjY2NjY2NjcwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1MDFiZjVlMjU1YTRjMDY4MjM1ZGRiYzMwNjNmNDE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxNTRmMWMyNWQxMDRmMDVhZTBiZTUzYjZhZDJhMWVmID0gJChgPGRpdiBpZD0iaHRtbF8wMTU0ZjFjMjVkMTA0ZjA1YWUwYmU1M2I2YWQyYTFlZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjMzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5pbWJvcmFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1MDFiZjVlMjU1YTRjMDY4MjM1ZGRiYzMwNjNmNDE1LnNldENvbnRlbnQoaHRtbF8wMTU0ZjFjMjVkMTA0ZjA1YWUwYmU1M2I2YWQyYTFlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNmIxYzI4NmY3ZTg0NWRjOWE0MTg5MDQ3Mzk5MjAwZS5iaW5kUG9wdXAocG9wdXBfODUwMWJmNWUyNTVhNGMwNjgyMzVkZGJjMzA2M2Y0MTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3MGViN2NjNDljYTQ0NzI4MDBhMmUyNTE5Yzg0OGEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMCwgLTc1LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NzBiNzYxZjNjNWQ0N2YwYjExYjZmM2VkOTkyMjM0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjQ2NzBkMDc3MmQ0ZmJiYTExMTAyOGExY2JlN2NjOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNWI0NjcwZDA3NzJkNGZiYmExMTEwMjhhMWNiZTdjYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9vbmVpMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5PbmVpZGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDcwYjc2MWYzYzVkNDdmMGIxMWI2ZjNlZDk5MjIzNGYuc2V0Q29udGVudChodG1sXzViNDY3MGQwNzcyZDRmYmJhMTExMDI4YTFjYmU3Y2M4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3MGViN2NjNDljYTQ0NzI4MDBhMmUyNTE5Yzg0OGEwLmJpbmRQb3B1cChwb3B1cF80NzBiNzYxZjNjNWQ0N2YwYjExYjZmM2VkOTkyMjM0ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTlmNmYwNDQ0MjUxNGRmNzgzYTgwOTRjY2E3ZDNlMWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjUsIC02Ni4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWIzNGZiNWE0YjExNGViMmE3MTc5ZGE0NjdjYWViYjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNlMDQwNzVkNWU0NDhlYWJjMTVmNGNlZDhhNmE5NWQgPSAkKGA8ZGl2IGlkPSJodG1sXzkzZTA0MDc1ZDVlNDQ4ZWFiYzE1ZjRjZWQ4YTZhOTVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZW5hcDEyMzUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGFuYXJlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiMzRmYjVhNGIxMTRlYjJhNzE3OWRhNDY3Y2FlYmI5LnNldENvbnRlbnQoaHRtbF85M2UwNDA3NWQ1ZTQ0OGVhYmMxNWY0Y2VkOGE2YTk1ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOWY2ZjA0NDQyNTE0ZGY3ODNhODA5NGNjYTdkM2UxYS5iaW5kUG9wdXAocG9wdXBfMWIzNGZiNWE0YjExNGViMmE3MTc5ZGE0NjdjYWViYjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjZGQ0OTliMzIwYTQ5M2FhMDdjZmRjYjEwYzRmMzk3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuMCwgMTQ1LjA4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzM0YjI0MmY2ZjhkNGI1ZjllMmMyN2JiYjhkMzdkYWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDZhM2EyNTQ5OWRiNGI4MThjNDIzYjhmNDlmMzNkNzMgPSAkKGA8ZGl2IGlkPSJodG1sX2Q2YTNhMjU0OTlkYjRiODE4YzQyM2I4ZjQ5ZjMzZDczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXdhaWFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzRiMjQyZjZmOGQ0YjVmOWUyYzI3YmJiOGQzN2RhZi5zZXRDb250ZW50KGh0bWxfZDZhM2EyNTQ5OWRiNGI4MThjNDIzYjhmNDlmMzNkNzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGNkZDQ5OWIzMjBhNDkzYWEwN2NmZGNiMTBjNGYzOTcuYmluZFBvcHVwKHBvcHVwXzczNGIyNDJmNmY4ZDRiNWY5ZTJjMjdiYmI4ZDM3ZGFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYTdiYTRmYjQwMTc0NDEwODVkZTVhYTUzNDY1MTk4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy03LjAsIC02Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzk1ZDY3YWM1OWYyNDhmNGJiMjQ4NTU0YmQ1MTU2NmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWY3OTZmZWM2ZTJhNGJjMjgxZGRkMTQxYjkyMTdjODQgPSAkKGA8ZGl2IGlkPSJodG1sX2FmNzk2ZmVjNmUyYTRiYzI4MWRkZDE0MWI5MjE3Yzg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGlyYTEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGlyYWjDozwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOTVkNjdhYzU5ZjI0OGY0YmIyNDg1NTRiZDUxNTY2Zi5zZXRDb250ZW50KGh0bWxfYWY3OTZmZWM2ZTJhNGJjMjgxZGRkMTQxYjkyMTdjODQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmE3YmE0ZmI0MDE3NDQxMDg1ZGU1YWE1MzQ2NTE5OGIuYmluZFBvcHVwKHBvcHVwX2M5NWQ2N2FjNTlmMjQ4ZjRiYjI0ODU1NGJkNTE1NjZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWVlODRhNWJmNTk0ZmI2YjA0ZjlkNzJjMmM3ZmEwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuODgzMzMzMzMzMzMsIDE1OC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5M2U3ODBhNGI5YzQ1MDNiNDM4ZmU0ZjFhZTNkNDVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0ZTQ2NGRhNTIxYTRhMWViYjdjNzkxZjZhZWExMDIwID0gJChgPGRpdiBpZD0iaHRtbF8wNGU0NjRkYTUyMWE0YTFlYmI3Yzc5MWY2YWVhMTAyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvaG4xMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvaG5wZWlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOTNlNzgwYTRiOWM0NTAzYjQzOGZlNGYxYWUzZDQ1ZS5zZXRDb250ZW50KGh0bWxfMDRlNDY0ZGE1MjFhNGExZWJiN2M3OTFmNmFlYTEwMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDllZTg0YTViZjU5NGZiNmIwNGY5ZDcyYzJjN2ZhMDguYmluZFBvcHVwKHBvcHVwX2U5M2U3ODBhNGI5YzQ1MDNiNDM4ZmU0ZjFhZTNkNDVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ODMwZjE4ZDZlN2M0NTcxYTY4YzdlMzkwNjUzZTY2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjU4MzMzMzMzMzMzLCAxNTIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0NjUzMWZmMDQ1YTRjOTA5NTNlZmFmNzE2YmE2ZmViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhMWM5MjgwNGYzYTQ3ZTQ4OGJhYTBiOWFhZmQyYzFiID0gJChgPGRpdiBpZD0iaHRtbF9kYTFjOTI4MDRmM2E0N2U0ODhiYWEwYjlhYWZkMmMxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UWFnZXQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0NjUzMWZmMDQ1YTRjOTA5NTNlZmFmNzE2YmE2ZmViLnNldENvbnRlbnQoaHRtbF9kYTFjOTI4MDRmM2E0N2U0ODhiYWEwYjlhYWZkMmMxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ODMwZjE4ZDZlN2M0NTcxYTY4YzdlMzkwNjUzZTY2OS5iaW5kUG9wdXAocG9wdXBfNjQ2NTMxZmYwNDVhNGM5MDk1M2VmYWY3MTZiYTZmZWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkNzU5YTNmYjk3MzRlYzY4YjYxOWFmNjFlNjhjY2Y0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI3LjExNjY2NjY2NjcwMDAwMiwgLTEwOS4zNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDNhMzkwNzMzNjU0MDM0YmEwMDg1YmE0NTZkNDM0NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZmIzY2Q5NTA1MWU0OTQ3OWU5YmI1ZjMwMTZlOWY3YSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2ZiM2NkOTUwNTFlNDk0NzllOWJiNWYzMDE2ZTlmN2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9yYXBhMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SYXBhbnVpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkM2EzOTA3MzM2NTQwMzRiYTAwODViYTQ1NmQ0MzQ0LnNldENvbnRlbnQoaHRtbF8zZmIzY2Q5NTA1MWU0OTQ3OWU5YmI1ZjMwMTZlOWY3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZDc1OWEzZmI5NzM0ZWM2OGI2MTlhZjYxZTY4Y2NmNC5iaW5kUG9wdXAocG9wdXBfNWQzYTM5MDczMzY1NDAzNGJhMDA4NWJhNDU2ZDQzNDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwMGYxOWVmMzg1ZTRhMDJhNTQ5MjhkYmU1N2U1ZGViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTguNzUsIDE0Ni41ODMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MyODkxMzkwOWY2NzRhYjhhZjgxZGM3YWYzMjJjZTQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkMjMyOTg3YmQ5NjQwMGNhOGFlNDZkY2RkNDQ0NzI5ID0gJChgPGRpdiBpZD0iaHRtbF9mZDIzMjk4N2JkOTY0MDBjYThhZTQ2ZGNkZDQ0NDcyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Jvcm8xMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJvcm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzI4OTEzOTA5ZjY3NGFiOGFmODFkYzdhZjMyMmNlNDUuc2V0Q29udGVudChodG1sX2ZkMjMyOTg3YmQ5NjQwMGNhOGFlNDZkY2RkNDQ0NzI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgwMGYxOWVmMzg1ZTRhMDJhNTQ5MjhkYmU1N2U1ZGViLmJpbmRQb3B1cChwb3B1cF9jMjg5MTM5MDlmNjc0YWI4YWY4MWRjN2FmMzIyY2U0NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTdlODk0OGNkZDM0NDVlMThlMzg4YTUzMDhhMDg4YjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4wLCAxNTUuMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Zjc0NDZkYWM2MDk0MzNiODBlMTI3Y2Q3MjA5MjFkNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mM2RlNWEyZTcxODY0ODUwYTU4MTM2ZGM1Yjg4NzdkMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjNkZTVhMmU3MTg2NDg1MGE1ODEzNmRjNWI4ODc3ZDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9yb3RvMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Sb3Rva2FzPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmNzQ0NmRhYzYwOTQzM2I4MGUxMjdjZDcyMDkyMWQ3LnNldENvbnRlbnQoaHRtbF9mM2RlNWEyZTcxODY0ODUwYTU4MTM2ZGM1Yjg4NzdkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lN2U4OTQ4Y2RkMzQ0NWUxOGUzODhhNTMwOGEwODhiNy5iaW5kUG9wdXAocG9wdXBfNGY3NDQ2ZGFjNjA5NDMzYjgwZTEyN2NkNzIwOTIxZDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlZTVkZmIyOTgzNzRkYmI4NzhkNDExZTMwM2FkMGQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC41LCAtNjQuNjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1NTE2ZmY1MGI2MzQ1OWQ5YzBmNjQzYWU0OWRjODQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU2MzY5YjJhYjhhNjRiYjA5OWFhZTRjZjdiZDhhZGE1ID0gJChgPGRpdiBpZD0iaHRtbF81NjM2OWIyYWI4YTY0YmIwOTlhYWU0Y2Y3YmQ4YWRhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2FudW1hPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNTUxNmZmNTBiNjM0NTlkOWMwZjY0M2FlNDlkYzg0MC5zZXRDb250ZW50KGh0bWxfNTYzNjliMmFiOGE2NGJiMDk5YWFlNGNmN2JkOGFkYTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWVlNWRmYjI5ODM3NGRiYjg3OGQ0MTFlMzAzYWQwZDkuYmluZFBvcHVwKHBvcHVwXzI1NTE2ZmY1MGI2MzQ1OWQ5YzBmNjQzYWU0OWRjODQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNGFmZDljOWQ4Yzc0NGVjYThkNTg2ZDg0MDY2MjVkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEuMzMzMzMzMzMzMzMsIDM0LjU4MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNjBkZTFhNjU2Nzc0OThhYWIyNDlkOTdjODBkNDZiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZjJjZGU0M2Q1NzI0ZDRjYWUwYzgxNDJlNTdmOGQwNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMmYyY2RlNDNkNTcyNGQ0Y2FlMGM4MTQyZTU3ZjhkMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNlYmVpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNjBkZTFhNjU2Nzc0OThhYWIyNDlkOTdjODBkNDZiZS5zZXRDb250ZW50KGh0bWxfMmYyY2RlNDNkNTcyNGQ0Y2FlMGM4MTQyZTU3ZjhkMDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjRhZmQ5YzlkOGM3NDRlY2E4ZDU4NmQ4NDA2NjI1ZDkuYmluZFBvcHVwKHBvcHVwX2M2MGRlMWE2NTY3NzQ5OGFhYjI0OWQ5N2M4MGQ0NmJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZTE4MjUyOWI0MmE0YzhjYTlmNzkzMWI4MTZiYTUzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjUsIC03Ny41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI5NTAwOWYzZDA4NGU1YWIxOWU2NzJhYTgzMzBkMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjk1NTQ0NWIyMzQ0NDNkMzg3M2ExM2Q0MmQ2NDNjNDQgPSAkKGA8ZGl2IGlkPSJodG1sX2Y5NTU0NDViMjM0NDQzZDM4NzNhMTNkNDJkNjQzYzQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2VuZTEyNjQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2VuZWNhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiOTUwMDlmM2QwODRlNWFiMTllNjcyYWE4MzMwZDFmLnNldENvbnRlbnQoaHRtbF9mOTU1NDQ1YjIzNDQ0M2QzODczYTEzZDQyZDY0M2M0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZTE4MjUyOWI0MmE0YzhjYTlmNzkzMWI4MTZiYTUzYi5iaW5kUG9wdXAocG9wdXBfNGI5NTAwOWYzZDA4NGU1YWIxOWU2NzJhYTgzMzBkMWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmNTM3YzUxNmZhODRjOWM5MTNkMGU5NDZlZWU1ZmRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuNTgzMzMzMzMzMzMsIDE0MC41ODMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc3MDllYjk2ZjJjNTQ5ZGM4Y2YyMDNhYjY3YWI2ZGIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkNWVjOGUyNmQ0ZDQ1NmE4NWE3YmU3Nzk3OGFjNWJlID0gJChgPGRpdiBpZD0iaHRtbF8yZDVlYzhlMjZkNGQ0NTZhODVhN2JlNzc5NzhhYzViZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjMyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNlbnRhbmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzcwOWViOTZmMmM1NDlkYzhjZjIwM2FiNjdhYjZkYjIuc2V0Q29udGVudChodG1sXzJkNWVjOGUyNmQ0ZDQ1NmE4NWE3YmU3Nzk3OGFjNWJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmNTM3YzUxNmZhODRjOWM5MTNkMGU5NDZlZWU1ZmRhLmJpbmRQb3B1cChwb3B1cF83NzA5ZWI5NmYyYzU0OWRjOGNmMjAzYWI2N2FiNmRiMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjhlMTA1Nzk4NTc3NDVlMWEyMjI2Mjk4NWE0M2YxZjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjUsIC02Mi44MzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmIyMTdjNDI2YThhNGUzMWI5OGJkMWI2MDhiODJkYjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzNiZGU1ZWYzY2RkNDFhYmE3ZGZlMzI3NTM0ZTMyZjYgPSAkKGA8ZGl2IGlkPSJodG1sX2MzYmRlNWVmM2NkZDQxYWJhN2RmZTMyNzUzNGUzMmY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaGlyaWFuYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmIyMTdjNDI2YThhNGUzMWI5OGJkMWI2MDhiODJkYjcuc2V0Q29udGVudChodG1sX2MzYmRlNWVmM2NkZDQxYWJhN2RmZTMyNzUzNGUzMmY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4ZTEwNTc5ODU3NzQ1ZTFhMjIyNjI5ODVhNDNmMWYzLmJpbmRQb3B1cChwb3B1cF9mYjIxN2M0MjZhOGE0ZTMxYjk4YmQxYjYwOGI4MmRiNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDZmY2IxZjdiNWY4NDNmM2EyN2M5ODdhYWYyMTI3OGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy43NSwgMTQ3LjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWU3NzE2MTRlNGVhNGM4NTlkNzg0NzFmZTM4ZDVhOTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDZiZjE0YzYyZDI2NGM1MWFjYWI5YThiZWQyYTFmMzEgPSAkKGA8ZGl2IGlkPSJodG1sX2Q2YmYxNGM2MmQyNjRjNTFhY2FiOWE4YmVkMmExZjMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3VlbjEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3VlbmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWU3NzE2MTRlNGVhNGM4NTlkNzg0NzFmZTM4ZDVhOTguc2V0Q29udGVudChodG1sX2Q2YmYxNGM2MmQyNjRjNTFhY2FiOWE4YmVkMmExZjMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q2ZmNiMWY3YjVmODQzZjNhMjdjOTg3YWFmMjEyNzhiLmJpbmRQb3B1cChwb3B1cF85ZTc3MTYxNGU0ZWE0Yzg1OWQ3ODQ3MWZlMzhkNWE5OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDIxMTNiMDY2NmI5NDdjMWE5NGVjMDkzNDBjNTExN2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOS4wLCAxMjYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1NzRkODg2YmUxNjQ3YzQ5NDk3OTE5NTk0NTFjZjdhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUyMWE4MzhhNjc1OTRiY2Y4YmQwNGIxOTdmOWUwZGE3ID0gJChgPGRpdiBpZD0iaHRtbF81MjFhODM4YTY3NTk0YmNmOGJkMDRiMTk3ZjllMGRhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGV0dW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1NzRkODg2YmUxNjQ3YzQ5NDk3OTE5NTk0NTFjZjdhLnNldENvbnRlbnQoaHRtbF81MjFhODM4YTY3NTk0YmNmOGJkMDRiMTk3ZjllMGRhNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMjExM2IwNjY2Yjk0N2MxYTk0ZWMwOTM0MGM1MTE3Yi5iaW5kUG9wdXAocG9wdXBfZDU3NGQ4ODZiZTE2NDdjNDk0OTc5MTk1OTQ1MWNmN2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2NTE3YjFhZWUzZTRkYjliMjU3YzNjZTJhYTQ5Y2M5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuNzE2NjY2NjY2NjcsIDE1MC44XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmEwNzEwNDk2ODMyNGE5ZGEwNjU0MGIwNjg0NjU1MDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2JmZmE4ZjNhNTE2NDkwYWE3Mzg5Y2JhMzc2MjM4ZGUgPSAkKGA8ZGl2IGlkPSJodG1sX2NiZmZhOGYzYTUxNjQ5MGFhNzM4OWNiYTM3NjIzOGRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGlnYTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGlnYWs8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmEwNzEwNDk2ODMyNGE5ZGEwNjU0MGIwNjg0NjU1MDUuc2V0Q29udGVudChodG1sX2NiZmZhOGYzYTUxNjQ5MGFhNzM4OWNiYTM3NjIzOGRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M2NTE3YjFhZWUzZTRkYjliMjU3YzNjZTJhYTQ5Y2M5LmJpbmRQb3B1cChwb3B1cF9iYTA3MTA0OTY4MzI0YTlkYTA2NTQwYjA2ODQ2NTUwNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTMzOTIzOTA3MmQ4NDE4N2JlZjNiZGYxNDA0MjJkYTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC4zMzMzMzMzMzMzMzAwMDEsIDE0Ni4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5YjI1MWFmOTE1NDQyMjU5NjRmYThmZDFjMDVhNTQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhMTQxNTE1ZDk4MTQ1NmJiZDgzYmM4MGJlZjNmYjViID0gJChgPGRpdiBpZD0iaHRtbF8zYTE0MTUxNWQ5ODE0NTZiYmQ4M2JjODBiZWYzZmI1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RvYXIxMjQ2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRvYXJpcGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTliMjUxYWY5MTU0NDIyNTk2NGZhOGZkMWMwNWE1NDQuc2V0Q29udGVudChodG1sXzNhMTQxNTE1ZDk4MTQ1NmJiZDgzYmM4MGJlZjNmYjViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EzMzkyMzkwNzJkODQxODdiZWYzYmRmMTQwNDIyZGE5LmJpbmRQb3B1cChwb3B1cF85OWIyNTFhZjkxNTQ0MjI1OTY0ZmE4ZmQxYzA1YTU0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDFlYTQxNDI2OGE5NDc5MjhjNGNjMDk4MTYxOTNiZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC44MzMzMzMzMzMzMywgMTQ1LjE2NjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjViYjVjMjA3NmFhNGI4MjgwMTdkMmU5ZWZiNWQ0YmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTllNzMyZDdhYzI2NDQ4Mjk5ZGQ1MzQ1NGVkZDk5NTkgPSAkKGA8ZGl2IGlkPSJodG1sX2U5ZTczMmQ3YWMyNjQ0ODI5OWRkNTM0NTRlZGQ5OTU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdXNhbjEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VXNhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNWJiNWMyMDc2YWE0YjgyODAxN2QyZTllZmI1ZDRiYy5zZXRDb250ZW50KGh0bWxfZTllNzMyZDdhYzI2NDQ4Mjk5ZGQ1MzQ1NGVkZDk5NTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDFlYTQxNDI2OGE5NDc5MjhjNGNjMDk4MTYxOTNiZDAuYmluZFBvcHVwKHBvcHVwX2Y1YmI1YzIwNzZhYTRiODI4MDE3ZDJlOWVmYjVkNGJjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNmIyMjhhYzFkYjA0YzdkYWUzN2M3MGZmZGJiNzk0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuMzMzMzMzMzMzMzMyOTk5OTcsIC03MC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyMzA2MjU5YzNjZDRhYWNiNjM2MTdlZWYyMWY1ZmJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxYzE0MzM1YWY2NjQ0M2Y4MGMyZWY0NDkwYmE4ODhhID0gJChgPGRpdiBpZD0iaHRtbF8zMWMxNDMzNWFmNjY0NDNmODBjMmVmNDQ5MGJhODg4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dhaW0xMjU1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldhaW1haGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDIzMDYyNTljM2NkNGFhY2I2MzYxN2VlZjIxZjVmYmYuc2V0Q29udGVudChodG1sXzMxYzE0MzM1YWY2NjQ0M2Y4MGMyZWY0NDkwYmE4ODhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U2YjIyOGFjMWRiMDRjN2RhZTM3YzcwZmZkYmI3OTQ5LmJpbmRQb3B1cChwb3B1cF8wMjMwNjI1OWMzY2Q0YWFjYjYzNjE3ZWVmMjFmNWZiZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGYzZWI4Y2YyZTM1NDg2MDk5ZGJiNTY2Y2RiYTc0MzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjMzMzMzMzMzMzMzMDAwMSwgLTYxLjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMGUxMjc0NzRmZDY0MzU0ODI0YmFmOWNhNmZlZGU2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZDUwNmQwMDBiZDI0ZGYyYjMwYTU0NmJhNjVkMTkxYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMGQ1MDZkMDAwYmQyNGRmMmIzMGE1NDZiYTY1ZDE5MWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93YXJhMTMwMyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XYXJhbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMGUxMjc0NzRmZDY0MzU0ODI0YmFmOWNhNmZlZGU2OS5zZXRDb250ZW50KGh0bWxfMGQ1MDZkMDAwYmQyNGRmMmIzMGE1NDZiYTY1ZDE5MWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGYzZWI4Y2YyZTM1NDg2MDk5ZGJiNTY2Y2RiYTc0MzYuYmluZFBvcHVwKHBvcHVwX2UwZTEyNzQ3NGZkNjQzNTQ4MjRiYWY5Y2E2ZmVkZTY5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNDM1NzAwYjU0Mjg0ZTRmOGVhMTM0ZjQ5ZmVkYmZkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjE2NjY2NjY2NjY3LCAxNDEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxMDJlNmZlYjliZTQwYmFiZDIzZWM3ZWEyYzE0OGQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3NjQ2NDliNmU3ZTRjNGRhYjc1NDY1YmIyMGNmODc2ID0gJChgPGRpdiBpZD0iaHRtbF8wNzY0NjQ5YjZlN2U0YzRkYWI3NTQ2NWJiMjBjZjg3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dhcmkxMjY2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldhcmlzPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxMDJlNmZlYjliZTQwYmFiZDIzZWM3ZWEyYzE0OGQwLnNldENvbnRlbnQoaHRtbF8wNzY0NjQ5YjZlN2U0YzRkYWI3NTQ2NWJiMjBjZjg3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNDM1NzAwYjU0Mjg0ZTRmOGVhMTM0ZjQ5ZmVkYmZkZC5iaW5kUG9wdXAocG9wdXBfOTEwMmU2ZmViOWJlNDBiYWJkMjNlYzdlYTJjMTQ4ZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0ZjYzZmNkNjgwMDRkZGY5NGM0ODk2MmQ5YjczMWI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjkxNjY2NjY2NjcwMDAwMSwgMTQxLjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2IwYzFiOWJlYzU5NGFhMjkwNWEwNDA3ZDNmNzlkYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjFhMmUxYmE2MmEwNDA1MDhiZWFjZGExM2FhNzg4ZmIgPSAkKGA8ZGl2IGlkPSJodG1sXzIxYTJlMWJhNjJhMDQwNTA4YmVhY2RhMTNhYTc4OGZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWsgTXVua2FuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjBjMWI5YmVjNTk0YWEyOTA1YTA0MDdkM2Y3OWRiOC5zZXRDb250ZW50KGh0bWxfMjFhMmUxYmE2MmEwNDA1MDhiZWFjZGExM2FhNzg4ZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTRmNjNmY2Q2ODAwNGRkZjk0YzQ4OTYyZDliNzMxYjYuYmluZFBvcHVwKHBvcHVwXzNiMGMxYjliZWM1OTRhYTI5MDVhMDQwN2QzZjc5ZGI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zODExMjU5YTc4NWY0YmVjOGQwYmEyNGRkZGZmYzY0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjMzMzMzMzMzMzMzMDAwMSwgMTQ1LjQxNjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODhkOTZiNTU3MTJkNDQ0M2FiMjJiNDU2NzFmZGIyNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzk2OTJjZDFmZTE5NGVhOGE5MGM5ZDAwMzQ3ZTkwZjMgPSAkKGA8ZGl2IGlkPSJodG1sXzM5NjkyY2QxZmUxOTRlYThhOTBjOWQwMDM0N2U5MGYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveWFnYTEyNjAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WWFnYXJpYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OGQ5NmI1NTcxMmQ0NDQzYWIyMmI0NTY3MWZkYjI3OS5zZXRDb250ZW50KGh0bWxfMzk2OTJjZDFmZTE5NGVhOGE5MGM5ZDAwMzQ3ZTkwZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzgxMTI1OWE3ODVmNGJlYzhkMGJhMjRkZGRmZmM2NGEuYmluZFBvcHVwKHBvcHVwXzg4ZDk2YjU1NzEyZDQ0NDNhYjIyYjQ1NjcxZmRiMjc5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80Njc5ZTVkYzQ0ZjM0MjRhODYxZmExNWMwODRhNDg4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjUsIC03Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGNkNzZhNDUwNGIzNDExMDlkOTcwMGNjYzQzOGEyMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDA0YjQ0NjkwMTFmNGY2MGI2NmM1OGZmZDgyMDliZTQgPSAkKGA8ZGl2IGlkPSJodG1sX2QwNGI0NDY5MDExZjRmNjBiNjZjNThmZmQ4MjA5YmU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveWFndTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WWFndWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGNkNzZhNDUwNGIzNDExMDlkOTcwMGNjYzQzOGEyMGUuc2V0Q29udGVudChodG1sX2QwNGI0NDY5MDExZjRmNjBiNjZjNThmZmQ4MjA5YmU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ2NzllNWRjNDRmMzQyNGE4NjFmYTE1YzA4NGE0ODgwLmJpbmRQb3B1cChwb3B1cF9kY2Q3NmE0NTA0YjM0MTEwOWQ5NzAwY2NjNDM4YTIwZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOThiM2ZjNDQ3MjNkNGUyNGEyNjZlNDI0ZWYxNGY3NDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOS41LCAxNDguNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3NTNmOGJlOTVlYjQ1ZjViYWNhNWM1NzkwM2I1NDRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2MmZmZjljMDRhYTQxNzk5NjhjNjgxMzM5YjI0ZGUwID0gJChgPGRpdiBpZD0iaHRtbF80NjJmZmY5YzA0YWE0MTc5OTY4YzY4MTMzOWIyNGRlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3lhcmUxMjQ4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPllhcmViYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzUzZjhiZTk1ZWI0NWY1YmFjYTVjNTc5MDNiNTQ0Yy5zZXRDb250ZW50KGh0bWxfNDYyZmZmOWMwNGFhNDE3OTk2OGM2ODEzMzliMjRkZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOThiM2ZjNDQ3MjNkNGUyNGEyNjZlNDI0ZWYxNGY3NDIuYmluZFBvcHVwKHBvcHVwXzQ3NTNmOGJlOTVlYjQ1ZjViYWNhNWM1NzkwM2I1NDRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZDY1NTBmMGI4MTA0NmYwOGM4YjU4OGIzNGZlNzViMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xLjc1LCAxMzYuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzZjM2U2NzMwZjU0Y2NiYWYyMGM0YzM1NDcxMThlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYWU0MWEyMTg4ZWI0NWE5OTA2ODBiZjIxMDAzNjc5MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZmFlNDFhMjE4OGViNDVhOTkwNjgwYmYyMTAwMzY3OTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTQ1NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZYXdhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI3NmMzZTY3MzBmNTRjY2JhZjIwYzRjMzU0NzExOGVhLnNldENvbnRlbnQoaHRtbF9mYWU0MWEyMTg4ZWI0NWE5OTA2ODBiZjIxMDAzNjc5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZDY1NTBmMGI4MTA0NmYwOGM4YjU4OGIzNGZlNzViMy5iaW5kUG9wdXAocG9wdXBfMjc2YzNlNjczMGY1NGNjYmFmMjBjNGMzNTQ3MTE4ZWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5MTIwNzc3ODc4NzQ2MGE5MTc2NjhiMDMxZjE4NTYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3LjAsIDE0NS43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwNTMxZGE0YmUwYzRiZDg5Zjk5MTZlZTdhZWJjZTA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4NGNjMDIwYmMzNzQ5NjNhYWE1ZTc1MWI2NjdhOTY2ID0gJChgPGRpdiBpZD0iaHRtbF9kODRjYzAyMGJjMzc0OTYzYWFhNWU3NTFiNjY3YTk2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WWlkaW55PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MDUzMWRhNGJlMGM0YmQ4OWY5OTE2ZWU3YWViY2UwOC5zZXRDb250ZW50KGh0bWxfZDg0Y2MwMjBiYzM3NDk2M2FhYTVlNzUxYjY2N2E5NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzkxMjA3Nzc4Nzg3NDYwYTkxNzY2OGIwMzFmMTg1NjMuYmluZFBvcHVwKHBvcHVwXzcwNTMxZGE0YmUwYzRiZDg5Zjk5MTZlZTdhZWJjZTA4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kODBhNjQ2NTZiMjU0NDlkODMwZWY5ZGJkNjQ4ZWRmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjY2NjY2NjY2NjY3LCAxNDMuNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOWJiNzQyMDY3YWI0OTYxOTdkZjgxZmNmZDNkZDg0NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYWNhZmJhZWRkMTk0N2FjOTViN2IyMWNkOGE0MDE4NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWFjYWZiYWVkZDE5NDdhYzk1YjdiMjFjZDhhNDAxODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95aW1hMTI0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZaW1hczwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOWJiNzQyMDY3YWI0OTYxOTdkZjgxZmNmZDNkZDg0Ny5zZXRDb250ZW50KGh0bWxfZWFjYWZiYWVkZDE5NDdhYzk1YjdiMjFjZDhhNDAxODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDgwYTY0NjU2YjI1NDQ5ZDgzMGVmOWRiZDY0OGVkZjkuYmluZFBvcHVwKHBvcHVwX2Q5YmI3NDIwNjdhYjQ5NjE5N2RmODFmY2ZkM2RkODQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MmQ0ZGE1ZTI3Y2U0NGJkOGJkZGFkMWM0NWMxNGQ2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yOS4wLCAtNjEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2NjcyNzg4MTYwMjQ2MWZiODQxNDc5ZWExODQ5NmYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJlY2U2OWYwNDliYzRkNGI4MzlhOGVkMDUzZTFlOGY4ID0gJChgPGRpdiBpZD0iaHRtbF8yZWNlNjlmMDQ5YmM0ZDRiODM5YThlZDA1M2UxZThmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWJpcMOzbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDY2NzI3ODgxNjAyNDYxZmI4NDE0NzllYTE4NDk2ZjAuc2V0Q29udGVudChodG1sXzJlY2U2OWYwNDliYzRkNGI4MzlhOGVkMDUzZTFlOGY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyZDRkYTVlMjdjZTQ0YmQ4YmRkYWQxYzQ1YzE0ZDY0LmJpbmRQb3B1cChwb3B1cF8wNjY3Mjc4ODE2MDI0NjFmYjg0MTQ3OWVhMTg0OTZmMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjg1MjRhYjY4NmU0NGE1MjlmNTA5NWRlMWZjNjM5ZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS41LCAtMTIxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZjYxZTFhYTM0ZWI0ZmZmOWY1MjNjZDcxNTUwYmRjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNDE2NzdkZDVhZGE0MWQ0YjAyZWZkOTYzMjY2OWJiNSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjQxNjc3ZGQ1YWRhNDFkNGIwMmVmZDk2MzI2NjliYjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hY2h1MTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BY2h1bWF3aTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZjYxZTFhYTM0ZWI0ZmZmOWY1MjNjZDcxNTUwYmRjOS5zZXRDb250ZW50KGh0bWxfYjQxNjc3ZGQ1YWRhNDFkNGIwMmVmZDk2MzI2NjliYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjg1MjRhYjY4NmU0NGE1MjlmNTA5NWRlMWZjNjM5ZDMuYmluZFBvcHVwKHBvcHVwXzBmNjFlMWFhMzRlYjRmZmY5ZjUyM2NkNzE1NTBiZGM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NGViNGI5YzM4NTU0ZGZiYmU4N2MzYjZjOWUxZjBmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjI1LCAxNDYuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NTIxMDM1YjU2ZTU0ZmM4ODJlYjlkMWIzYzcxZWU2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTg2YWY3YjYwMTI0MTZlYjM2YTk3NzMwOWVlM2M0NiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWE4NmFmN2I2MDEyNDE2ZWIzNmE5NzczMDllZTNjNDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHplMTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHplcmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDUyMTAzNWI1NmU1NGZjODgyZWI5ZDFiM2M3MWVlNjYuc2V0Q29udGVudChodG1sXzlhODZhZjdiNjAxMjQxNmViMzZhOTc3MzA5ZWUzYzQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0ZWI0YjljMzg1NTRkZmJiZTg3YzNiNmM5ZTFmMGYyLmJpbmRQb3B1cChwb3B1cF80NTIxMDM1YjU2ZTU0ZmM4ODJlYjlkMWIzYzcxZWU2NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmM0NTEzZjIyOGYwNGE3YjgyZDI2ODUyNDYzMTJkZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC42NjY2NjY2NjY2NywgMTQzLjMzMzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZmMjY1ZjFiNGNjNDk5MmJhYmI2ZTI2YzAzMzQ5NjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhhZjVmMjdmOThlNDVmNTk5MjU4NTQyNjlhNTM5ZmQgPSAkKGA8ZGl2IGlkPSJodG1sXzM4YWY1ZjI3Zjk4ZTQ1ZjU5OTI1ODU0MjY5YTUzOWZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWxhbTEyNDYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWxhbWJsYWs8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWZmMjY1ZjFiNGNjNDk5MmJhYmI2ZTI2YzAzMzQ5Njguc2V0Q29udGVudChodG1sXzM4YWY1ZjI3Zjk4ZTQ1ZjU5OTI1ODU0MjY5YTUzOWZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjNDUxM2YyMjhmMDRhN2I4MmQyNjg1MjQ2MzEyZGQ5LmJpbmRQb3B1cChwb3B1cF9hZmYyNjVmMWI0Y2M0OTkyYmFiYjZlMjZjMDMzNDk2OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2M0YWM2ZWU0YTkyNDg0ZDhjZjUwNTdjYzIwY2JhZGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4yNSwgMTQ1LjU4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzdmODUxMDA4OGIyNDBkMjhjYTU2NjNmNDY3MTQxZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDVhNmZlOTkyZmIzNGFkMDlmODY3Y2E3NjRjNjgwMTMgPSAkKGA8ZGl2IGlkPSJodG1sXzA1YTZmZTk5MmZiMzRhZDA5Zjg2N2NhNzY0YzY4MDEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYW1lbDEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QW1lbGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzdmODUxMDA4OGIyNDBkMjhjYTU2NjNmNDY3MTQxZWUuc2V0Q29udGVudChodG1sXzA1YTZmZTk5MmZiMzRhZDA5Zjg2N2NhNzY0YzY4MDEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdjNGFjNmVlNGE5MjQ4NGQ4Y2Y1MDU3Y2MyMGNiYWRlLmJpbmRQb3B1cChwb3B1cF83N2Y4NTEwMDg4YjI0MGQyOGNhNTY2M2Y0NjcxNDFlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjc1NTcxODM3NjZkNDQ3MTg4ZjhhYTM4MDdkNzNmOGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy40NjY2NjY2NjY2NywgMTQzLjE2NjY2NjY2NzAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzEwMTdjMDIzY2VmNDYwNTg4YjgyZjM1M2Y5OThlNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGRiNjJkNGZiOTMyNDQ1NmI3ZmI3MGZhMDU5MzdmZDYgPSAkKGA8ZGl2IGlkPSJodG1sXzRkYjYyZDRmYjkzMjQ0NTZiN2ZiNzBmYTA1OTM3ZmQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BcmFwZXNoIChNb3VudGFpbik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxMDE3YzAyM2NlZjQ2MDU4OGI4MmYzNTNmOTk4ZTYzLnNldENvbnRlbnQoaHRtbF80ZGI2MmQ0ZmI5MzI0NDU2YjdmYjcwZmEwNTkzN2ZkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNzU1NzE4Mzc2NmQ0NDcxODhmOGFhMzgwN2Q3M2Y4Yy5iaW5kUG9wdXAocG9wdXBfNzEwMTdjMDIzY2VmNDYwNTg4YjgyZjM1M2Y5OThlNjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0NTQ3MjRjMTUxMDQ4M2RiNjYyN2ZiNDUwOWZmMzc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuMCwgMTAwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYmZkMjkzNmU0OWI0NWMxYjczMGRjZjdlYmQwOWQ4NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OTE5ZTY0MzhmNTM0MGRkYmI0ZDRjNGM5NGU4NjliNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzkxOWU2NDM4ZjUzNDBkZGJiNGQ0YzRjOTRlODY5YjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iYWlpMTI1MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CYWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmJmZDI5MzZlNDliNDVjMWI3MzBkY2Y3ZWJkMDlkODUuc2V0Q29udGVudChodG1sXzc5MTllNjQzOGY1MzQwZGRiYjRkNGM0Yzk0ZTg2OWI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc0NTQ3MjRjMTUxMDQ4M2RiNjYyN2ZiNDUwOWZmMzc5LmJpbmRQb3B1cChwb3B1cF9mYmZkMjkzNmU0OWI0NWMxYjczMGRjZjdlYmQwOWQ4NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjYzNjI1NTRmYWE3NGQwYTg2MWJhOWUyMWEzMjJkMzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuMCwgLTU1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNWFmYTA1NTY5NjU0YjU4YmI1YjIyYzA2MTgxMGJmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NGZiN2JmODQ2YjM0MGEyYWJlZTA1MDk2MjlhZTdhYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzRmYjdiZjg0NmIzNDBhMmFiZWUwNTA5NjI5YWU3YWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iYWthMTI3NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CYWthaXLDrTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNWFmYTA1NTY5NjU0YjU4YmI1YjIyYzA2MTgxMGJmNC5zZXRDb250ZW50KGh0bWxfNzRmYjdiZjg0NmIzNDBhMmFiZWUwNTA5NjI5YWU3YWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjYzNjI1NTRmYWE3NGQwYTg2MWJhOWUyMWEzMjJkMzkuYmluZFBvcHVwKHBvcHVwX2M1YWZhMDU1Njk2NTRiNThiYjViMjJjMDYxODEwYmY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMzQ1MjRiYmQ1NTE0Nzg2YWNmMDk0MmRmMjhjYzUzMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi41ODMzMzMzMzMzLCAxMjIuOTE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjI3YzVkOTkxZGM2NDdhMzg1MmNhNmYxZDZlMzUxNDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQ3YmQ4MTdkNDU3NGFhYTlhZGQ1NzBhODU5MmM0MTggPSAkKGA8ZGl2IGlkPSJodG1sXzVkN2JkODE3ZDQ1NzRhYWE5YWRkNTcwYTg1OTJjNDE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYmFyZDEyNTUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QmFyZGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjI3YzVkOTkxZGM2NDdhMzg1MmNhNmYxZDZlMzUxNDcuc2V0Q29udGVudChodG1sXzVkN2JkODE3ZDQ1NzRhYWE5YWRkNTcwYTg1OTJjNDE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QzNDUyNGJiZDU1MTQ3ODZhY2YwOTQyZGYyOGNjNTMxLmJpbmRQb3B1cChwb3B1cF9iMjdjNWQ5OTFkYzY0N2EzODUyY2E2ZjFkNmUzNTE0NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTdlZThiYWNkYjFhNDdkYzgxYWQ2ZThjMGE2OTRlNjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4wLCAyLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMDU5OWQxN2JmZDU0YmQ3OTdjOWFhMmQ0ZTkyM2FiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MzBkM2UzY2ZiOTg0NTUwOWZjNWZhMzc5YWYxOTNmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzMwZDNlM2NmYjk4NDU1MDlmYzVmYTM3OWFmMTkzZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhcmliYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzA1OTlkMTdiZmQ1NGJkNzk3YzlhYTJkNGU5MjNhYjcuc2V0Q29udGVudChodG1sXzczMGQzZTNjZmI5ODQ1NTA5ZmM1ZmEzNzlhZjE5M2Y4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E3ZWU4YmFjZGIxYTQ3ZGM4MWFkNmU4YzBhNjk0ZTYzLmJpbmRQb3B1cChwb3B1cF9jMDU5OWQxN2JmZDU0YmQ3OTdjOWFhMmQ0ZTkyM2FiNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGQ0ZWU3NjY5ZTBlNGFiMjljNjFhMmMzZmIwNTk5NTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjI1LCA5OC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcyZmVmZjlkYjllNjQzNTJiMzZhYTQ0YjAyNjVjMmM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmN2I2Yjc5NTJiODRmMzA4MGYwZTc2MzE2ZWE3MDVlID0gJChgPGRpdiBpZD0iaHRtbF8wZjdiNmI3OTUyYjg0ZjMwODBmMGU3NjMxNmVhNzA1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmF0YWsgKEthcm8pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MmZlZmY5ZGI5ZTY0MzUyYjM2YWE0NGIwMjY1YzJjOC5zZXRDb250ZW50KGh0bWxfMGY3YjZiNzk1MmI4NGYzMDgwZjBlNzYzMTZlYTcwNWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGQ0ZWU3NjY5ZTBlNGFiMjljNjFhMmMzZmIwNTk5NTUuYmluZFBvcHVwKHBvcHVwXzcyZmVmZjlkYjllNjQzNTJiMzZhYTQ0YjAyNjVjMmM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NTYwYWRkZjJiZmY0Y2M0YTBiYWJhMmY4MjFmN2E0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuNSwgOTkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0ZTIxZDVkZWVjYjQ1Y2FiZmY3NThlNjJiOTMzNGI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg2OTI4NGIxNzI3YjQ0ZTJiOTYxMjA4MDU2MGU0M2YxID0gJChgPGRpdiBpZD0iaHRtbF84NjkyODRiMTcyN2I0NGUyYjk2MTIwODA1NjBlNDNmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmF0YWsgKFRvYmEpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NGUyMWQ1ZGVlY2I0NWNhYmZmNzU4ZTYyYjkzMzRiOS5zZXRDb250ZW50KGh0bWxfODY5Mjg0YjE3MjdiNDRlMmI5NjEyMDgwNTYwZTQzZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzU2MGFkZGYyYmZmNGNjNGEwYmFiYTJmODIxZjdhNDkuYmluZFBvcHVwKHBvcHVwXzQ0ZTIxZDVkZWVjYjQ1Y2FiZmY3NThlNjJiOTMzNGI5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Y2E4MzYwYzZhMGQ0YWVhYTNjN2Y5MWE4MTlmMzkxZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjkxNjY2NjY2NjY3LCAxNC4wODMzMzMzMzMyOTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMmU4MjdjZDkyMzg0YWJhOTg0YjA0OTU2ZjllNTgzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYTQxZGU1ZjUxMTc0NDU5YmJmYTFhNTMyYTI2NzRkNiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2E0MWRlNWY1MTE3NDQ1OWJiZmExYTUzMmEyNjc0ZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iZWVtMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CZWVtYmU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzJlODI3Y2Q5MjM4NGFiYTk4NGIwNDk1NmY5ZTU4M2Uuc2V0Q29udGVudChodG1sXzNhNDFkZTVmNTExNzQ0NTliYmZhMWE1MzJhMjY3NGQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZjYTgzNjBjNmEwZDRhZWFhM2M3ZjkxYTgxOWYzOTFlLmJpbmRQb3B1cChwb3B1cF8zMmU4MjdjZDkyMzg0YWJhOTg0YjA0OTU2ZjllNTgzZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTg5OTgxMjBlMzZlNGVlYjhjNjQ0YWEyZTNmNzQ2MzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS41LCAtMC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmJkYzIzM2JjOGU1NDMzY2JiMzUwMGQ5NGE0ZDU0NTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGU4ZGJlY2Q4ODc2NDE5NTg3NmI2ZTYzOThmOWQwOTMgPSAkKGA8ZGl2IGlkPSJodG1sXzhlOGRiZWNkODg3NjQxOTU4NzZiNmU2Mzk4ZjlkMDkzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYmlzYTEyNjQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QmlzYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYmRjMjMzYmM4ZTU0MzNjYmIzNTAwZDk0YTRkNTQ1NC5zZXRDb250ZW50KGh0bWxfOGU4ZGJlY2Q4ODc2NDE5NTg3NmI2ZTYzOThmOWQwOTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTg5OTgxMjBlMzZlNGVlYjhjNjQ0YWEyZTNmNzQ2MzQuYmluZFBvcHVwKHBvcHVwX2JiZGMyMzNiYzhlNTQzM2NiYjM1MDBkOTRhNGQ1NDU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMjhhMjc2MTI5MTE0OTJhYjQ3MmI4NDEwNWRkMDUwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI2LjgzMzMzMzMzMzMsIDkyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZDg2Mjc5N2ZjNjY0YzlhOWNiZTUwMWE1YWMwYmIyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZmJlZjFkN2Y2NmE0MWZkYTMxYmE0Yzg4MmE3ZjNhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNWZiZWYxZDdmNjZhNDFmZGEzMWJhNGM4ODJhN2YzYTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJvZG88L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlkODYyNzk3ZmM2NjRjOWE5Y2JlNTAxYTVhYzBiYjI1LnNldENvbnRlbnQoaHRtbF81ZmJlZjFkN2Y2NmE0MWZkYTMxYmE0Yzg4MmE3ZjNhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMjhhMjc2MTI5MTE0OTJhYjQ3MmI4NDEwNWRkMDUwZC5iaW5kUG9wdXAocG9wdXBfOWQ4NjI3OTdmYzY2NGM5YTljYmU1MDFhNWFjMGJiMjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmNDQzNjA3MDk3MjQ0ZGNhYzJiYjUxYmJhNDhjZjBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS40MTY2NjY2NjY2Njk5OTksIC04My4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODg2NThhMjY4ZjBlNDJiODk0Nzc4ZWYzNzJlNjljZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGE2NzM3YTIyMjc4NDZjY2I2OTA4YzdiM2JhYmU3YmUgPSAkKGA8ZGl2IGlkPSJodG1sXzRhNjczN2EyMjI3ODQ2Y2NiNjkwOGM3YjNiYWJlN2JlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnJpYjEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnJpYnJpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4NjU4YTI2OGYwZTQyYjg5NDc3OGVmMzcyZTY5Y2VlLnNldENvbnRlbnQoaHRtbF80YTY3MzdhMjIyNzg0NmNjYjY5MDhjN2IzYmFiZTdiZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZjQ0MzYwNzA5NzI0NGRjYWMyYmI1MWJiYTQ4Y2YwZC5iaW5kUG9wdXAocG9wdXBfODg2NThhMjY4ZjBlNDJiODk0Nzc4ZWYzNzJlNjljZWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmNjkwZGVhM2YyMzRiYTliZTE0NzQxMDk1ZDhkMzE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjI1LCAxMzQuNTgzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YzEwOGM1MmE5YTA0NTgwODIxZDkwNzA5YjZlMGI1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZThhNmZiMGZkYWY0NmE3ODllNGI3MWU5NDMxNmZhMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNmU4YTZmYjBmZGFmNDZhNzg5ZTRiNzFlOTQzMTZmYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9idXJhMTI2NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CdXJhcnJhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjMTA4YzUyYTlhMDQ1ODA4MjFkOTA3MDliNmUwYjVlLnNldENvbnRlbnQoaHRtbF82ZThhNmZiMGZkYWY0NmE3ODllNGI3MWU5NDMxNmZhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZjY5MGRlYTNmMjM0YmE5YmUxNDc0MTA5NWQ4ZDMxNy5iaW5kUG9wdXAocG9wdXBfNWMxMDhjNTJhOWEwNDU4MDgyMWQ5MDcwOWI2ZTBiNWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkNjMyMGRiNDg2ODRhOTM4ZGZkNjIyYjNjZmExYWQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjAsIC03NC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTBiZGUxZTY4YjczNGU0Njg5OGZkMWJiMDBmYWFkYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTA4MDY2NzYzNjIxNDM3ZDk1NTI2NjU2ZjM0ZTQzMWIgPSAkKGA8ZGl2IGlkPSJodG1sXzkwODA2Njc2MzYyMTQzN2Q5NTUyNjY1NmYzNGU0MzFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYW1wYSAoQXhpbmluY2EpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGJkZTFlNjhiNzM0ZTQ2ODk4ZmQxYmIwMGZhYWRiNS5zZXRDb250ZW50KGh0bWxfOTA4MDY2NzYzNjIxNDM3ZDk1NTI2NjU2ZjM0ZTQzMWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWQ2MzIwZGI0ODY4NGE5MzhkZmQ2MjJiM2NmYTFhZDQuYmluZFBvcHVwKHBvcHVwXzUwYmRlMWU2OGI3MzRlNDY4OThmZDFiYjAwZmFhZGI1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODBhNDlkNjdmYzY0NTEyYjc5NjFkNDQ4YjE2NjdhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuNSwgLTU2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTdhY2Q4NDVkMGU0YTllOTQ3NmRlNTdhZDFiZTFlOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83M2MzOWRlNGU0ZDI0MTNmYjM1Zjc4MzU4NDA0NTI0MCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzNjMzlkZTRlNGQyNDEzZmIzNWY3ODM1ODQwNDUyNDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcmliPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYTdhY2Q4NDVkMGU0YTllOTQ3NmRlNTdhZDFiZTFlOS5zZXRDb250ZW50KGh0bWxfNzNjMzlkZTRlNGQyNDEzZmIzNWY3ODM1ODQwNDUyNDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDgwYTQ5ZDY3ZmM2NDUxMmI3OTYxZDQ0OGIxNjY3YWUuYmluZFBvcHVwKHBvcHVwX2VhN2FjZDg0NWQwZTRhOWU5NDc2ZGU1N2FkMWJlMWU5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjc3MTExYzgxNDM0N2U5YWI0Y2M2ZDI0Y2RhMGM4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy41LCAtNjUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5Mzg3NmFmMDZhYTQ1NDRhMTU3ZGFhNzA4MDUzOTMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc3MTI3ZTgzOWNiNTQyODg4MGMxNzhkMWVkNGJiNDcwID0gJChgPGRpdiBpZD0iaHRtbF83NzEyN2U4MzljYjU0Mjg4ODBjMTc4ZDFlZDRiYjQ3MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2F5dXZhdmE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5Mzg3NmFmMDZhYTQ1NDRhMTU3ZGFhNzA4MDUzOTMwLnNldENvbnRlbnQoaHRtbF83NzEyN2U4MzljYjU0Mjg4ODBjMTc4ZDFlZDRiYjQ3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMjc3MTExYzgxNDM0N2U5YWI0Y2M2ZDI0Y2RhMGM4Zi5iaW5kUG9wdXAocG9wdXBfMjkzODc2YWYwNmFhNDU0NGExNTdkYWE3MDgwNTM5MzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5ZmU4ZWI3NTE3NDQ1NDU4MjM2MTM0M2E5NWVkZmJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTYuMjUsIC05Ny4zMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzk0NTMxZjdlYzgzNDk5NTg1OGI2YjJlMjgwMzJiN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTJkYTA3NWNmNmZiNDlkMzg4ZGRiYzg1ZTRlOGQyY2YgPSAkKGA8ZGl2IGlkPSJodG1sXzkyZGEwNzVjZjZmYjQ5ZDM4OGRkYmM4NWU0ZThkMmNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGF0aW5vIChTaWVycmEgT2NjaWRlbnRhbCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5NDUzMWY3ZWM4MzQ5OTU4NThiNmIyZTI4MDMyYjdlLnNldENvbnRlbnQoaHRtbF85MmRhMDc1Y2Y2ZmI0OWQzODhkZGJjODVlNGU4ZDJjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OWZlOGViNzUxNzQ0NTQ1ODIzNjEzNDNhOTVlZGZiZC5iaW5kUG9wdXAocG9wdXBfNzk0NTMxZjdlYzgzNDk5NTg1OGI2YjJlMjgwMzJiN2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YzOTY2ZmU4ZjBmNzQ3MGY5MmQyOTg4ZDhmZDFmN2Y5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMCwgLTg4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDlmZDRmNzcyYjg0MjAyYTI2YWVjNjg0NjE3YjIyZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTk2ZDZiNGRkY2E0NjRkYmEzYzY3ODY4YWFlODFlMCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWE5NmQ2YjRkZGNhNDY0ZGJhM2M2Nzg2OGFhZTgxZTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jaGljMTI3MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DaGlja2FzYXc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQ5ZmQ0Zjc3MmI4NDIwMmEyNmFlYzY4NDYxN2IyMmQuc2V0Q29udGVudChodG1sXzlhOTZkNmI0ZGRjYTQ2NGRiYTNjNjc4NjhhYWU4MWUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YzOTY2ZmU4ZjBmNzQ3MGY5MmQyOTg4ZDhmZDFmN2Y5LmJpbmRQb3B1cChwb3B1cF9kZDlmZDRmNzcyYjg0MjAyYTI2YWVjNjg0NjE3YjIyZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjQ1ZjMyYzE0NWNmNGNjMjlhMGNhN2IwNmEwZDI4OTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Ny4wLCAtMTczLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Njg5ZDg4NGViMTU0MzA3YjgxMzE0MGJmMzZiYzMxZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NjRlNGRiZTJlMGU0MGY1OWUxMTcyNWFmOWExNWQzYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDY0ZTRkYmUyZTBlNDBmNTllMTE3MjVhZjlhMTVkM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jaHVrMTI3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DaHVrY2hpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2ODlkODg0ZWIxNTQzMDdiODEzMTQwYmYzNmJjMzFmLnNldENvbnRlbnQoaHRtbF80NjRlNGRiZTJlMGU0MGY1OWUxMTcyNWFmOWExNWQzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNDVmMzJjMTQ1Y2Y0Y2MyOWEwY2E3YjA2YTBkMjg5My5iaW5kUG9wdXAocG9wdXBfODY4OWQ4ODRlYjE1NDMwN2I4MTMxNDBiZjM2YmMzMWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjY2RjMzBmNzUzNjRkMzdiM2U0YTYyZjY0NGYwYzdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMy4wLCAtNzcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2NWE1MmRmNzM5ZDRhOTJiMzE0ODZmMDdlMDQxYWExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAwOWUzYmVlMGUwNTQ5Y2E4NWM2OWY1MTczYzY3Njc1ID0gJChgPGRpdiBpZD0iaHRtbF8wMDllM2JlZTBlMDU0OWNhODVjNjlmNTE3M2M2NzY3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RXBlbmEgUGVkZWU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2NWE1MmRmNzM5ZDRhOTJiMzE0ODZmMDdlMDQxYWExLnNldENvbnRlbnQoaHRtbF8wMDllM2JlZTBlMDU0OWNhODVjNjlmNTE3M2M2NzY3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kY2NkYzMwZjc1MzY0ZDM3YjNlNGE2MmY2NDRmMGM3Yi5iaW5kUG9wdXAocG9wdXBfODY1YTUyZGY3MzlkNGE5MmIzMTQ4NmYwN2UwNDFhYTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwMjgzNzlmNmY1ZDQ1ODVhNWEyOTVkZGI5YTMwMzM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjguMCwgMTMwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NzI4NGE5YjM1Yjg0NDdjODY1MDdkNjc5Y2NjMjhjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMWRhZjk5OTk4OTk0MDkxYmEwMDI0Mzg2Zjg1ZGZlNSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzFkYWY5OTk5ODk5NDA5MWJhMDAyNDM4NmY4NWRmZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ldmVuMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5FdmVuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3Mjg0YTliMzViODQ0N2M4NjUwN2Q2NzljY2MyOGM5LnNldENvbnRlbnQoaHRtbF9jMWRhZjk5OTk4OTk0MDkxYmEwMDI0Mzg2Zjg1ZGZlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMDI4Mzc5ZjZmNWQ0NTg1YTVhMjk1ZGRiOWEzMDMzNC5iaW5kUG9wdXAocG9wdXBfNjcyODRhOWIzNWI4NDQ3Yzg2NTA3ZDY3OWNjYzI4YzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjNGNhMGUyMjJiODQ4MjJhOTM0NDE5MWUyODY4MGE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTYuMCwgMTI1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNDVkMjhkMDEwMmQ0NjIxOGU0ZjdhZjliNDNlNGFhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZTdjOGVhNWUyZmU0NDRkYmEwYzY2YjYyYzU1M2JkOCA9ICQoYDxkaXYgaWQ9Imh0bWxfOGU3YzhlYTVlMmZlNDQ0ZGJhMGM2NmI2MmM1NTNiZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ldmVuMTI1OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5FdmVua2k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQ1ZDI4ZDAxMDJkNDYyMThlNGY3YWY5YjQzZTRhYWQuc2V0Q29udGVudChodG1sXzhlN2M4ZWE1ZTJmZTQ0NGRiYTBjNjZiNjJjNTUzYmQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjNGNhMGUyMjJiODQ4MjJhOTM0NDE5MWUyODY4MGE4LmJpbmRQb3B1cChwb3B1cF8xNDVkMjhkMDEwMmQ0NjIxOGU0ZjdhZjliNDNlNGFhZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTFjYTI5MzhjYWNiNDI2MmExZWRhOTljNTcyNWY4YzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjI1LCAxMC4xNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTVlZDI1YTZjNWMyNDk3ZmI4ZjBiYTc5YzU5MDMwMGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWEwMDdkNzBhYTExNDA3OGE0ZDhmZDhhZDlmOTdkNmEgPSAkKGA8ZGl2IGlkPSJodG1sXzlhMDA3ZDcwYWExMTQwNzhhNGQ4ZmQ4YWQ5Zjk3ZDZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZmVmZTEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RmUnZmUnPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1ZWQyNWE2YzVjMjQ5N2ZiOGYwYmE3OWM1OTAzMDBiLnNldENvbnRlbnQoaHRtbF85YTAwN2Q3MGFhMTE0MDc4YTRkOGZkOGFkOWY5N2Q2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MWNhMjkzOGNhY2I0MjYyYTFlZGE5OWM1NzI1ZjhjMC5iaW5kUG9wdXAocG9wdXBfZTVlZDI1YTZjNWMyNDk3ZmI4ZjBiYTc5YzU5MDMwMGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkMjFiZGM5MGRhMTQyMTJhYWYzMWFiZTNkODQ4OGJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjIuMCwgMjUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkNWU3MGY3YjBjMTQ2ZmQ4MGMyNGU5ZWZlMjZkMGFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlOWYxYWI1NDYyNTQwYmE5Mzk2Y2QzNTgxMjBiZWQ2ID0gJChgPGRpdiBpZD0iaHRtbF81ZTlmMWFiNTQ2MjU0MGJhOTM5NmNkMzU4MTIwYmVkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Zpbm4xMzE4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZpbm5pc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2Q1ZTcwZjdiMGMxNDZmZDgwYzI0ZTllZmUyNmQwYWIuc2V0Q29udGVudChodG1sXzVlOWYxYWI1NDYyNTQwYmE5Mzk2Y2QzNTgxMjBiZWQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZkMjFiZGM5MGRhMTQyMTJhYWYzMWFiZTNkODQ4OGJlLmJpbmRQb3B1cChwb3B1cF8zZDVlNzBmN2IwYzE0NmZkODBjMjRlOWVmZTI2ZDBhYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWYyNDMxM2U1Yzg2NDg3NDg3NmY4OWNiMGYwZjdhMmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMy41LCAyNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTUyNjBkYTlmYjBmNDJkMThiMWE5ZmQ2MmM2ZWE1MWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzA0ZWVkZmE4MzFiNDMyMGFiMmNhMzljZjQ0MjY4MmEgPSAkKGA8ZGl2IGlkPSJodG1sXzcwNGVlZGZhODMxYjQzMjBhYjJjYTM5Y2Y0NDI2ODJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZnVycjEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RnVyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1MjYwZGE5ZmIwZjQyZDE4YjFhOWZkNjJjNmVhNTFjLnNldENvbnRlbnQoaHRtbF83MDRlZWRmYTgzMWI0MzIwYWIyY2EzOWNmNDQyNjgyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZjI0MzEzZTVjODY0ODc0ODc2Zjg5Y2IwZjBmN2EyZC5iaW5kUG9wdXAocG9wdXBfOTUyNjBkYTlmYjBmNDJkMThiMWE5ZmQ2MmM2ZWE1MWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhZWVmZTc3NDgwMTQ1NzhiNmYwMGI1N2VjNjBmNDk3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjUuNjY2NjY2NjY2NywgOTAuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5MGZjNDJhNmU4MTQwZmI4Y2VjMWRjYjY4ZDMwNjZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0MjQ2NmU3MmEyNDRiZmI4ODBjYTZiNDNkMTE0MDdiID0gJChgPGRpdiBpZD0iaHRtbF8xNDI0NjZlNzJhMjQ0YmZiODgwY2E2YjQzZDExNDA3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2dhcm8xMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdhcm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDkwZmM0MmE2ZTgxNDBmYjhjZWMxZGNiNjhkMzA2NmYuc2V0Q29udGVudChodG1sXzE0MjQ2NmU3MmEyNDRiZmI4ODBjYTZiNDNkMTE0MDdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VhZWVmZTc3NDgwMTQ1NzhiNmYwMGI1N2VjNjBmNDk3LmJpbmRQb3B1cChwb3B1cF9kOTBmYzQyYTZlODE0MGZiOGNlYzFkY2I2OGQzMDY2ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTM1MzMwMGIzZWUzNDEzZThhZGU5ZGRiNjVmOWE0MDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjAsIC02OS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2UzOGM4ZWM3NzQwNGNhY2EwYTE1NDVlZWEwYmFjYjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmZlM2QwOTJiZmI0NDM2MGI4NTc3YjE4MDRkYzJkZmMgPSAkKGA8ZGl2IGlkPSJodG1sX2JmZTNkMDkyYmZiNDQzNjBiODU3N2IxODA0ZGMyZGZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZ3VhaDEyNTUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R3VhaGlibzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZTM4YzhlYzc3NDA0Y2FjYTBhMTU0NWVlYTBiYWNiOS5zZXRDb250ZW50KGh0bWxfYmZlM2QwOTJiZmI0NDM2MGI4NTc3YjE4MDRkYzJkZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTM1MzMwMGIzZWUzNDEzZThhZGU5ZGRiNjVmOWE0MDguYmluZFBvcHVwKHBvcHVwXzdlMzhjOGVjNzc0MDRjYWNhMGExNTQ1ZWVhMGJhY2I5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjhmMzQ5MTQ4ODg0ODE0YmY5ZWJlZDU3MTkxOTMzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuNSwgLTc2LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZWE1ZDI0ODAwYzc0ZDE4OWU4MGUyYzNhODc2MThlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjU4YWFmMjU4MDU0Yjg3OWFjMjY3MDg2NzhjODUwYiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTY1OGFhZjI1ODA1NGI4NzlhYzI2NzA4Njc4Yzg1MGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ndWFtMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HdWFtYmlhbm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGVhNWQyNDgwMGM3NGQxODllODBlMmMzYTg3NjE4ZTQuc2V0Q29udGVudChodG1sX2E2NThhYWYyNTgwNTRiODc5YWMyNjcwODY3OGM4NTBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViOGYzNDkxNDg4ODQ4MTRiZjllYmVkNTcxOTE5MzM0LmJpbmRQb3B1cChwb3B1cF8wZWE1ZDI0ODAwYzc0ZDE4OWU4MGUyYzNhODc2MThlNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk2ZWIyMzA5MWZjNDc4NWJmY2M0MDc3MmRkYmU4YzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjYuMCwgLTU2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZTM3NTkyNDlkNzM0NTQwYjEyMGI2NmY0ZTEyMGZiMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODM5YjNhMzgzNDY0NjQzODE1ZTJkNTlkOGE3OThhZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTgzOWIzYTM4MzQ2NDY0MzgxNWUyZDU5ZDhhNzk4YWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkd1YXJhbsOtPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZTM3NTkyNDlkNzM0NTQwYjEyMGI2NmY0ZTEyMGZiMS5zZXRDb250ZW50KGh0bWxfMTgzOWIzYTM4MzQ2NDY0MzgxNWUyZDU5ZDhhNzk4YWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTk2ZWIyMzA5MWZjNDc4NWJmY2M0MDc3MmRkYmU4YzAuYmluZFBvcHVwKHBvcHVwXzRlMzc1OTI0OWQ3MzQ1NDBiMTIwYjY2ZjRlMTIwZmIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjRhZTBhNzc0YmE0MzRkODA0NDlhODhjYzU3NjhkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI1LjAsIDExNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWYxMzhhMjE4Yjk3NDE3ZTk4ZjFiM2E2YjZhY2MzYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzRmYzRjMzc3MjgwNDdmOGFiODM1NjBhZTk5Y2UxNzIgPSAkKGA8ZGl2IGlkPSJodG1sXzM0ZmM0YzM3NzI4MDQ3ZjhhYjgzNTYwYWU5OWNlMTcyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYWtrYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWYxMzhhMjE4Yjk3NDE3ZTk4ZjFiM2E2YjZhY2MzYTAuc2V0Q29udGVudChodG1sXzM0ZmM0YzM3NzI4MDQ3ZjhhYjgzNTYwYWU5OWNlMTcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyNGFlMGE3NzRiYTQzNGQ4MDQ0OWE4OGNjNTc2OGQxLmJpbmRQb3B1cChwb3B1cF85ZjEzOGEyMThiOTc0MTdlOThmMWIzYTZiNmFjYzNhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ZlYTk0YmM5ODgyNDUxOTk1MDZmOTc4NjAwNTQ1MjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS43NSwgMzUuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwOThjM2UxNGYzMjQ4NDlhYjBmODFiNDk3MDlmZTcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxNjRjYjQ1MDYzODQyZWNhNmMzM2ZhZDBkOWYyYjI2ID0gJChgPGRpdiBpZD0iaHRtbF8yMTY0Y2I0NTA2Mzg0MmVjYTZjMzNmYWQwZDlmMmIyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGVicmV3IChNb2Rlcm4gQXNoa2VuYXppYyk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwOThjM2UxNGYzMjQ4NDlhYjBmODFiNDk3MDlmZTcwLnNldENvbnRlbnQoaHRtbF8yMTY0Y2I0NTA2Mzg0MmVjYTZjMzNmYWQwZDlmMmIyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZmVhOTRiYzk4ODI0NTE5OTUwNmY5Nzg2MDA1NDUyNS5iaW5kUG9wdXAocG9wdXBfNjA5OGMzZTE0ZjMyNDg0OWFiMGY4MWI0OTcwOWZlNzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxMzA2NDBhYjQ5MDRkZGZiYjI0Yjc4NjViYjI1NjA5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuMCwgLTU5LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YWFjNTdhMjU1MjA0OGVkOGU4YmI1MWYxMWY4NzdiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTkwODhjMGIwODc0YTc0YmM5NDI3ZGFlYzRiNTg0OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzE5MDg4YzBiMDg3NGE3NGJjOTQyN2RhZWM0YjU4NDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhpeGthcnlhbmE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhYWM1N2EyNTUyMDQ4ZWQ4ZThiYjUxZjExZjg3N2I0LnNldENvbnRlbnQoaHRtbF83MTkwODhjMGIwODc0YTc0YmM5NDI3ZGFlYzRiNTg0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MTMwNjQwYWI0OTA0ZGRmYmIyNGI3ODY1YmIyNTYwOS5iaW5kUG9wdXAocG9wdXBfN2FhYzU3YTI1NTIwNDhlZDhlOGJiNTFmMTFmODc3YjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2YzA3YWY5YWIxMTQ2MzNiYTBlODZjNDFhNTdhOWRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuMCwgLTczLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMGE4MWQxODY4MTM0MDJkOTIzNWQ5OGFmNDE0ZmI0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZWJkNGEyYzQ1MWE0NGFlOTkzN2YwNjc3Y2I1YjJhMyA9ICQoYDxkaXYgaWQ9Imh0bWxfOGViZDRhMmM0NTFhNDRhZTk5MzdmMDY3N2NiNWIyYTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1aXRvdG8gKE11cnVpKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTBhODFkMTg2ODEzNDAyZDkyMzVkOThhZjQxNGZiNGMuc2V0Q29udGVudChodG1sXzhlYmQ0YTJjNDUxYTQ0YWU5OTM3ZjA2NzdjYjViMmEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U2YzA3YWY5YWIxMTQ2MzNiYTBlODZjNDFhNTdhOWRiLmJpbmRQb3B1cChwb3B1cF8xMGE4MWQxODY4MTM0MDJkOTIzNWQ5OGFmNDE0ZmI0YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmJlOTNlMTc3NTg1NDRkMWI4NWE3NjFlNWU3M2U3NDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC42NjY2NjY2NjY3LCAtNzMuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNDg5OWM2NDc2NjU0NjgyODBjZDM5N2RjOTY1YWFmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYmIxYjFiN2ExM2M0YWE2YmViNjk2NWRkN2MxZTYxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmJiMWIxYjdhMTNjNGFhNmJlYjY5NjVkZDdjMWU2MTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pa2FhMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ja2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTQ4OTljNjQ3NjY1NDY4MjgwY2QzOTdkYzk2NWFhZmMuc2V0Q29udGVudChodG1sX2ZiYjFiMWI3YTEzYzRhYTZiZWI2OTY1ZGQ3YzFlNjEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiZTkzZTE3NzU4NTQ0ZDFiODVhNzYxZTVlNzNlNzQ3LmJpbmRQb3B1cChwb3B1cF9hNDg5OWM2NDc2NjU0NjgyODBjZDM5N2RjOTY1YWFmYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODQ1MGIxMzJhMjU0NGQxMThhZDVjOGU0NTQzYTdhYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy4wLCAxNDAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzOWVmNTNhYzYzNjRiYzU4Njg4NDMwZmE4YWQ3NWNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkxMmRmNmQ1YWJlZDRhNDhiYTBlYmY4ODViNTBhY2Q0ID0gJChgPGRpdiBpZD0iaHRtbF85MTJkZjZkNWFiZWQ0YTQ4YmEwZWJmODg1YjUwYWNkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkphcGFuZXNlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzOWVmNTNhYzYzNjRiYzU4Njg4NDMwZmE4YWQ3NWNiLnNldENvbnRlbnQoaHRtbF85MTJkZjZkNWFiZWQ0YTQ4YmEwZWJmODg1YjUwYWNkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NDUwYjEzMmEyNTQ0ZDExOGFkNWM4ZTQ1NDNhN2FhMC5iaW5kUG9wdXAocG9wdXBfNTM5ZWY1M2FjNjM2NGJjNTg2ODg0MzBmYThhZDc1Y2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmYThlNmVmMDc4YzQ5ZDg4ZTdiNTJmZmVmYjAyYWZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuNSwgLTc4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80N2M2OTljMjBjNmM0ODcwODU3ZWE0ZWI1OTUxMTcwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YjM1MTdhMzQ2MGE0YzE4OGJlZTUxM2RiNDY2M2Y1ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmIzNTE3YTM0NjBhNGMxODhiZWU1MTNkYjQ2NjNmNWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkppdmFybzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDdjNjk5YzIwYzZjNDg3MDg1N2VhNGViNTk1MTE3MDIuc2V0Q29udGVudChodG1sXzZiMzUxN2EzNDYwYTRjMTg4YmVlNTEzZGI0NjYzZjVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZmYThlNmVmMDc4YzQ5ZDg4ZTdiNTJmZmVmYjAyYWZjLmJpbmRQb3B1cChwb3B1cF80N2M2OTljMjBjNmM0ODcwODU3ZWE0ZWI1OTUxMTcwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzFiNDg3MTM2ZDU5NDBkM2FhNTJmZWE5NTA5NjllMDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTAuMTE2NjY2NjY2Njk5OTk5LCAxNDIuMTE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjU1ODhhYjU0YjU5NDQxNTkyZmU1OTMyMjJmOTYwOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDdiZmU3NTNjNzJhNDRkZWI2ZWRiMjQ3NGQ3YzM5ZWQgPSAkKGA8ZGl2IGlkPSJodG1sXzA3YmZlNzUzYzcyYTQ0ZGViNmVkYjI0NzRkN2MzOWVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FsYTEzNzciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FsYSBMYWdhdyBZYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNTU4OGFiNTRiNTk0NDE1OTJmZTU5MzIyMmY5NjA5NS5zZXRDb250ZW50KGh0bWxfMDdiZmU3NTNjNzJhNDRkZWI2ZWRiMjQ3NGQ3YzM5ZWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzFiNDg3MTM2ZDU5NDBkM2FhNTJmZWE5NTA5NjllMDIuYmluZFBvcHVwKHBvcHVwX2Y1NTg4YWI1NGI1OTQ0MTU5MmZlNTkzMjIyZjk2MDk1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMTdiZWUwODJjZDE0M2Q1ODE1ZTE5N2MzYWZiMTdmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjY2NjY2NjY2NjcsIC0xMjMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiMTcwNWIwYjMxZjQ4MTdiYzcwNGEwYmZjNzBjNGQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1YWY0OTlhZWNhZTQzOWE4YzZjYzMzZDgyZGI0Nzk1ID0gJChgPGRpdiBpZD0iaHRtbF8zNWFmNDk5YWVjYWU0MzlhOGM2Y2MzM2Q4MmRiNDc5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thcm8xMzA0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthcm9rPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiMTcwNWIwYjMxZjQ4MTdiYzcwNGEwYmZjNzBjNGQwLnNldENvbnRlbnQoaHRtbF8zNWFmNDk5YWVjYWU0MzlhOGM2Y2MzM2Q4MmRiNDc5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMTdiZWUwODJjZDE0M2Q1ODE1ZTE5N2MzYWZiMTdmNS5iaW5kUG9wdXAocG9wdXBfY2IxNzA1YjBiMzFmNDgxN2JjNzA0YTBiZmM3MGM0ZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwMmQyZmY1OTdlZDQ1YmFhYzliNjUyMWMzMzczY2E1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3LjA1LCAxMzkuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZmZTE5MzMyZGRlZjQyOWU4NmMzZGI2Y2Y3NWNjMWFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyZjhiMjFiMGMyOTQ2MGNiMzRlZDNjMWJmZjM1ZGQ4ID0gJChgPGRpdiBpZD0iaHRtbF84MmY4YjIxYjBjMjk0NjBjYjM0ZWQzYzFiZmYzNWRkOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2theWExMzE5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktheWFyZGlsZDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZmUxOTMzMmRkZWY0MjllODZjM2RiNmNmNzVjYzFhYi5zZXRDb250ZW50KGh0bWxfODJmOGIyMWIwYzI5NDYwY2IzNGVkM2MxYmZmMzVkZDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDAyZDJmZjU5N2VkNDViYWFjOWI2NTIxYzMzNzNjYTUuYmluZFBvcHVwKHBvcHVwX2ZmZTE5MzMyZGRlZjQyOWU4NmMzZGI2Y2Y3NWNjMWFiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYzI1YzBkOTJiYWY0MjA5ODM5MzlmM2VhMTIxNjliZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjI1LCAxMjMuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjY2MTFhMDU1OTY0YWU2OGE4ZjcyNmZhYzAyNjU2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMmNkZjAwNzExNTY0MmU3OGY2NTZlZmUyY2U4MTUxOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjJjZGYwMDcxMTU2NDJlNzhmNjU2ZWZlMmNlODE1MTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rZWRhMTI1MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LZWRhbmc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTI2NjExYTA1NTk2NGFlNjhhOGY3MjZmYWMwMjY1NmEuc2V0Q29udGVudChodG1sX2YyY2RmMDA3MTE1NjQyZTc4ZjY1NmVmZTJjZTgxNTE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNjMjVjMGQ5MmJhZjQyMDk4MzkzOWYzZWExMjE2OWJlLmJpbmRQb3B1cChwb3B1cF81MjY2MTFhMDU1OTY0YWU2OGE4ZjcyNmZhYzAyNjU2YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODM3Mjc5NDdmOTAxNDJhZjk3MmQwYzExOGYxNDJjODIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NC4wLCA4Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDkyZTg0NTAzODM1NDUxYWFhZWFjOTExOTM0YTY2YTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWJjMjY0NmVjZWYwNGZmNzllZTI5MTJlMzI1ZWQ0YjggPSAkKGA8ZGl2IGlkPSJodG1sXzliYzI2NDZlY2VmMDRmZjc5ZWUyOTEyZTMyNWVkNGI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2V0dDEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2V0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5MmU4NDUwMzgzNTQ1MWFhYWVhYzkxMTkzNGE2NmExLnNldENvbnRlbnQoaHRtbF85YmMyNjQ2ZWNlZjA0ZmY3OWVlMjkxMmUzMjVlZDRiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MzcyNzk0N2Y5MDE0MmFmOTcyZDBjMTE4ZjE0MmM4Mi5iaW5kUG9wdXAocG9wdXBfMDkyZTg0NTAzODM1NDUxYWFhZWFjOTExOTM0YTY2YTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3YmI5Y2VkMTYyMjQwNDY4MmVhMjA3NWRiNzAzOTVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuNSwgMTQzLjgzMzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjhmZWZlMjIwYTYxNDJkMzljZjNhMTZiMDkyNGFjYjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTBkYTE4OTU4ZTI3NDcwMmIwMWVlMDM0MDgyM2ZlYWUgPSAkKGA8ZGl2IGlkPSJodG1sX2EwZGExODk1OGUyNzQ3MDJiMDFlZTAzNDA4MjNmZWFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2V3YTEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2V3YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOGZlZmUyMjBhNjE0MmQzOWNmM2ExNmIwOTI0YWNiNy5zZXRDb250ZW50KGh0bWxfYTBkYTE4OTU4ZTI3NDcwMmIwMWVlMDM0MDgyM2ZlYWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjdiYjljZWQxNjIyNDA0NjgyZWEyMDc1ZGI3MDM5NWMuYmluZFBvcHVwKHBvcHVwX2Y4ZmVmZTIyMGE2MTQyZDM5Y2YzYTE2YjA5MjRhY2I3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNTUxNTBiNjM2ZDg0YWUyYjg2YjEyNDk0OGY0ZWU4OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY1LjAsIDY1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDFkNTJjNmYyYzc0NzgzOTM0ZGZiNDkzY2EyNTk4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMjBmOTFkOTc5M2Q0ZDRiOWQxMjIzZjE4ZTllYWQ5ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjIwZjkxZDk3OTNkNGQ0YjlkMTIyM2YxOGU5ZWFkOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktoYW50eTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQxZDUyYzZmMmM3NDc4MzkzNGRmYjQ5M2NhMjU5OGYuc2V0Q29udGVudChodG1sX2YyMGY5MWQ5NzkzZDRkNGI5ZDEyMjNmMThlOWVhZDllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA1NTE1MGI2MzZkODRhZTJiODZiMTI0OTQ4ZjRlZTg4LmJpbmRQb3B1cChwb3B1cF9lZDFkNTJjNmYyYzc0NzgzOTM0ZGZiNDkzY2EyNTk4ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2YzZDg2ZWU5MDAxNDM0NDljODhiYjMzYTNmYzM2YTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjUsIC0xMC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhZWQ2ZmRmNDRjYjQwNjhhYzk2MTViYzdlOTk2NzgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmM2VlNTk5ZmI3YTQ1MDI4YTZhODIzMmM5MDhlMDViID0gJChgPGRpdiBpZD0iaHRtbF9kZjNlZTU5OWZiN2E0NTAyOGE2YTgyMzJjOTA4ZTA1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2lzaSAoU291dGhlcm4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYWVkNmZkZjQ0Y2I0MDY4YWM5NjE1YmM3ZTk5Njc4MS5zZXRDb250ZW50KGh0bWxfZGYzZWU1OTlmYjdhNDUwMjhhNmE4MjMyYzkwOGUwNWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2YzZDg2ZWU5MDAxNDM0NDljODhiYjMzYTNmYzM2YTQuYmluZFBvcHVwKHBvcHVwX2ZhZWQ2ZmRmNDRjYjQwNjhhYzk2MTViYzdlOTk2NzgxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMWM2NmUzMzg2MDY0OGUxODNjYjUyOGM1MTZiZDBmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjI1LCAtMC45MTY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jY2IzZjY3Nzk2YTQ0MWRjYjM4ODk1YjE2YjE5MDhkMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNTVhYjAxYTJkYWY0ODk4OTc3ODY3MjY4OWRlNTVmMSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzU1YWIwMWEyZGFmNDg5ODk3Nzg2NzI2ODlkZTU1ZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktvcm9tZmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjYjNmNjc3OTZhNDQxZGNiMzg4OTViMTZiMTkwOGQyLnNldENvbnRlbnQoaHRtbF9jNTVhYjAxYTJkYWY0ODk4OTc3ODY3MjY4OWRlNTVmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMWM2NmUzMzg2MDY0OGUxODNjYjUyOGM1MTZiZDBmYi5iaW5kUG9wdXAocG9wdXBfY2NiM2Y2Nzc5NmE0NDFkY2IzODg5NWIxNmIxOTA4ZDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE0OGE0ODk5ZTQzOTQ5ODhiMjU3ODJhMjYxZGIzZTc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjEuMCwgMTY3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjBlMDllMTE0MzE0ODA4OGFlMDViNDQzNzFkMjRiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZTM2ZmYzY2NmZDc0YTM4YWZjOTdmMjg0ODA5ZDBhMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWUzNmZmM2NjZmQ3NGEzOGFmYzk3ZjI4NDgwOWQwYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb3J5MTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb3J5YWs8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmYwZTA5ZTExNDMxNDgwODhhZTA1YjQ0MzcxZDI0YmYuc2V0Q29udGVudChodG1sX2FlMzZmZjNjY2ZkNzRhMzhhZmM5N2YyODQ4MDlkMGEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE0OGE0ODk5ZTQzOTQ5ODhiMjU3ODJhMjYxZGIzZTc2LmJpbmRQb3B1cChwb3B1cF9mZjBlMDllMTE0MzE0ODA4OGFlMDViNDQzNzFkMjRiZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzBmYzQ1YTZiMGI5NGRlMWFiZDc5MzRkMDRjZjYwMTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy4wLCAtMy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFhYjM1MzFmYTliNDhkM2ExYTAxNWFmNWU4NGE4ZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmJhODU0MDViYzIzNGU3MWIyYzE5MGFjNTYwMTU0YzYgPSAkKGA8ZGl2IGlkPSJodG1sXzJiYTg1NDA1YmMyMzRlNzFiMmMxOTBhYzU2MDE1NGM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva295cjEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S295cmEgQ2hpaW5pPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhYWIzNTMxZmE5YjQ4ZDNhMWEwMTVhZjVlODRhOGZjLnNldENvbnRlbnQoaHRtbF8yYmE4NTQwNWJjMjM0ZTcxYjJjMTkwYWM1NjAxNTRjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMGZjNDVhNmIwYjk0ZGUxYWJkNzkzNGQwNGNmNjAxNS5iaW5kUG9wdXAocG9wdXBfOGFhYjM1MzFmYTliNDhkM2ExYTAxNWFmNWU4NGE4ZmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllOTYyYTlhMGQyNjRjYWM5YTRjNzAwYjgwM2Y4MGY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTYuMCwgMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjRkODU4OGE3YjA0NGRiMjk3OTlmMDM2MDNjOTk3ODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDNjZWRkMTBhNGYzNGY5NjhiM2M3YTJlYjY1Mjc5MzcgPSAkKGA8ZGl2IGlkPSJodG1sXzQzY2VkZDEwYTRmMzRmOTY4YjNjN2EyZWI2NTI3OTM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Lb3lyYWJvcm8gU2Vubmk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0ZDg1ODhhN2IwNDRkYjI5Nzk5ZjAzNjAzYzk5NzgxLnNldENvbnRlbnQoaHRtbF80M2NlZGQxMGE0ZjM0Zjk2OGIzYzdhMmViNjUyNzkzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZTk2MmE5YTBkMjY0Y2FjOWE0YzcwMGI4MDNmODBmOC5iaW5kUG9wdXAocG9wdXBfZjRkODU4OGE3YjA0NGRiMjk3OTlmMDM2MDNjOTk3ODEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhZjNlMjE4ZjAwNTQxNjVhNTIwNzcxNTEwYTMzODcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOC4wLCAtNzcuMzMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1MzNkNTQ4MTc5NjQ3NzE5YjE1ZTc5YTMxYzM1NGFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjNjY5MDEyMWVjNzRmMmE5YmNjMzBkMTk3OGUxZjdlID0gJChgPGRpdiBpZD0iaHRtbF9jYzY2OTAxMjFlYzc0ZjJhOWJjYzMwZDE5NzhlMWY3ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2t1bmExMjgwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkt1bmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTUzM2Q1NDgxNzk2NDc3MTliMTVlNzlhMzFjMzU0YWMuc2V0Q29udGVudChodG1sX2NjNjY5MDEyMWVjNzRmMmE5YmNjMzBkMTk3OGUxZjdlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhZjNlMjE4ZjAwNTQxNjVhNTIwNzcxNTEwYTMzODcyLmJpbmRQb3B1cChwb3B1cF9lNTMzZDU0ODE3OTY0NzcxOWIxNWU3OWEzMWMzNTRhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQ1NjI3M2MwZmIzNDg2MWI2ZGZjMGZlNGFmZjVkMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC4wLCAxNDYuODMzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTQxNzkwNjRhNzA0NTlkOTIwOGQ5ZDYwZDNkMTUwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80M2Y3NmI2YmFkMDE0M2E0OTJhODJkZjEwYjFiNTYxYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDNmNzZiNmJhZDAxNDNhNDkyYTgyZGYxMGIxYjU2MWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rdW5pMTI2NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LdW5pbWFpcGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDE0MTc5MDY0YTcwNDU5ZDkyMDhkOWQ2MGQzZDE1MDAuc2V0Q29udGVudChodG1sXzQzZjc2YjZiYWQwMTQzYTQ5MmE4MmRmMTBiMWI1NjFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0NTYyNzNjMGZiMzQ4NjFiNmRmYzBmZTRhZmY1ZDMwLmJpbmRQb3B1cChwb3B1cF9kMTQxNzkwNjRhNzA0NTlkOTIwOGQ5ZDYwZDNkMTUwMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGJiN2QzYmM5YWZjNDYzOWI0NDQzNTNmYTk0ZGY1ZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC45NSwgMTYxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MjQ1MDVhMmJiN2E0Y2EyYTZjNzFlMzc3NmNkMTAyZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lM2Y3ZGY2NDE2YzA0NjYwOGYyNjVhMGY2MjE2YjY2NCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTNmN2RmNjQxNmMwNDY2MDhmMjY1YTBmNjIxNmI2NjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rd2FpMTI0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ld2FpbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MjQ1MDVhMmJiN2E0Y2EyYTZjNzFlMzc3NmNkMTAyZi5zZXRDb250ZW50KGh0bWxfZTNmN2RmNjQxNmMwNDY2MDhmMjY1YTBmNjIxNmI2NjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGJiN2QzYmM5YWZjNDYzOWI0NDQzNTNmYTk0ZGY1ZDUuYmluZFBvcHVwKHBvcHVwXzcyNDUwNWEyYmI3YTRjYTJhNmM3MWUzNzc2Y2QxMDJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMTBiNWZiNGJmZjQ0ZGQ1YWMyMDYzNzZjMzY2ZDE5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuMTY2NjY2NjY2NjcsIDMzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZjEzNjNmYWYyYzI0NDdiOWM0MWU0Zjg4YjBmNjE1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTc4ZWJlMzcxNGY0MWE0ODRkMzk5NDRiMjFhNGNhYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTU3OGViZTM3MTRmNDFhNDg0ZDM5OTQ0YjIxYTRjYWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhbmdvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjEzNjNmYWYyYzI0NDdiOWM0MWU0Zjg4YjBmNjE1Ny5zZXRDb250ZW50KGh0bWxfZTU3OGViZTM3MTRmNDFhNDg0ZDM5OTQ0YjIxYTRjYWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjEwYjVmYjRiZmY0NGRkNWFjMjA2Mzc2YzM2NmQxOWMuYmluZFBvcHVwKHBvcHVwXzZmMTM2M2ZhZjJjMjQ0N2I5YzQxZTRmODhiMGY2MTU3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGM5NTQ1MGViMTM0NmFiOTdkZjQxNzg3NGE2ZTY5ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy05LjA4MzMzMzMzMzMzMDAwMSwgMTU5LjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZTQ3ODQ5OTZlNjY0M2VhYWJjZDVjYmFkNjI2MWQwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGEwYTQ2MjE3ZjM0YzIwYmFhMTUzNTI2YWRhOWE0NyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjRhMGE0NjIxN2YzNGMyMGJhYTE1MzUyNmFkYTlhNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sYXZ1MTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MYXZ1a2FsZXZlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlNDc4NDk5NmU2NjQzZWFhYmNkNWNiYWQ2MjYxZDAyLnNldENvbnRlbnQoaHRtbF82NGEwYTQ2MjE3ZjM0YzIwYmFhMTUzNTI2YWRhOWE0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kOGM5NTQ1MGViMTM0NmFiOTdkZjQxNzg3NGE2ZTY5ZS5iaW5kUG9wdXAocG9wdXBfZmU0Nzg0OTk2ZTY2NDNlYWFiY2Q1Y2JhZDYyNjFkMDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2ZWQwM2IyZDkxYjQwMmY5MDQ1NjFkMGMzYzUzNjU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE5LjQ1LCAxNjkuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNzA5NDVlMzA4Nzc0MjQ4YWE1YWZlMDRlNjdjNWQxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZDVjODZiOTU1ZjA0NjhiYjcyMmZmN2Y3NjZjNTIxYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMGQ1Yzg2Yjk1NWYwNDY4YmI3MjJmZjdmNzY2YzUyMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sZW5hMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MZW5ha2VsPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3MDk0NWUzMDg3NzQyNDhhYTVhZmUwNGU2N2M1ZDEyLnNldENvbnRlbnQoaHRtbF8wZDVjODZiOTU1ZjA0NjhiYjcyMmZmN2Y3NjZjNTIxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNmVkMDNiMmQ5MWI0MDJmOTA0NTYxZDBjM2M1MzY1Ny5iaW5kUG9wdXAocG9wdXBfMDcwOTQ1ZTMwODc3NDI0OGFhNWFmZTA0ZTY3YzVkMTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzYTdkNDNjZmEyMzRjY2ZiZGE3ZmQzMWVjOGZhODFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNTgzMzMzMzMzMzMwMDAxLCAxNDkuNjY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MzIzNjA5NzdhNWI0YzFmYjE2OTQ2Y2RhY2U1MDhlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZmUyOTc2OGFjYTU0NGRhYWExYzdiMmQ3NTFjM2ZiNCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWZlMjk3NjhhY2E1NDRkYWFhMWM3YjJkNzUxYzNmYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sdXNpMTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MdXNpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzMjM2MDk3N2E1YjRjMWZiMTY5NDZjZGFjZTUwOGUwLnNldENvbnRlbnQoaHRtbF85ZmUyOTc2OGFjYTU0NGRhYWExYzdiMmQ3NTFjM2ZiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yM2E3ZDQzY2ZhMjM0Y2NmYmRhN2ZkMzFlYzhmYTgxZC5iaW5kUG9wdXAocG9wdXBfNjMyMzYwOTc3YTViNGMxZmIxNjk0NmNkYWNlNTA4ZTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4MTIzOTljZGYwMzRkNzU5NmVjNTMwNDRlMTkyYWYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjAsIDIyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YjcyODA3OWExZTM0ZjUwOTIyZjNmMjZmZWFmNjU3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNDkxM2EzN2IzZDc0OTA3YjdjZTEyYjE4MzJlZTc1OSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjQ5MTNhMzdiM2Q3NDkwN2I3Y2UxMmIxODMyZWU3NTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sdXZhMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MdXZhbGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGI3MjgwNzlhMWUzNGY1MDkyMmYzZjI2ZmVhZjY1N2Quc2V0Q29udGVudChodG1sX2I0OTEzYTM3YjNkNzQ5MDdiN2NlMTJiMTgzMmVlNzU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4MTIzOTljZGYwMzRkNzU5NmVjNTMwNDRlMTkyYWYzLmJpbmRQb3B1cChwb3B1cF84YjcyODA3OWExZTM0ZjUwOTIyZjNmMjZmZWFmNjU3ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGYxOTdkMDA3OGEyNGQzNzg2YjIwNmRmMjY1ODc4MmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4wLCAtMTIwLjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzZjU1MmNmYmRlNTQ5OTZhYjE0MjVlZDMwN2Q3NzhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjZDZhNWFlY2RkOTQ3NzU5ODkyZWUwNGJhMjFlMDQzID0gJChgPGRpdiBpZD0iaHRtbF83Y2Q2YTVhZWNkZDk0Nzc1OTg5MmVlMDRiYTIxZTA0MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFpZHUgKE5vcnRoZWFzdCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzZjU1MmNmYmRlNTQ5OTZhYjE0MjVlZDMwN2Q3NzhjLnNldENvbnRlbnQoaHRtbF83Y2Q2YTVhZWNkZDk0Nzc1OTg5MmVlMDRiYTIxZTA0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZjE5N2QwMDc4YTI0ZDM3ODZiMjA2ZGYyNjU4NzgyZS5iaW5kUG9wdXAocG9wdXBfOTNmNTUyY2ZiZGU1NDk5NmFiMTQyNWVkMzA3ZDc3OGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwMDgxZDNmODYyYjQyMGNiMGMxNzIxY2RiZDZhNWY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNSwgMTI3LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yY2Q3MDQzN2Q5MmI0NTYyOGFjY2FmN2UwMWM5ODlkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzIwZTIxMTVlOTY0ZTY1OGMxNmJlZDAzMmYzMDAxMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjMyMGUyMTE1ZTk2NGU2NThjMTZiZWQwMzJmMzAwMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYW5jMTI1MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYW5jaHU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmNkNzA0MzdkOTJiNDU2MjhhY2NhZjdlMDFjOTg5ZDUuc2V0Q29udGVudChodG1sX2YzMjBlMjExNWU5NjRlNjU4YzE2YmVkMDMyZjMwMDExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UwMDgxZDNmODYyYjQyMGNiMGMxNzIxY2RiZDZhNWY1LmJpbmRQb3B1cChwb3B1cF8yY2Q3MDQzN2Q5MmI0NTYyOGFjY2FmN2UwMWM5ODlkNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGRjMzliZTE0OWFhNGU1ZjkxNTFhNjI1MjVmOTgzZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuNjY2NjY2NjY2NzAwMDAxLCAxMzMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2NWU5NTYyZmFiZTQ1Yjg4ZWFhYzcwZDUwMTMzMmMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxMDhiNWU0YjI0ZTRiYzU4OTg0ODRiYjMzNDA3ZmZjID0gJChgPGRpdiBpZD0iaHRtbF9jMTA4YjVlNGIyNGU0YmM1ODk4NDg0YmIzMzQwN2ZmYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hbmcxMzgxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hbmdhcnJheWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTY1ZTk1NjJmYWJlNDViODhlYWFjNzBkNTAxMzMyYzEuc2V0Q29udGVudChodG1sX2MxMDhiNWU0YjI0ZTRiYzU4OTg0ODRiYjMzNDA3ZmZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhkYzM5YmUxNDlhYTRlNWY5MTUxYTYyNTI1Zjk4M2Y4LmJpbmRQb3B1cChwb3B1cF81NjVlOTU2MmZhYmU0NWI4OGVhYWM3MGQ1MDEzMzJjMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmZmNjcyYjlhNGIzNDFiMDg1MGRkOThjNzdhZjNiM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy44MzMzMzMzMzMzMzAwMDEsIDE0MC4xNjY2NjY2NjcwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxNzcxNGZkNDZiYTQ1NThhOWQ0MzIzODM5MTdhNTE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0YzNiZjU1NjgwNjQzMzdhODcwMTU1ZDgwZjA0NzQ1ID0gJChgPGRpdiBpZD0iaHRtbF9iNGMzYmY1NTY4MDY0MzM3YTg3MDE1NWQ4MGYwNDc0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjIyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcmluZDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MTc3MTRmZDQ2YmE0NTU4YTlkNDMyMzgzOTE3YTUxNy5zZXRDb250ZW50KGh0bWxfYjRjM2JmNTU2ODA2NDMzN2E4NzAxNTVkODBmMDQ3NDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmZmNjcyYjlhNGIzNDFiMDg1MGRkOThjNzdhZjNiM2QuYmluZFBvcHVwKHBvcHVwXzQxNzcxNGZkNDZiYTQ1NThhOWQ0MzIzODM5MTdhNTE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYzY1ZWQ3NzhiNWI0NTgyOWYxMzRhNmY2ZGE2ZDZhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS45MTY2NjY2NjY3MDAwMDEsIDEzMy41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODMyZWIyYmM2MWE1NGQ1YjlmYWU5ZWVhNTQwZDNkMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjIzYjhiNzJhYTlmNDk3NThiYjBmYmJiYTlkYzQ3YWQgPSAkKGA8ZGl2IGlkPSJodG1sX2YyM2I4YjcyYWE5ZjQ5NzU4YmIwZmJiYmE5ZGM0N2FkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXVuZzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODMyZWIyYmM2MWE1NGQ1YjlmYWU5ZWVhNTQwZDNkMWEuc2V0Q29udGVudChodG1sX2YyM2I4YjcyYWE5ZjQ5NzU4YmIwZmJiYmE5ZGM0N2FkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjNjVlZDc3OGI1YjQ1ODI5ZjEzNGE2ZjZkYTZkNmE2LmJpbmRQb3B1cChwb3B1cF84MzJlYjJiYzYxYTU0ZDViOWZhZTllZWE1NDBkM2QxYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDEyZTVjZWZlY2M5NGZlN2IxNGRjZjJkODFkNTIzMjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy41LCAtMTIwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOGY3Mjc2ZjAzZDM0YmRhOGYyZWRiODQ2MjUwZGFkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjhhNGE1NTczMjI0NWIzODNhNTEwOGYxNzJhNmVmMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNmY4YTRhNTU3MzIyNDViMzgzYTUxMDhmMTcyYTZlZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pd29rIChTb3V0aGVybiBTaWVycmEpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOGY3Mjc2ZjAzZDM0YmRhOGYyZWRiODQ2MjUwZGFkMS5zZXRDb250ZW50KGh0bWxfNmY4YTRhNTU3MzIyNDViMzgzYTUxMDhmMTcyYTZlZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDEyZTVjZWZlY2M5NGZlN2IxNGRjZjJkODFkNTIzMjcuYmluZFBvcHVwKHBvcHVwX2Q4ZjcyNzZmMDNkMzRiZGE4ZjJlZGI4NDYyNTBkYWQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjEwOWUwMjI1Nzc0ZWViYTJjM2Y1Y2I5ZTUyOTNjMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjA1LCAtOTcuNTgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5NmMxM2I2Y2E3OTQ4Mjk4MDRhMzBjMTk1ODk1NjY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmYzgyZmQ2NDQ0MjQ2NzQ4YWMxOGRlYzUyYjcxNWI1ID0gJChgPGRpdiBpZD0iaHRtbF81ZmM4MmZkNjQ0NDI0Njc0OGFjMThkZWM1MmI3MTViNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWl4dGVjIChDaGFsY2F0b25nbyk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5NmMxM2I2Y2E3OTQ4Mjk4MDRhMzBjMTk1ODk1NjY1LnNldENvbnRlbnQoaHRtbF81ZmM4MmZkNjQ0NDI0Njc0OGFjMThkZWM1MmI3MTViNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYjEwOWUwMjI1Nzc0ZWViYTJjM2Y1Y2I5ZTUyOTNjMS5iaW5kUG9wdXAocG9wdXBfMTk2YzEzYjZjYTc5NDgyOTgwNGEzMGMxOTU4OTU2NjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1YmNiMjlkN2U2ZTRlMTE4MWRiY2I4ZDdhNDllYmIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMCwgLTk3LjU4MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Y2QzYTI5ODM4Y2I0YTYwOWQzNDJhMGZjN2M4YzJlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMzk5ZTAzMDhjYjM0ODBmYmQyZmZkNjIwZTQ3MGJlZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjM5OWUwMzA4Y2IzNDgwZmJkMmZmZDYyMGU0NzBiZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1peHRlYyAoTW9saW5vcyk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRjZDNhMjk4MzhjYjRhNjA5ZDM0MmEwZmM3YzhjMmUwLnNldENvbnRlbnQoaHRtbF9iMzk5ZTAzMDhjYjM0ODBmYmQyZmZkNjIwZTQ3MGJlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNWJjYjI5ZDdlNmU0ZTExODFkYmNiOGQ3YTQ5ZWJiMS5iaW5kUG9wdXAocG9wdXBfNGNkM2EyOTgzOGNiNGE2MDlkMzQyYTBmYzdjOGMyZTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxYjVkMWUzYzg5YzQ5MmY5ODUwNjBlZjdmZmUyMTNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjgzMzMzMzMzMzI5OTk5OSwgLTY1LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOGU5MmMyNWI2NGQ0NzZiYjBiZjdjMzY0MTRkZjRmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OWY5ZjMzNDgyOWM0MjQ0ODhiNGYwODI3MjEyZGVjYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjlmOWYzMzQ4MjljNDI0NDg4YjRmMDgyNzIxMmRlY2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tb3ZpMTI0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Nb3ZpbWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDhlOTJjMjViNjRkNDc2YmIwYmY3YzM2NDE0ZGY0ZjIuc2V0Q29udGVudChodG1sXzY5ZjlmMzM0ODI5YzQyNDQ4OGI0ZjA4MjcyMTJkZWNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MxYjVkMWUzYzg5YzQ5MmY5ODUwNjBlZjdmZmUyMTNjLmJpbmRQb3B1cChwb3B1cF8wOGU5MmMyNWI2NGQ0NzZiYjBiZjdjMzY0MTRkZjRmMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmU1MzU5ODAxMWVhNDNlOWJlMWFhNzY1ZTY2MGI4ODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4wLCAtOTguMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MzJlODRiMjZlNGQ0ODBkYmRkOGE3NmFhMTJiN2EwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYmRhZDcxZGNmMDM0ODkzYmZkMWMzMzlkNDdiNjkzMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMGJkYWQ3MWRjZjAzNDg5M2JmZDFjMzM5ZDQ3YjY5MzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5haHVhdGwgKE5vcnRoIFB1ZWJsYSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzMmU4NGIyNmU0ZDQ4MGRiZGQ4YTc2YWExMmI3YTAwLnNldENvbnRlbnQoaHRtbF8wYmRhZDcxZGNmMDM0ODkzYmZkMWMzMzlkNDdiNjkzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZTUzNTk4MDExZWE0M2U5YmUxYWE3NjVlNjYwYjg4NC5iaW5kUG9wdXAocG9wdXBfODMyZTg0YjI2ZTRkNDgwZGJkZDhhNzZhYTEyYjdhMDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1YTI0ZTk5MjZiYjQzOGY5YzliMWEyZDhjZDBlMmFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNjY2NjY2NjY2NywgLTk5LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NTFmZWMyYjAwM2U0MTRjYTIyMTQxNWU5OTVlM2U0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNGI1NzM5MjA0MDU0MzRhOWRhYmE4MmU1ZTRmZDhkMyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDRiNTczOTIwNDA1NDM0YTlkYWJhODJlNWU0ZmQ4ZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5haHVhdGwgKFRldGVsY2luZ28pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NTFmZWMyYjAwM2U0MTRjYTIyMTQxNWU5OTVlM2U0My5zZXRDb250ZW50KGh0bWxfZDRiNTczOTIwNDA1NDM0YTlkYWJhODJlNWU0ZmQ4ZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzVhMjRlOTkyNmJiNDM4ZjljOWIxYTJkOGNkMGUyYWQuYmluZFBvcHVwKHBvcHVwXzk1MWZlYzJiMDAzZTQxNGNhMjIxNDE1ZTk5NWUzZTQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjg5OGVmMGMyZDk0MmFkYTk4MTlmNjdkYWVlMGY4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjUsIDEzNy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2VlZjZmOGQxYTBlNGNmOGI2OTI5MGU4NzU0NTk5MjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQzMjM0MjkxYTJmNDgxNWE3ODcxOWRmYmY3ZmE3MTIgPSAkKGA8ZGl2IGlkPSJodG1sXzRkMzIzNDI5MWEyZjQ4MTVhNzg3MTlkZmJmN2ZhNzEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbmFuYTEyNTciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TmFuYWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VlZjZmOGQxYTBlNGNmOGI2OTI5MGU4NzU0NTk5MjAuc2V0Q29udGVudChodG1sXzRkMzIzNDI5MWEyZjQ4MTVhNzg3MTlkZmJmN2ZhNzEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q2ODk4ZWYwYzJkOTQyYWRhOTgxOWY2N2RhZWUwZjhhLmJpbmRQb3B1cChwb3B1cF9jZWVmNmY4ZDFhMGU0Y2Y4YjY5MjkwZTg3NTQ1OTkyMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODc3N2IwNmJjYjYxNGQxZmI1ZDAxZjcyMDdmN2ZiZWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjA1LCA5My41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTFlYzQ3OTA5OGQxNDcyYWFlYmY5NzEyZjQ4YThmZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Y3MTAzNjIxM2NlNDIyMWE2NzE3YjE2NDA5NmJkMDYgPSAkKGA8ZGl2IGlkPSJodG1sXzdmNzEwMzYyMTNjZTQyMjFhNjcxN2IxNjQwOTZiZDA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbmFuYzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TmFuY293cnk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTFlYzQ3OTA5OGQxNDcyYWFlYmY5NzEyZjQ4YThmZTAuc2V0Q29udGVudChodG1sXzdmNzEwMzYyMTNjZTQyMjFhNjcxN2IxNjQwOTZiZDA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg3NzdiMDZiY2I2MTRkMWZiNWQwMWY3MjA3ZjdmYmVlLmJpbmRQb3B1cChwb3B1cF9hMWVjNDc5MDk4ZDE0NzJhYWViZjk3MTJmNDhhOGZlMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODQ0YWE5Y2VlYTI5NDk3ZjgzMGZhMjM0NzI1NDIzY2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0LjUsIC01NC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjVkNDdmNWYzYWViNGE4YjlkOWJhN2Y2NjhjYmQ0YmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTNjNzk1YWI5YTZjNDI1OGIyNmY1YWM4YmFlZTU0NTkgPSAkKGA8ZGl2IGlkPSJodG1sXzEzYzc5NWFiOWE2YzQyNThiMjZmNWFjOGJhZWU1NDU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3VyaTEyNzIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TmR5dWthPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1ZDQ3ZjVmM2FlYjRhOGI5ZDliYTdmNjY4Y2JkNGJlLnNldENvbnRlbnQoaHRtbF8xM2M3OTVhYjlhNmM0MjU4YjI2ZjVhYzhiYWVlNTQ1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NDRhYTljZWVhMjk0OTdmODMwZmEyMzQ3MjU0MjNjZC5iaW5kUG9wdXAocG9wdXBfYjVkNDdmNWYzYWViNGE4YjlkOWJhN2Y2NjhjYmQ0YmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiNDZjNTFhMzk4MzQyNTk4Yzk4OGQwMzVlNGI0MjY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjEuMCwgMzEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlODE0N2U5ZjU0ODRmYThiMWNlODg5MzM5YjcxNWQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU1YWQwYmJkNTk5MTRjNTQ4ZTlhMmVlNTJmMmFhNTdjID0gJChgPGRpdiBpZD0iaHRtbF81NWFkMGJiZDU5OTE0YzU0OGU5YTJlZTUyZjJhYTU3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25vYmkxMjQwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vYmlpbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZTgxNDdlOWY1NDg0ZmE4YjFjZTg4OTMzOWI3MTVkNS5zZXRDb250ZW50KGh0bWxfNTVhZDBiYmQ1OTkxNGM1NDhlOWEyZWU1MmYyYWE1N2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmI0NmM1MWEzOTgzNDI1OThjOTg4ZDAzNWU0YjQyNjUuYmluZFBvcHVwKHBvcHVwXzFlODE0N2U5ZjU0ODRmYThiMWNlODg5MzM5YjcxNWQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTFmZDdiYzJmZjA0NWFhYmUxYTI4ZGY2OTBkOGNiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMuNDE2NjY2NjY2NjcsIDMzLjU4MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMGI1NmNjZTAwMWE0M2U0Yjc4MTIyMTMyOGNlZDI1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTQ0YWJhMjVjOGM0NDY2ODY0ODlmNzJlNGUwYWJmYSA9ICQoYDxkaXYgaWQ9Imh0bWxfOGE0NGFiYTI1YzhjNDQ2Njg2NDg5ZjcyZTRlMGFiZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk55YW5naTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjBiNTZjY2UwMDFhNDNlNGI3ODEyMjEzMjhjZWQyNTUuc2V0Q29udGVudChodG1sXzhhNDRhYmEyNWM4YzQ0NjY4NjQ4OWY3MmU0ZTBhYmZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1MWZkN2JjMmZmMDQ1YWFiZTFhMjhkZjY5MGQ4Y2I0LmJpbmRQb3B1cChwb3B1cF9iMGI1NmNjZTAwMWE0M2U0Yjc4MTIyMTMyOGNlZDI1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjI4NWU1M2ZhZDlkNDhlYjg5MmFmMDZiODQ3NmFkNjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4xNjY2NjY2NjY3MDAwMDEsIDI5LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NjllMTdlYmM2Yzc0NTAzOTllYTI3OGRmYWIzZTkyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ODZkMGQ2OTJmYTc0N2UyYmI0NGU0YmZjMTE0NDJlMiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTg2ZDBkNjkyZmE3NDdlMmJiNDRlNGJmYzExNDQyZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ueWltMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OeWltYW5nPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2OWUxN2ViYzZjNzQ1MDM5OWVhMjc4ZGZhYjNlOTI0LnNldENvbnRlbnQoaHRtbF85ODZkMGQ2OTJmYTc0N2UyYmI0NGU0YmZjMTE0NDJlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82Mjg1ZTUzZmFkOWQ0OGViODkyYWYwNmI4NDc2YWQ2Mi5iaW5kUG9wdXAocG9wdXBfNjY5ZTE3ZWJjNmM3NDUwMzk5ZWEyNzhkZmFiM2U5MjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyMTQwOTMwYjZlMDRmZWFiOTRiMDE2MjA3NTAxMjFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjcuNSwgOTMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliMmQyYzIyYzQzNzQ4NGJhZjBhMzM5MGRmYWNlN2QwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzZDY5OTQ0N2VmZTRiZGRiMDFjN2U3MDc4ZmNjY2M4ID0gJChgPGRpdiBpZD0iaHRtbF80M2Q2OTk0NDdlZmU0YmRkYjAxYzdlNzA3OGZjY2NjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tnlpc2hpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YjJkMmMyMmM0Mzc0ODRiYWYwYTMzOTBkZmFjZTdkMC5zZXRDb250ZW50KGh0bWxfNDNkNjk5NDQ3ZWZlNGJkZGIwMWM3ZTcwNzhmY2NjYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjIxNDA5MzBiNmUwNGZlYWI5NGIwMTYyMDc1MDEyMWQuYmluZFBvcHVwKHBvcHVwXzliMmQyYzIyYzQzNzQ4NGJhZjBhMzM5MGRmYWNlN2QwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzgwODU1NDBhNTc0M2U5OTg0ZDMzZWEwYzJmOGU4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjAsIC04MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNmZTM3MjVkNzYzNDRlNjgxNDVmYmZiNTFjZjlhYzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWZhN2Y5YjdkMWIzNDYyNmE3ZGMwNWQ1M2JjZDUwNjIgPSAkKGA8ZGl2IGlkPSJodG1sXzFmYTdmOWI3ZDFiMzQ2MjZhN2RjMDVkNTNiY2Q1MDYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Pamlid2EgKEVhc3Rlcm4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82M2ZlMzcyNWQ3NjM0NGU2ODE0NWZiZmI1MWNmOWFjMi5zZXRDb250ZW50KGh0bWxfMWZhN2Y5YjdkMWIzNDYyNmE3ZGMwNWQ1M2JjZDUwNjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTc4MDg1NTQwYTU3NDNlOTk4NGQzM2VhMGMyZjhlODcuYmluZFBvcHVwKHBvcHVwXzYzZmUzNzI1ZDc2MzQ0ZTY4MTQ1ZmJmYjUxY2Y5YWMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNWIwMzU5YmQ3ZmE0YjYxYmY2N2I5OWM5OGE0MzYzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi41LCAxNjguMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNWY1NTU4ZjI4YzY0N2UxYTliZWY1MzQ3MWIwMjBiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZWQwZTY2MWUyODE0ZTlkODI4M2NlMDRmMjViNzk1YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNGVkMGU2NjFlMjgxNGU5ZDgyODNjZTA0ZjI1Yjc5NWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhYW1lc2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1ZjU1NThmMjhjNjQ3ZTFhOWJlZjUzNDcxYjAyMGI0LnNldENvbnRlbnQoaHRtbF80ZWQwZTY2MWUyODE0ZTlkODI4M2NlMDRmMjViNzk1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNWIwMzU5YmQ3ZmE0YjYxYmY2N2I5OWM5OGE0MzYzZC5iaW5kUG9wdXAocG9wdXBfMzVmNTU1OGYyOGM2NDdlMWE5YmVmNTM0NzFiMDIwYjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRlYmNiMWFkOThjMjRhZGY4ZTgzNGEzNzg4YjNjYjYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMCwgLTY3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Y2Y3OWEyM2YxMjI0ZTViYTMxZDhlMzg3NjU1ZTI1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMzI3YmQ0OWExYjU0NzM1YWI1ZWNmMTlhYjQ3Mzg3MiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDMyN2JkNDlhMWI1NDczNWFiNWVjZjE5YWI0NzM4NzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhc3NhbWFxdW9kZHktTWFsaXNlZXQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjZjc5YTIzZjEyMjRlNWJhMzFkOGUzODc2NTVlMjUyLnNldENvbnRlbnQoaHRtbF8wMzI3YmQ0OWExYjU0NzM1YWI1ZWNmMTlhYjQ3Mzg3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZWJjYjFhZDk4YzI0YWRmOGU4MzRhMzc4OGIzY2I2MS5iaW5kUG9wdXAocG9wdXBfOGNmNzlhMjNmMTIyNGU1YmEzMWQ4ZTM4NzY1NWUyNTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlYjNlMDgwMDU5MzQ5NTNhODVjZmRkNTc0ZTg2YmFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMCwgLTg1LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTFlMzhhMzM3NDU0NzU0YTNmZWU4YzkxNTI0Y2FkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYThhNGVmNDRlMTM0MzQ3ODUwOTIzOTM1MTk5OTdiOCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2E4YTRlZjQ0ZTEzNDM0Nzg1MDkyMzkzNTE5OTk3YjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wZWNoMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5QZWNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxMWUzOGEzMzc0NTQ3NTRhM2ZlZThjOTE1MjRjYWRmLnNldENvbnRlbnQoaHRtbF9jYThhNGVmNDRlMTM0MzQ3ODUwOTIzOTM1MTk5OTdiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZWIzZTA4MDA1OTM0OTUzYTg1Y2ZkZDU3NGU4NmJhYi5iaW5kUG9wdXAocG9wdXBfNzExZTM4YTMzNzQ1NDc1NGEzZmVlOGM5MTUyNGNhZGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjZGU0MzY0NzNjMzRhNzBiYzg0NTEwNWFlZTQ2OGI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI2LjAsIDEzMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzRlNTQ2NjkwMGI2NGU2MmExOGVmMGU1MWI3OWIxOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBiYjAzYzIxM2ZlNGU1ZThhYWEyZTRlYzNjZTI5ZmQgPSAkKGA8ZGl2IGlkPSJodG1sX2UwYmIwM2MyMTNmZTRlNWU4YWFhMmU0ZWMzY2UyOWZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGl0ajEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGl0amFudGphdGphcmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzRlNTQ2NjkwMGI2NGU2MmExOGVmMGU1MWI3OWIxOTUuc2V0Q29udGVudChodG1sX2UwYmIwM2MyMTNmZTRlNWU4YWFhMmU0ZWMzY2UyOWZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVjZGU0MzY0NzNjMzRhNzBiYzg0NTEwNWFlZTQ2OGI2LmJpbmRQb3B1cChwb3B1cF83NGU1NDY2OTAwYjY0ZTYyYTE4ZWYwZTUxYjc5YjE5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjMwNzBkNWJmODU3NGM2OThkNGM4MjVjMjFhMmRlMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuNjY2NjY2NjY2NywgMTY0LjgzMzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGU4NjVlMDhhOGViNDIyZjhmMTZmZTNmYTQ3ODhlZWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzI2MWMyMzc3ZTkyNGRhOWI3MzcwNTQ3NWMzYmQ1ZjUgPSAkKGA8ZGl2IGlkPSJodG1sXzcyNjFjMjM3N2U5MjRkYTliNzM3MDU0NzVjM2JkNWY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qby1BaTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGU4NjVlMDhhOGViNDIyZjhmMTZmZTNmYTQ3ODhlZWQuc2V0Q29udGVudChodG1sXzcyNjFjMjM3N2U5MjRkYTliNzM3MDU0NzVjM2JkNWY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IzMDcwZDViZjg1NzRjNjk4ZDRjODI1YzIxYTJkZTIwLmJpbmRQb3B1cChwb3B1cF9kZTg2NWUwOGE4ZWI0MjJmOGYxNmZlM2ZhNDc4OGVlZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTdjNGU1YjcyM2YwNDcwYWJlZjJhOGZlYWQ2N2JlNDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43NSwgLTgzLjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGQwNTgzYTY4NTE1NGJjYmFlOGU3N2M1M2FkNzE2ODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjRhMzIxNjlkNDA0NDQ3ZDk0MTY2NzY4MDQ5YmE0OGQgPSAkKGA8ZGl2IGlkPSJodG1sXzI0YTMyMTY5ZDQwNDQ0N2Q5NDE2Njc2ODA0OWJhNDhkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcmFtYTEyNzAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UmFtYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDA1ODNhNjg1MTU0YmNiYWU4ZTc3YzUzYWQ3MTY4NS5zZXRDb250ZW50KGh0bWxfMjRhMzIxNjlkNDA0NDQ3ZDk0MTY2NzY4MDQ5YmE0OGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTdjNGU1YjcyM2YwNDcwYWJlZjJhOGZlYWQ2N2JlNDQuYmluZFBvcHVwKHBvcHVwXzBkMDU4M2E2ODUxNTRiY2JhZThlNzdjNTNhZDcxNjg1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NWUwYzIwY2E0YTA0YWJlOWFkMDI4MDk2NTc1OTQ5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy05LjEzMzMzMzMzMzMzLCAxNTkuOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhY2I4Y2MxZjE2OTQ0YmRhNGFlNTJlZGJmYzk2M2RiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjYmQ0YWMxMTJjZjRmODNiMzRiODNiYTFkNGMxZGQ5ID0gJChgPGRpdiBpZD0iaHRtbF8wY2JkNGFjMTEyY2Y0ZjgzYjM0YjgzYmExZDRjMWRkOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Nhdm8xMjU1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNhdm9zYXZvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhY2I4Y2MxZjE2OTQ0YmRhNGFlNTJlZGJmYzk2M2RiLnNldENvbnRlbnQoaHRtbF8wY2JkNGFjMTEyY2Y0ZjgzYjM0YjgzYmExZDRjMWRkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NWUwYzIwY2E0YTA0YWJlOWFkMDI4MDk2NTc1OTQ5Yy5iaW5kUG9wdXAocG9wdXBfYWFjYjhjYzFmMTY5NDRiZGE0YWU1MmVkYmZjOTYzZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxNWZjYzllNGFiYTQzY2Y4OGY1OTNmMTI3NDRiNDcwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMTY2NjY2NjY2NjY5OTk5LCAxNDcuMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NjkwOGU0ZTM5MGY0ZTQxODVmMmM4OGU5MzI0ZmU4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOGZjYTU5YjM1ODM0NmJmOWY5ZTk5MWQ1Y2Y0NzQ1ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjhmY2E1OWIzNTgzNDZiZjlmOWU5OTFkNWNmNDc0NWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zZWxlMTI1MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TZWxlcGV0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc2OTA4ZTRlMzkwZjRlNDE4NWYyYzg4ZTkzMjRmZTg4LnNldENvbnRlbnQoaHRtbF8yOGZjYTU5YjM1ODM0NmJmOWY5ZTk5MWQ1Y2Y0NzQ1ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMTVmY2M5ZTRhYmE0M2NmODhmNTkzZjEyNzQ0YjQ3MC5iaW5kUG9wdXAocG9wdXBfNzY5MDhlNGUzOTBmNGU0MTg1ZjJjODhlOTMyNGZlODgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyYjg4Njc5YzQ5OTRhNTBhOThjZTBhZjQ5YTdhZTdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjUuMCwgODIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjMzUzN2RhZGNkMTQyODJhNTBmNmUxMWNkMTI1MWNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmMDBmMmIxZGMyZTQ4MTU4OWNhMDEyNjdmMjY1ZWRmID0gJChgPGRpdiBpZD0iaHRtbF84ZjAwZjJiMWRjMmU0ODE1ODljYTAxMjY3ZjI2NWVkZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NlbGsxMjUzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNlbGt1cDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YzM1MzdkYWRjZDE0MjgyYTUwZjZlMTFjZDEyNTFjZC5zZXRDb250ZW50KGh0bWxfOGYwMGYyYjFkYzJlNDgxNTg5Y2EwMTI2N2YyNjVlZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODJiODg2NzljNDk5NGE1MGE5OGNlMGFmNDlhN2FlN2MuYmluZFBvcHVwKHBvcHVwXzVjMzUzN2RhZGNkMTQyODJhNTBmNmUxMWNkMTI1MWNkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NDI2ZDZiZGIwZDE0NWVmOTk5NDhmNzAyMTkzOTQ2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjgzMzMzMzMzMzMsIC0xMjIuNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGI4MGU1YTcxM2EwNDRiOWIwN2JiYWRjYWVmN2E0ZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGM0YWU5YjE3NzRjNDdhYmJkNzJlZjkxMDcxODhlNzQgPSAkKGA8ZGl2IGlkPSJodG1sX2RjNGFlOWIxNzc0YzQ3YWJiZDcyZWY5MTA3MTg4ZTc0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2hhczEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2hhc3RhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiODBlNWE3MTNhMDQ0YjliMDdiYmFkY2FlZjdhNGU2LnNldENvbnRlbnQoaHRtbF9kYzRhZTliMTc3NGM0N2FiYmQ3MmVmOTEwNzE4OGU3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NDI2ZDZiZGIwZDE0NWVmOTk5NDhmNzAyMTkzOTQ2Ny5iaW5kUG9wdXAocG9wdXBfMGI4MGU1YTcxM2EwNDRiOWIwN2JiYWRjYWVmN2E0ZTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg0OTgzNjI5YTc4ODQ3MWY4MDg1NmRmY2U0NjY2NWY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuNSwgLTc1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNjNiZTYzNjNhMmU0MmIyYTI0MjUxYWM2ODE2OGNjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOWJmYTA2N2I0ZTU0M2UzOWY2NGE0MGJmODRhMThmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTliZmEwNjdiNGU1NDNlMzlmNjRhNDBiZjg0YTE4ZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNoaXBpYm8tS29uaWJvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNjNiZTYzNjNhMmU0MmIyYTI0MjUxYWM2ODE2OGNjMS5zZXRDb250ZW50KGh0bWxfMTliZmEwNjdiNGU1NDNlMzlmNjRhNDBiZjg0YTE4ZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODQ5ODM2MjlhNzg4NDcxZjgwODU2ZGZjZTQ2NjY1ZjcuYmluZFBvcHVwKHBvcHVwX2Y2M2JlNjM2M2EyZTQyYjJhMjQyNTFhYzY4MTY4Y2MxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMTU5ZGNjYzg0Njk0MDM3ODVhYjhhYjFkMjA2NzA0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuMzMzMzMzMzMzMzMyOTk5OTcsIC03Ni4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0MGY0ZjhiY2Y4ZTQ0MzZhZWI5NzFlZTc4YjUwZjQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5NTQ2MzQ4NWIzNTQ1MmE5ZmU0MmZjZDRkZGRiOGFmID0gJChgPGRpdiBpZD0iaHRtbF83OTU0NjM0ODViMzU0NTJhOWZlNDJmY2Q0ZGRkYjhhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2lvbmE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE0MGY0ZjhiY2Y4ZTQ0MzZhZWI5NzFlZTc4YjUwZjQ4LnNldENvbnRlbnQoaHRtbF83OTU0NjM0ODViMzU0NTJhOWZlNDJmY2Q0ZGRkYjhhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMTU5ZGNjYzg0Njk0MDM3ODVhYjhhYjFkMjA2NzA0ZS5iaW5kUG9wdXAocG9wdXBfMTQwZjRmOGJjZjhlNDQzNmFlYjk3MWVlNzhiNTBmNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkYTA5MjE1ZTI2NTQ1MjM5ZTBjZmU1ODhmOWI4NDk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjAuMCwgODQuMzMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxZDU2MzMxZjAwZjRjYTliZmZhODRhYTA2MGUyNTUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkZDZiOThlM2U0YzQwNzc5MWZhZWRiNzg1MGE5YTdhID0gJChgPGRpdiBpZD0iaHRtbF9iZGQ2Yjk4ZTNlNGM0MDc3OTFmYWVkYjc4NTBhOWE3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NvcmExMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNvcmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTFkNTYzMzFmMDBmNGNhOWJmZmE4NGFhMDYwZTI1NTAuc2V0Q29udGVudChodG1sX2JkZDZiOThlM2U0YzQwNzc5MWZhZWRiNzg1MGE5YTdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkYTA5MjE1ZTI2NTQ1MjM5ZTBjZmU1ODhmOWI4NDk4LmJpbmRQb3B1cChwb3B1cF85MWQ1NjMzMWYwMGY0Y2E5YmZmYTg0YWEwNjBlMjU1MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGFlYzg1NGNhYjAyNDdlZWFjZDU4OWZjOWI0NmIzZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFswLjAsIDEyNy41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzdjNjQxNGY5MGUxNGZhNGFkMDM2ODhmMGM4MTdmNGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmFlYjZmMDhjMTgxNGUyOWJiMjY5MDcyNmFlNjQwY2QgPSAkKGA8ZGl2IGlkPSJodG1sX2ZhZWI2ZjA4YzE4MTRlMjliYjI2OTA3MjZhZTY0MGNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UYWJhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zN2M2NDE0ZjkwZTE0ZmE0YWQwMzY4OGYwYzgxN2Y0Yy5zZXRDb250ZW50KGh0bWxfZmFlYjZmMDhjMTgxNGUyOWJiMjY5MDcyNmFlNjQwY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGFlYzg1NGNhYjAyNDdlZWFjZDU4OWZjOWI0NmIzZTcuYmluZFBvcHVwKHBvcHVwXzM3YzY0MTRmOTBlMTRmYTRhZDAzNjg4ZjBjODE3ZjRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMDMwMDdiODdiMWY0ZWI5ODA4ZWEzZDU5MWZkMWJhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy41LCAtNjguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmZTg2ZDYwZmY2OTQwMjE4ZTRkZmYyM2I0ZjU0NGVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FlOTRjZDJmMGVmNzQwN2Q5MzVlM2RjYjhjNjFmZWY5ID0gJChgPGRpdiBpZD0iaHRtbF9hZTk0Y2QyZjBlZjc0MDdkOTM1ZTNkY2I4YzYxZmVmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RhY2ExMjU2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRhY2FuYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZmU4NmQ2MGZmNjk0MDIxOGU0ZGZmMjNiNGY1NDRlZS5zZXRDb250ZW50KGh0bWxfYWU5NGNkMmYwZWY3NDA3ZDkzNWUzZGNiOGM2MWZlZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjAzMDA3Yjg3YjFmNGViOTgwOGVhM2Q1OTFmZDFiYTMuYmluZFBvcHVwKHBvcHVwXzlmZTg2ZDYwZmY2OTQwMjE4ZTRkZmYyM2I0ZjU0NGVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYjExZDg5ODU5MDA0M2VjYTIzM2UyN2JiNDIxZDAwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjAsIDEyMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWY2MGZjYTAwOWU2NDI1OGEyOTJmZTMyMWE5OGI2NmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTlhOTg3YmM2MTVhNGE5Yjk0YWFmOTFiMmJkZmJlZWUgPSAkKGA8ZGl2IGlkPSJodG1sXzE5YTk4N2JjNjE1YTRhOWI5NGFhZjkxYjJiZGZiZWVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGFnYTEyNzAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGFnYWxvZzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZjYwZmNhMDA5ZTY0MjU4YTI5MmZlMzIxYTk4YjY2Yi5zZXRDb250ZW50KGh0bWxfMTlhOTg3YmM2MTVhNGE5Yjk0YWFmOTFiMmJkZmJlZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmIxMWQ4OTg1OTAwNDNlY2EyMzNlMjdiYjQyMWQwMDYuYmluZFBvcHVwKHBvcHVwXzlmNjBmY2EwMDllNjQyNThhMjkyZmUzMjFhOThiNjZiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODY1YWViZGRiOGM0OGQwYjlhOTc4YjRlZTNkZmQxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuMCwgMTIxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MDBhODgzYWIxYTY0MTE0OTk4ZmY1NWVkZTM0MzdjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNGY3ZTlmNWU1Yjc0NzIxYTRhMzk2NWEyZGYwYzE0NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTRmN2U5ZjVlNWI3NDcyMWE0YTM5NjVhMmRmMGMxNDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90YXVzMTI1MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UYXVzdWc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjAwYTg4M2FiMWE2NDExNDk5OGZmNTVlZGUzNDM3Yzkuc2V0Q29udGVudChodG1sX2E0ZjdlOWY1ZTViNzQ3MjFhNGEzOTY1YTJkZjBjMTQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I4NjVhZWJkZGI4YzQ4ZDBiOWE5NzhiNGVlM2RmZDEyLmJpbmRQb3B1cChwb3B1cF82MDBhODgzYWIxYTY0MTE0OTk4ZmY1NWVkZTM0MzdjOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDM5YjlmZmQwNGEyNDlhYzk2YjhjMWNiZmU1NjIwODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS45MTY2NjY2NjY3MDAwMDEsIDI5LjQxNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMmUwMzc0OTYwZjQ0OTBkYmEzMGExNGRhNDUwZTAwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOGMxMDk5M2U3ODE0YWRmYjU3YTVhMzNjMjA3NWZiMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDhjMTA5OTNlNzgxNGFkZmI1N2E1YTMzYzIwNzVmYjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UZW1laW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTJlMDM3NDk2MGY0NDkwZGJhMzBhMTRkYTQ1MGUwMDUuc2V0Q29udGVudChodG1sX2Q4YzEwOTkzZTc4MTRhZGZiNTdhNWEzM2MyMDc1ZmIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQzOWI5ZmZkMDRhMjQ5YWM5NmI4YzFjYmZlNTYyMDg2LmJpbmRQb3B1cChwb3B1cF9lMmUwMzc0OTYwZjQ0OTBkYmEzMGExNGRhNDUwZTAwNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTRlZTJkZDQzMjE4NDA5OGJlOTdiMzY5NmRmZTY3NTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjY2NjY2NjY2NjY2OTk5OSwgLTEzLjA4MzMzMzMzMzI5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwYWU2YjE2MjI2MjQ3MTdiNTE5YjQwYjkxMDM3NTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0NDUwYTUzODdmOTRkZGU4OWRmOTZlYTU5ZmNiZDQzID0gJChgPGRpdiBpZD0iaHRtbF8wNDQ1MGE1Mzg3Zjk0ZGRlODlkZjk2ZWE1OWZjYmQ0MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGVtbmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwYWU2YjE2MjI2MjQ3MTdiNTE5YjQwYjkxMDM3NTcyLnNldENvbnRlbnQoaHRtbF8wNDQ1MGE1Mzg3Zjk0ZGRlODlkZjk2ZWE1OWZjYmQ0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNGVlMmRkNDMyMTg0MDk4YmU5N2IzNjk2ZGZlNjc1Ni5iaW5kUG9wdXAocG9wdXBfNDBhZTZiMTYyMjYyNDcxN2I1MTliNDBiOTEwMzc1NzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiNTEwMTgzM2IzZTQ5ZDhhOTUxOWFlOWE5NjYwYzEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQuMCwgLTcwLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOWU5ODg5NmQ5NGM0N2Y0YmUyMjA4ODU5ZmI2Zjc5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTdlMWFkYzY4YjM0ZTdmYWI0ODMzMGU4Yzk5YzY5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWE3ZTFhZGM2OGIzNGU3ZmFiNDgzMzBlOGM5OWM2OTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90aWN1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UaWN1bmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzllOTg4OTZkOTRjNDdmNGJlMjIwODg1OWZiNmY3OTUuc2V0Q29udGVudChodG1sX2VhN2UxYWRjNjhiMzRlN2ZhYjQ4MzMwZThjOTljNjkwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiNTEwMTgzM2IzZTQ5ZDhhOTUxOWFlOWE5NjYwYzEwLmJpbmRQb3B1cChwb3B1cF9jOWU5ODg5NmQ5NGM0N2Y0YmUyMjA4ODU5ZmI2Zjc5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMThmN2EwMzBkYWMwNDUzZGFkNjZkNjRjNzgzYzUxNTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Ljc1LCAxMjQuMTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODY3OWJiMjg1NmVjNDM0MjkxYmVlMThjNTI1YjhiOWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGM1ZDBjNGI3MjY3NDQ4MGFjYjZhMThmY2FiZTMzOWYgPSAkKGA8ZGl2IGlkPSJodG1sX2RjNWQwYzRiNzI2NzQ0ODBhY2I2YTE4ZmNhYmUzMzlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGlydTEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGlydXJheTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Njc5YmIyODU2ZWM0MzQyOTFiZWUxOGM1MjViOGI5ZC5zZXRDb250ZW50KGh0bWxfZGM1ZDBjNGI3MjY3NDQ4MGFjYjZhMThmY2FiZTMzOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMThmN2EwMzBkYWMwNDUzZGFkNjZkNjRjNzgzYzUxNTcuYmluZFBvcHVwKHBvcHVwXzg2NzliYjI4NTZlYzQzNDI5MWJlZTE4YzUyNWI4YjlkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGJiZTY1MGFkNWY0MDc0OGQ1NTc5NDRlYmIxNGMzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjI1LCAtOTYuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZGRlYTgzYmQ0MmM0NzkyOGY4OTU5ZDYyMDE3N2U5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOWY2NmExYjljMWE0YTIxOTNhODgwYjE1Y2M5ZDkxZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTlmNjZhMWI5YzFhNGEyMTkzYTg4MGIxNWNjOWQ5MWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90b25rMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ub25rYXdhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JkZGVhODNiZDQyYzQ3OTI4Zjg5NTlkNjIwMTc3ZTk4LnNldENvbnRlbnQoaHRtbF8xOWY2NmExYjljMWE0YTIxOTNhODgwYjE1Y2M5ZDkxZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNGJiZTY1MGFkNWY0MDc0OGQ1NTc5NDRlYmIxNGMzMC5iaW5kUG9wdXAocG9wdXBfYmRkZWE4M2JkNDJjNDc5MjhmODk1OWQ2MjAxNzdlOTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNjNWUzNWVkNWIxOTQxNzU4YzliMmVkY2RiMzczOWNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuNDE2NjY2NjY2NzAwMDAxLCAtMy4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4NGJmNDZmMzRlYTQ1MWZhMzFjMGQ2NzdhYjZiMDUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1YTc4NjVmNWFlMTRlOWQ5YzBhM2Q1MjEyZWE5ZDYyID0gJChgPGRpdiBpZD0iaHRtbF82NWE3ODY1ZjVhZTE0ZTlkOWMwYTNkNTIxMmVhOWQ2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG9ybyBTbzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjg0YmY0NmYzNGVhNDUxZmEzMWMwZDY3N2FiNmIwNTAuc2V0Q29udGVudChodG1sXzY1YTc4NjVmNWFlMTRlOWQ5YzBhM2Q1MjEyZWE5ZDYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNjNWUzNWVkNWIxOTQxNzU4YzliMmVkY2RiMzczOWNiLmJpbmRQb3B1cChwb3B1cF8yODRiZjQ2ZjM0ZWE0NTFmYTMxYzBkNjc3YWI2YjA1MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTNkZDQ4MTY2MWE4NDU1MjkxN2Q4ODRmNWQ5ZDA3MDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4zMzMzMzMzMzMzLCAtOTcuMzMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlNjY5ZGM1YTM4YTRkNDJhYzE2ZjU0MTQyMjk3ZDQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlN2JkNzEzNzQyYTQ1ZDViOTE0OTU4MTlhNGIzZmUzID0gJChgPGRpdiBpZD0iaHRtbF80ZTdiZDcxMzc0MmE0NWQ1YjkxNDk1ODE5YTRiM2ZlMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG90b25hYyAoUGFwYW50bGEpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZTY2OWRjNWEzOGE0ZDQyYWMxNmY1NDE0MjI5N2Q0MC5zZXRDb250ZW50KGh0bWxfNGU3YmQ3MTM3NDJhNDVkNWI5MTQ5NTgxOWE0YjNmZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTNkZDQ4MTY2MWE4NDU1MjkxN2Q4ODRmNWQ5ZDA3MDMuYmluZFBvcHVwKHBvcHVwXzBlNjY5ZGM1YTM4YTRkNDJhYzE2ZjU0MTQyMjk3ZDQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MmE2YTMyODEzMTk0MmE0OGIwNDIyYjRlMDhiMTAyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIzLjUsIDEyMC43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1YjMwNjZkNTRmMTQ0MDM4Y2RhOGMyZGNmYzkzMWQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliN2Q2ODUxMTU1NTQ2NWE4Mjg2OTNjMzI1ZmVjNDExID0gJChgPGRpdiBpZD0iaHRtbF85YjdkNjg1MTE1NTU0NjVhODI4NjkzYzMyNWZlYzQxMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rzb3UxMjQ4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRzb3U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDViMzA2NmQ1NGYxNDQwMzhjZGE4YzJkY2ZjOTMxZDguc2V0Q29udGVudChodG1sXzliN2Q2ODUxMTU1NTQ2NWE4Mjg2OTNjMzI1ZmVjNDExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyYTZhMzI4MTMxOTQyYTQ4YjA0MjJiNGUwOGIxMDI3LmJpbmRQb3B1cChwb3B1cF9kNWIzMDY2ZDU0ZjE0NDAzOGNkYThjMmRjZmM5MzFkOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMThjODM0Njg2ODI3NDc1MmE3MmE4OGExZGFmMTBiZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMi42NjY2NjY2NjY3LCAtOTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5ZGE3ZDVlMTA4MjQ3OGViMjdjMzkzNGE1NTA5MDUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwY2ExZTQ5ZTZiMDQ5ZDY5ZmU5ODQ1OWQ4MmQ3NDIxID0gJChgPGRpdiBpZD0iaHRtbF9mMGNhMWU0OWU2YjA0OWQ2OWZlOTg0NTlkODJkNzQyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3R1bmkxMjUyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1bmljYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OWRhN2Q1ZTEwODI0NzhlYjI3YzM5MzRhNTUwOTA1Mi5zZXRDb250ZW50KGh0bWxfZjBjYTFlNDllNmIwNDlkNjlmZTk4NDU5ZDgyZDc0MjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMThjODM0Njg2ODI3NDc1MmE3MmE4OGExZGFmMTBiZjkuYmluZFBvcHVwKHBvcHVwXzg5ZGE3ZDVlMTA4MjQ3OGViMjdjMzkzNGE1NTA5MDUyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNmQ5M2I4Yzg3NzA0NmRjYWFmYzhiM2FjZjMzMWUxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi4zMzMzMzMzMzMzLCAxMjYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzOTJmOTNlZjNmODRlNzI4NDBmODdiMmNkMzFmM2M3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwMDFhNDZlMWU4OTRkNjU5OTkyMjcwNTFjOGIxOGJhID0gJChgPGRpdiBpZD0iaHRtbF9hMDAxYTQ2ZTFlODk0ZDY1OTk5MjI3MDUxYzhiMThiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VW5nYXJpbmppbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDM5MmY5M2VmM2Y4NGU3Mjg0MGY4N2IyY2QzMWYzYzcuc2V0Q29udGVudChodG1sX2EwMDFhNDZlMWU4OTRkNjU5OTkyMjcwNTFjOGIxOGJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA2ZDkzYjhjODc3MDQ2ZGNhYWZjOGIzYWNmMzMxZTFhLmJpbmRQb3B1cChwb3B1cF8wMzkyZjkzZWYzZjg0ZTcyODQwZjg3YjJjZDMxZjNjNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI0NzQ1ZDIwNTY1NGM1OTllMTYwMWM5MDcwNGMwZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi4zMzMzMzMzMzMzMywgLTQ2LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MDgzNTAyZTNiNDY0NTYzYTk5N2MxYTk3OWI3ZDg1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOGU0ZTNjYTc1OTU0YzA2ODhjYWJiODlmMDUyM2Y5YyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzhlNGUzY2E3NTk1NGMwNjg4Y2FiYjg5ZjA1MjNmOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC91cnViMTI1MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5VcnViw7otS2FhcG9yPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwODM1MDJlM2I0NjQ1NjNhOTk3YzFhOTc5YjdkODUzLnNldENvbnRlbnQoaHRtbF9jOGU0ZTNjYTc1OTU0YzA2ODhjYWJiODlmMDUyM2Y5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MjQ3NDVkMjA1NjU0YzU5OWUxNjAxYzkwNzA0YzBlYi5iaW5kUG9wdXAocG9wdXBfNDA4MzUwMmUzYjQ2NDU2M2E5OTdjMWE5NzliN2Q4NTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjODUzYWY4MTJjNzQ1OWVhMTllYTQ0Zjk2OWI1M2I1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuODMzMzMzMzMzMzMwMDAxLCAxNDQuNzE2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTFlMDQ0ZWIxZjA4NDA5YzhiMmM2NmE0ZDhiNmQ1M2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjFhODJiZWVhZDY1NGYzOGFlNjc5MDZkNjk4NzQwZDggPSAkKGA8ZGl2IGlkPSJodG1sXzIxYTgyYmVlYWQ2NTRmMzhhZTY3OTA2ZDY5ODc0MGQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2MjAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V2FoZ2k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTFlMDQ0ZWIxZjA4NDA5YzhiMmM2NmE0ZDhiNmQ1M2Uuc2V0Q29udGVudChodG1sXzIxYTgyYmVlYWQ2NTRmMzhhZTY3OTA2ZDY5ODc0MGQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRjODUzYWY4MTJjNzQ1OWVhMTllYTQ0Zjk2OWI1M2I1LmJpbmRQb3B1cChwb3B1cF9hMWUwNDRlYjFmMDg0MDljOGIyYzY2YTRkOGI2ZDUzZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWNmYTJkMWUzMzY5NGI3NWIzYWM4NGY2NjU2MjVkZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTguNjY2NjY2NjY2NywgMTM1Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDBmZGY1NGE5ZjcyNDI1NjgyYTk3NDNlMWM5M2VhN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODNmZDVlNTQ0OTI2NGVjOGEzNjMxYTNkMWE2MGJhYzAgPSAkKGA8ZGl2IGlkPSJodG1sXzgzZmQ1ZTU0NDkyNjRlYzhhMzYzMWEzZDFhNjBiYWMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMjgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V2FtYmF5YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMGZkZjU0YTlmNzI0MjU2ODJhOTc0M2UxYzkzZWE3ZS5zZXRDb250ZW50KGh0bWxfODNmZDVlNTQ0OTI2NGVjOGEzNjMxYTNkMWE2MGJhYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWNmYTJkMWUzMzY5NGI3NWIzYWM4NGY2NjU2MjVkZGIuYmluZFBvcHVwKHBvcHVwXzAwZmRmNTRhOWY3MjQyNTY4MmE5NzQzZTFjOTNlYTdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZDU1MTA0MTA3YmU0MzMwYjAzN2ExOTIwMGRmMjM2YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjE2NjY2NjY2NjY2OTk5OSwgMTQ2LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzY1OWQ4NjdlYmY0YmNmOWNlZWVmYWU0OTdjMjQwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOWZlZWMyMWU3MjA0ODQ3YjU2ZGMyOWU5YWJmZTA2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTlmZWVjMjFlNzIwNDg0N2I1NmRjMjllOWFiZmUwNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93YW50MTI1MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XYW50b2F0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjNjU5ZDg2N2ViZjRiY2Y5Y2VlZWZhZTQ5N2MyNDBlLnNldENvbnRlbnQoaHRtbF9hOWZlZWMyMWU3MjA0ODQ3YjU2ZGMyOWU5YWJmZTA2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZDU1MTA0MTA3YmU0MzMwYjAzN2ExOTIwMGRmMjM2Yy5iaW5kUG9wdXAocG9wdXBfN2M2NTlkODY3ZWJmNGJjZjljZWVlZmFlNDk3YzI0MGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5ODY3YzIwZTYwNDRjZWViOTNjYTdhNjQwMjk4YmQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMi42NjY2NjY2NjY2NywgLTYwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hOWUyYTVjMjljMjg0YWNmOWE1OWRmNWU4ZjlkMjFhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZTcyZTVlNzI1Zjc0ZTg1OTZhZWFiMWNkNjZiNTQ5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGU3MmU1ZTcyNWY3NGU4NTk2YWVhYjFjZDY2YjU0OTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93YXBpMTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XYXBpc2hhbmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTllMmE1YzI5YzI4NGFjZjlhNTlkZjVlOGY5ZDIxYTcuc2V0Q29udGVudChodG1sXzRlNzJlNWU3MjVmNzRlODU5NmFlYWIxY2Q2NmI1NDk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E5ODY3YzIwZTYwNDRjZWViOTNjYTdhNjQwMjk4YmQ0LmJpbmRQb3B1cChwb3B1cF9hOWUyYTVjMjljMjg0YWNmOWE1OWRmNWU4ZjlkMjFhNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2UwMzQxYzEyMjhhNGQwNjhlZTdlYjVmNDRiNjhiNjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuMTY2NjY2NjY2NzAwMDAxLCAxMzEuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMDZhZTJhOThkMGI0ZWY0YmM5YzY1ODFlMTBhMzRkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTUxNzAxMzJlYmM0OGYzYWY4Mzg5NzcxNWUwNDgxMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMWE1MTcwMTMyZWJjNDhmM2FmODM4OTc3MTVlMDQ4MTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhcmF5IChpbiBBdXN0cmFsaWEpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMDZhZTJhOThkMGI0ZWY0YmM5YzY1ODFlMTBhMzRkYy5zZXRDb250ZW50KGh0bWxfMWE1MTcwMTMyZWJjNDhmM2FmODM4OTc3MTVlMDQ4MTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2UwMzQxYzEyMjhhNGQwNjhlZTdlYjVmNDRiNjhiNjcuYmluZFBvcHVwKHBvcHVwXzEwNmFlMmE5OGQwYjRlZjRiYzljNjU4MWUxMGEzNGRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YjE2NDdkZDg2MjU0ZjZiYTU5YWRlOTliODIxMjZmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS41LCAxMzEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5NmFlZGQxMzM3YzRmZGJhYzc1NjhlZjM4NWFkZWE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3NmUwNzMzNGNhNzQ3ZTM5OGE2NTgzMjM3ZDY0NGNlID0gJChgPGRpdiBpZD0iaHRtbF9jNzZlMDczMzRjYTc0N2UzOThhNjU4MzIzN2Q2NDRjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dhcmQxMjQ2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldhcmRhbWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5NmFlZGQxMzM3YzRmZGJhYzc1NjhlZjM4NWFkZWE5LnNldENvbnRlbnQoaHRtbF9jNzZlMDczMzRjYTc0N2UzOThhNjU4MzIzN2Q2NDRjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YjE2NDdkZDg2MjU0ZjZiYTU5YWRlOTliODIxMjZmMC5iaW5kUG9wdXAocG9wdXBfNTk2YWVkZDEzMzdjNGZkYmFjNzU2OGVmMzg1YWRlYTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwMmY4Y2ExOTE1YzQyYWM4MDBkOTVjMmFiZWVhZjk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjMzMzMzMzMzMzI5OTk5OSwgLTY1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Yjk3Y2Q0NzA3OTM0Njc4OGFmN2FhNzZjZmQzYTViNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMDFlN2UyMGQ0ZDI0NzliYjQxOWYyMjdmN2NmMDA3OCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTAxZTdlMjBkNGQyNDc5YmI0MTlmMjI3ZjdjZjAwNzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93YXJpMTI2OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XYXJpJzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Yjk3Y2Q0NzA3OTM0Njc4OGFmN2FhNzZjZmQzYTViNC5zZXRDb250ZW50KGh0bWxfMTAxZTdlMjBkNGQyNDc5YmI0MTlmMjI3ZjdjZjAwNzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjAyZjhjYTE5MTVjNDJhYzgwMGQ5NWMyYWJlZWFmOTQuYmluZFBvcHVwKHBvcHVwXzViOTdjZDQ3MDc5MzQ2Nzg4YWY3YWE3NmNmZDNhNWI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNjBjYjEwZjI5NjI0YTY0YTg2MTQwNjRiNDZmODFmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNSwgMTI3LjU4MzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwNWRkMjdmZjU0NTQ2MTg4MDBlN2IxZWFkYzQzZjk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmNTc2OTNkYWE3YjQyZmFiZjM1MzgyNDBiZjZmNDM2ID0gJChgPGRpdiBpZD0iaHRtbF81ZjU3NjkzZGFhN2I0MmZhYmYzNTM4MjQwYmY2ZjQzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dlc3QyNjAwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldlc3QgTWFraWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwNWRkMjdmZjU0NTQ2MTg4MDBlN2IxZWFkYzQzZjk3LnNldENvbnRlbnQoaHRtbF81ZjU3NjkzZGFhN2I0MmZhYmYzNTM4MjQwYmY2ZjQzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNjBjYjEwZjI5NjI0YTY0YTg2MTQwNjRiNDZmODFmYy5iaW5kUG9wdXAocG9wdXBfZjA1ZGQyN2ZmNTQ1NDYxODgwMGU3YjFlYWRjNDNmOTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIyMjZlMzRlMmVkMjRiNjI5YmFmMzNjMWM4NjBmODZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMwLjUsIDEzMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzExMmZjYjg1MTdkNDcyYzhiZTYyZmEwMmQxMzViNjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Q0ZjYyMmQ5YTI4NGY3NmJlNDMyOTU5YzMwNjBhNjkgPSAkKGA8ZGl2IGlkPSJodG1sXzdkNGY2MjJkOWEyODRmNzZiZTQzMjk1OWMzMDYwYTY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0ZXJuIERlc2VydCAoT29sZGVhKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzExMmZjYjg1MTdkNDcyYzhiZTYyZmEwMmQxMzViNjQuc2V0Q29udGVudChodG1sXzdkNGY2MjJkOWEyODRmNzZiZTQzMjk1OWMzMDYwYTY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIyMjZlMzRlMmVkMjRiNjI5YmFmMzNjMWM4NjBmODZlLmJpbmRQb3B1cChwb3B1cF8zMTEyZmNiODUxN2Q0NzJjOGJlNjJmYTAyZDEzNWI2NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGIwOGJhYjdkODc5NDE2NzlmODZiM2M0ZjFlY2ZiYmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC4yNSwgMTI0LjgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2E3ZGYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlY2Q3ODQwYzk0YjQ0ZTU4Y2RiMGE5OGQ5ZWEyYmFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM0ZjM5NTAyZDlkZTQzNTdhYjI0MTJkYTE3Mzc3YWRjID0gJChgPGRpdiBpZD0iaHRtbF8zNGYzOTUwMmQ5ZGU0MzU3YWIyNDEyZGExNzM3N2FkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V29pc2lrYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGVjZDc4NDBjOTRiNDRlNThjZGIwYTk4ZDllYTJiYWMuc2V0Q29udGVudChodG1sXzM0ZjM5NTAyZDlkZTQzNTdhYjI0MTJkYTE3Mzc3YWRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhiMDhiYWI3ZDg3OTQxNjc5Zjg2YjNjNGYxZWNmYmJjLmJpbmRQb3B1cChwb3B1cF9kZWNkNzg0MGM5NGI0NGU1OGNkYjBhOThkOWVhMmJhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDdmZDY1NTAzZThkNDg0ZWIwNWJjMmZiNmZkMmViNTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNy41LCAtMTEwLjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjBkZTgyMWZkOTMzNDYxZjllODlhOTFkNDQ3NDg1OTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGY4Y2VjZDlmNDIzNDhlNzg3MmQ2ZmE3M2I0ODJjNzIgPSAkKGA8ZGl2IGlkPSJodG1sXzhmOGNlY2Q5ZjQyMzQ4ZTc4NzJkNmZhNzNiNDgyYzcyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveWFxdTEyNTEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WWFxdWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjBkZTgyMWZkOTMzNDYxZjllODlhOTFkNDQ3NDg1OTQuc2V0Q29udGVudChodG1sXzhmOGNlY2Q5ZjQyMzQ4ZTc4NzJkNmZhNzNiNDgyYzcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3ZmQ2NTUwM2U4ZDQ4NGViMDViYzJmYjZmZDJlYjUxLmJpbmRQb3B1cChwb3B1cF9iMGRlODIxZmQ5MzM0NjFmOWU4OWE5MWQ0NDc0ODU5NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjRhNjk3Mjc0ODZkNDkxZTg0NTZiYmI0M2EzMzU4YTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4xNjY2NjY2NjY2NywgMTQyLjU4MzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTdkZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWU1ZDhmOGY1ZWU5NDdkOGFkMmM0M2FkNTZiNTQxYmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzI1NzlkM2MwNDBhNGQ1YzliNjJjNjc5OWZlZDA5OTUgPSAkKGA8ZGl2IGlkPSJodG1sX2MyNTc5ZDNjMDQwYTRkNWM5YjYyYzY3OTlmZWQwOTk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveWVzczEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WWVzc2FuLU1heW88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWU1ZDhmOGY1ZWU5NDdkOGFkMmM0M2FkNTZiNTQxYmUuc2V0Q29udGVudChodG1sX2MyNTc5ZDNjMDQwYTRkNWM5YjYyYzY3OTlmZWQwOTk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I0YTY5NzI3NDg2ZDQ5MWU4NDU2YmJiNDNhMzM1OGE3LmJpbmRQb3B1cChwb3B1cF9lZTVkOGY4ZjVlZTk0N2Q4YWQyYzQzYWQ1NmI1NDFiZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWUwMzBhOGFmM2VmNDFhM2I0MGU5NzNiZGRjZGI0OTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjAsIDQuMzMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNDYyMWQyZTI3ODk0ZWQ2OTIwYjMyOGI2NDVjYjBkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNmFiYzQwNzQzYmY0YjRlOGUwYjUxYTM5NGY3NDdhMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTZhYmM0MDc0M2JmNGI0ZThlMGI1MWEzOTRmNzQ3YTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95b3J1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Zb3J1YmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQ2MjFkMmUyNzg5NGVkNjkyMGIzMjhiNjQ1Y2IwZGIuc2V0Q29udGVudChodG1sXzE2YWJjNDA3NDNiZjRiNGU4ZTBiNTFhMzk0Zjc0N2ExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzllMDMwYThhZjNlZjQxYTNiNDBlOTczYmRkY2RiNDk3LmJpbmRQb3B1cChwb3B1cF9mNDYyMWQyZTI3ODk0ZWQ2OTIwYjMyOGI2NDVjYjBkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTBjZTMzM2Q2MGRmNGRjMTg4ZWJlOGYwZTJiNzc4N2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMC43NSwgLTcxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNWNjMDRmYjdiY2Y0YTY1YjM4Y2NkNjU4ZGRlZDBlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODdlZDcyZDcwOTI0OTM2YmQ0MzEzZGU2ZjMwMDJjYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjg3ZWQ3MmQ3MDkyNDkzNmJkNDMxM2RlNmYzMDAyY2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95dWN1MTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZdWN1bmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzVjYzA0ZmI3YmNmNGE2NWIzOGNjZDY1OGRkZWQwZTMuc2V0Q29udGVudChodG1sX2Y4N2VkNzJkNzA5MjQ5MzZiZDQzMTNkZTZmMzAwMmNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwY2UzMzNkNjBkZjRkYzE4OGViZThmMGUyYjc3ODdmLmJpbmRQb3B1cChwb3B1cF9jNWNjMDRmYjdiY2Y0YTY1YjM4Y2NkNjU4ZGRlZDBlMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzNmY2E2NGNiYjU3NDkwYmIxODUyZWIwODM3N2NlZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy4wLCAtOTMuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhN2RmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MGQ1OGM4Yzk1YmY0MGU5ODI0ZDgzZjI3NzYwOTA3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOGVkMWY1MTUxNzg0YTUyYTdmMWFiMGE5NTA5NjUzOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjhlZDFmNTE1MTc4NGE1MmE3ZjFhYjBhOTUwOTY1MzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlpvcXVlIChDb3BhaW5hbMOhKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzBkNThjOGM5NWJmNDBlOTgyNGQ4M2YyNzc2MDkwN2Uuc2V0Q29udGVudChodG1sX2Y4ZWQxZjUxNTE3ODRhNTJhN2YxYWIwYTk1MDk2NTM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzZmNhNjRjYmI1NzQ5MGJiMTg1MmViMDgzNzdjZWQ4LmJpbmRQb3B1cChwb3B1cF83MGQ1OGM4Yzk1YmY0MGU5ODI0ZDgzZjI3NzYwOTA3ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQ4OWJhNzVjZGMyNGQzMGJiN2Y4NmZlNWUwZDU1MGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjY2NjY2NjY2NjY2OTk5OSwgMTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxMTgwOWQyZTgzMzRiMzY4OGIyYzNiZjRmNGE5NjI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjMjk1YmMwNmZkMDRlYWNiNDNhMmYzN2JhYTEzMjUwID0gJChgPGRpdiBpZD0iaHRtbF8yYzI5NWJjMDZmZDA0ZWFjYjQzYTJmMzdiYWExMzI1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FnaGUxMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFnaGVtPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxMTgwOWQyZTgzMzRiMzY4OGIyYzNiZjRmNGE5NjI4LnNldENvbnRlbnQoaHRtbF8yYzI5NWJjMDZmZDA0ZWFjYjQzYTJmMzdiYWExMzI1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NDg5YmE3NWNkYzI0ZDMwYmI3Zjg2ZmU1ZTBkNTUwYi5iaW5kUG9wdXAocG9wdXBfMzExODA5ZDJlODMzNGIzNjg4YjJjM2JmNGY0YTk2MjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5ZjNiOTlmODI5ZDRjMzk5MjJlOWE1MWZhZjY4M2MyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjY2NjY2NjY2NjcwMDAwMSwgLTYwLjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMTcwZGZkYmM4MGI0MTA3ODdhZGNmNzJiZmY1MTU3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZWU1NTk0N2Q4MmI0NGJiYWI5MzQ1YjFkODMyZDQyMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWVlNTU5NDdkODJiNDRiYmFiOTM0NWIxZDgzMmQ0MjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFpa2Fuw6E8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxNzBkZmRiYzgwYjQxMDc4N2FkY2Y3MmJmZjUxNTcyLnNldENvbnRlbnQoaHRtbF81ZWU1NTk0N2Q4MmI0NGJiYWI5MzQ1YjFkODMyZDQyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OWYzYjk5ZjgyOWQ0YzM5OTIyZTlhNTFmYWY2ODNjMi5iaW5kUG9wdXAocG9wdXBfMjE3MGRmZGJjODBiNDEwNzg3YWRjZjcyYmZmNTE1NzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwNWViMzdmM2MwOTQ5NzU4Y2EyZTZjZDBiMTcyMDgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4yNSwgLTQuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyNjUxMzhjOTVlYTQ3OWFiYzdjMGQ4Yzg3MWU4MjcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjZjlhODI0YjgwYjQ3MzdhOTZkYmJkOTIwMDg0NzUwID0gJChgPGRpdiBpZD0iaHRtbF9kY2Y5YTgyNGI4MGI0NzM3YTk2ZGJiZDkyMDA4NDc1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FpemkxMjQ4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFpemk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTI2NTEzOGM5NWVhNDc5YWJjN2MwZDhjODcxZTgyNzIuc2V0Q29udGVudChodG1sX2RjZjlhODI0YjgwYjQ3MzdhOTZkYmJkOTIwMDg0NzUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwNWViMzdmM2MwOTQ5NzU4Y2EyZTZjZDBiMTcyMDgzLmJpbmRQb3B1cChwb3B1cF81MjY1MTM4Yzk1ZWE0NzlhYmM3YzBkOGM4NzFlODI3MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODBiNDljMWM0ODk2NGNkNGIwZDA2YTU1Zjc5MjlkNDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjUsIC0xLjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGQyYjlhYzA2MzkxNDgzNDk3NWUxMWViMjE0ODA3OWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTJjZDAxNGEyYjA4NDBjODllZDlkMDYzMDIyOTYyZGMgPSAkKGA8ZGl2IGlkPSJodG1sXzUyY2QwMTRhMmIwODQwYzg5ZWQ5ZDA2MzAyMjk2MmRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWthbjEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWthbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDJiOWFjMDYzOTE0ODM0OTc1ZTExZWIyMTQ4MDc5YS5zZXRDb250ZW50KGh0bWxfNTJjZDAxNGEyYjA4NDBjODllZDlkMDYzMDIyOTYyZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODBiNDljMWM0ODk2NGNkNGIwZDA2YTU1Zjc5MjlkNDguYmluZFBvcHVwKHBvcHVwXzhkMmI5YWMwNjM5MTQ4MzQ5NzVlMTFlYjIxNDgwNzlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZDc0ODg4NzI5MDE0ZmQwYTVhYjExOGYwNzAzMmYxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS4xNjY2NjY2NjY3MDAwMDEsIDEzNC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzZTE2ZjNhNDMwMDQwYmE5MTgxM2I1ZTY4YjI1MTNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5NTNlMzVlNDQzMTQ3Njc4MzU5ZDQ1NDE3OTUzNjNlID0gJChgPGRpdiBpZD0iaHRtbF8wOTUzZTM1ZTQ0MzE0NzY3ODM1OWQ0NTQxNzk1MzYzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FsYXcxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFsYXdhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MzZTE2ZjNhNDMwMDQwYmE5MTgxM2I1ZTY4YjI1MTNhLnNldENvbnRlbnQoaHRtbF8wOTUzZTM1ZTQ0MzE0NzY3ODM1OWQ0NTQxNzk1MzYzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZDc0ODg4NzI5MDE0ZmQwYTVhYjExOGYwNzAzMmYxMC5iaW5kUG9wdXAocG9wdXBfYzNlMTZmM2E0MzAwNDBiYTkxODEzYjVlNjhiMjUxM2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY1OWQzNDMwNDQwYjRkMWRiZWUxZWVlOTgzMDFkY2UwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMCwgMjAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1YzMzNmViYmIxNjQ0MGQ5Y2RjMDhmODE2OTZhOWQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiNGJjM2JkYzAxYzQ2ZDY5YzU2MThhMjE0ZTY0ZWFjID0gJChgPGRpdiBpZD0iaHRtbF84YjRiYzNiZGMwMWM0NmQ2OWM1NjE4YTIxNGU2NGVhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FsYmExMjY3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFsYmFuaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1YzMzNmViYmIxNjQ0MGQ5Y2RjMDhmODE2OTZhOWQwLnNldENvbnRlbnQoaHRtbF84YjRiYzNiZGMwMWM0NmQ2OWM1NjE4YTIxNGU2NGVhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NTlkMzQzMDQ0MGI0ZDFkYmVlMWVlZTk4MzAxZGNlMC5iaW5kUG9wdXAocG9wdXBfNzVjMzM2ZWJiYjE2NDQwZDljZGMwOGY4MTY5NmE5ZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y1ZDE4Yzk2NmQyMDQzMGQ5OTQ5ZjFlOGQ3OWZlNGRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuNzUsIC0xNjQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0YTU4ZjRlY2I2YzQ1OTI4M2M5MGQ1YTIwZjQ3MzhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q3YTQwMTEyZjRlOTQzYWU5NGU0ZDhkM2YwODlmNTM2ID0gJChgPGRpdiBpZD0iaHRtbF9kN2E0MDExMmY0ZTk0M2FlOTRlNGQ4ZDNmMDg5ZjUzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWxldXQgKEVhc3Rlcm4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNGE1OGY0ZWNiNmM0NTkyODNjOTBkNWEyMGY0NzM4Yy5zZXRDb250ZW50KGh0bWxfZDdhNDAxMTJmNGU5NDNhZTk0ZTRkOGQzZjA4OWY1MzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjVkMThjOTY2ZDIwNDMwZDk5NDlmMWU4ZDc5ZmU0ZGYuYmluZFBvcHVwKHBvcHVwXzI0YTU4ZjRlY2I2YzQ1OTI4M2M5MGQ1YTIwZjQ3MzhjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNWY3MGNiMmI1NjI0ZmI2OGMyMDI0MzczNmEwNjE2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuMTY2NjY2NjY2NjcsIC00LjMzMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjBkZWM5YWQyMDRkNGYzYWFhMzM5YWM0NjVhMjIzMTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGViNTcxZTliYzFhNGY3NjhlN2JhOTY2MzI0MDlkZmIgPSAkKGA8ZGl2IGlkPSJodG1sXzhlYjU3MWU5YmMxYTRmNzY4ZTdiYTk2NjMyNDA5ZGZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWxsYTEyNDgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWxsYWRpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjBkZWM5YWQyMDRkNGYzYWFhMzM5YWM0NjVhMjIzMTUuc2V0Q29udGVudChodG1sXzhlYjU3MWU5YmMxYTRmNzY4ZTdiYTk2NjMyNDA5ZGZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I1ZjcwY2IyYjU2MjRmYjY4YzIwMjQzNzM2YTA2MTY5LmJpbmRQb3B1cChwb3B1cF9mMGRlYzlhZDIwNGQ0ZjNhYWEzMzlhYzQ2NWEyMjMxNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODcxYTIzZGJhZjk1NDUzYzhiM2JlOGI3NDg1OGE3YTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4zMzMzMzMzMzMzLCA4LjY2NjY2NjY2NjY2OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5ZmUxNWNlYzk2OTQwNDdhYmY4ZTM1MWI4NTcyYTg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxOTE5ZTg4Y2Q3NDRhZjJiOTI3NWY2ZjdhZjliOTY2ID0gJChgPGRpdiBpZD0iaHRtbF9mMTkxOWU4OGNkNzQ0YWYyYjkyNzVmNmY3YWY5Yjk2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Ftb28xMjQyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOWZlMTVjZWM5Njk0MDQ3YWJmOGUzNTFiODU3MmE4OC5zZXRDb250ZW50KGh0bWxfZjE5MTllODhjZDc0NGFmMmI5Mjc1ZjZmN2FmOWI5NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODcxYTIzZGJhZjk1NDUzYzhiM2JlOGI3NDg1OGE3YTIuYmluZFBvcHVwKHBvcHVwX2E5ZmUxNWNlYzk2OTQwNDdhYmY4ZTM1MWI4NTcyYTg4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMGMzMTE3OGUyMDk0MDAyYmJlODAzOWIwMWU0MWNhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMC41LCAtNzUuNDE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzZTY5ZjNlOGIxNTRjMGViOTk3MmJhYjU4ZWNlOGU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5Y2U2ZWNjMGUzZDRmNjNiZmJmN2E5NGRlNjQ3Y2JkID0gJChgPGRpdiBpZD0iaHRtbF9hOWNlNmVjYzBlM2Q0ZjYzYmZiZjdhOTRkZTY0N2NiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW11ZXNoYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjNlNjlmM2U4YjE1NGMwZWI5OTcyYmFiNThlY2U4ZTQuc2V0Q29udGVudChodG1sX2E5Y2U2ZWNjMGUzZDRmNjNiZmJmN2E5NGRlNjQ3Y2JkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UwYzMxMTc4ZTIwOTQwMDJiYmU4MDM5YjAxZTQxY2E4LmJpbmRQb3B1cChwb3B1cF82M2U2OWYzZThiMTU0YzBlYjk5NzJiYWI1OGVjZThlNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDc0Mjc4NGNkY2Q2NDkxOGE5MzIyNGNkMWY5ZTk2OGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi44MzMzMzMzMzMzLCAtOTguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxZmZlZjc1MGU3NjQxY2E5Nzg1NTk2M2UxMWM2MjJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmOGU2MzI1MTM0NTQyY2RiY2I3MWQwZmJhYjg3NjYyID0gJChgPGRpdiBpZD0iaHRtbF85ZjhlNjMyNTEzNDU0MmNkYmNiNzFkMGZiYWI4NzY2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW11emdvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MWZmZWY3NTBlNzY0MWNhOTc4NTU5NjNlMTFjNjIyYy5zZXRDb250ZW50KGh0bWxfOWY4ZTYzMjUxMzQ1NDJjZGJjYjcxZDBmYmFiODc2NjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDc0Mjc4NGNkY2Q2NDkxOGE5MzIyNGNkMWY5ZTk2OGYuYmluZFBvcHVwKHBvcHVwXzkxZmZlZjc1MGU3NjQxY2E5Nzg1NTk2M2UxMWM2MjJjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ODQyNTY3OTUzZmI0ZWM4OGY2MTA4ZGJmNmVhZTZhZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi4zMzMzMzMzMzMyOTk5OTksIC02Ny43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmZmExYjY1ZjQ0NTQ5OTc4M2VlMWU4ZGVjNzllYzgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkMTMzOTk5NmZmYTRlNmM4ZjE3OGY0YTY4YzY0OGFkID0gJChgPGRpdiBpZD0iaHRtbF9iZDEzMzk5OTZmZmE0ZTZjOGYxNzhmNGE2OGM2NDhhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FyYW8xMjQ4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFyYW9uYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZmZhMWI2NWY0NDU0OTk3ODNlZTFlOGRlYzc5ZWM4MC5zZXRDb250ZW50KGh0bWxfYmQxMzM5OTk2ZmZhNGU2YzhmMTc4ZjRhNjhjNjQ4YWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjg0MjU2Nzk1M2ZiNGVjODhmNjEwOGRiZjZlYWU2YWQuYmluZFBvcHVwKHBvcHVwXzdmZmExYjY1ZjQ0NTQ5OTc4M2VlMWU4ZGVjNzllYzgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZmI3NjZiY2I0Mjc0NDZlOTMxZjdlNGY5Y2QzMjZmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI0LjUsIDEyMS4zMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzc2Mzc0NmM2OTY0YWU5OTY5NTkzODAyZDQ3NmNkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MzY4NDM5M2U5MmE0ZGJkODM4MzIyM2ViZmNmYzJiMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDM2ODQzOTNlOTJhNGRiZDgzODMyMjNlYmZjZmMyYjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hdGF5MTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BdGF5YWw8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjc3NjM3NDZjNjk2NGFlOTk2OTU5MzgwMmQ0NzZjZGMuc2V0Q29udGVudChodG1sXzQzNjg0MzkzZTkyYTRkYmQ4MzgzMjIzZWJmY2ZjMmIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmYjc2NmJjYjQyNzQ0NmU5MzFmN2U0ZjljZDMyNmYwLmJpbmRQb3B1cChwb3B1cF8yNzc2Mzc0NmM2OTY0YWU5OTY5NTkzODAyZDQ3NmNkYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWIxYjZhNDEzNjVlNDkyMWJlMzBhNjNjOWQxOTQ4YzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41LCA0OC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzcwMjQ1Yjc2MjU4NGE2Mjk0YzczY2U1ZWYzMzJjZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQyODRlMGU4ZmQyNDBiM2FhOTAxMDY4NTcwNGMwNDIgPSAkKGA8ZGl2IGlkPSJodG1sXzQ0Mjg0ZTBlOGZkMjQwYjNhYTkwMTA2ODU3MDRjMDQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BemVyYmFpamFuaTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzcwMjQ1Yjc2MjU4NGE2Mjk0YzczY2U1ZWYzMzJjZWUuc2V0Q29udGVudChodG1sXzQ0Mjg0ZTBlOGZkMjQwYjNhYTkwMTA2ODU3MDRjMDQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFiMWI2YTQxMzY1ZTQ5MjFiZTMwYTYzYzlkMTk0OGM1LmJpbmRQb3B1cChwb3B1cF8zNzAyNDViNzYyNTg0YTYyOTRjNzNjZTVlZjMzMmNlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTIzMzk4ZWMzNDBjNDRjNjlmOWUwN2NkMjJjMTkyMDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi41LCAtNy41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWU2ODk4Y2QxNTlhNGFhNWEyMWY0NDYyYTQ0NTY4YjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWViYTlhYWEwYmRhNDUxNWIxMTA4YTMyYjViZjU2ZWUgPSAkKGA8ZGl2IGlkPSJodG1sXzVlYmE5YWFhMGJkYTQ1MTViMTEwOGEzMmI1YmY1NmVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYmFtYjEyNjkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QmFtYmFyYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTY4OThjZDE1OWE0YWE1YTIxZjQ0NjJhNDQ1NjhiNS5zZXRDb250ZW50KGh0bWxfNWViYTlhYWEwYmRhNDUxNWIxMTA4YTMyYjViZjU2ZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTIzMzk4ZWMzNDBjNDRjNjlmOWUwN2NkMjJjMTkyMDEuYmluZFBvcHVwKHBvcHVwXzVlNjg5OGNkMTU5YTRhYTVhMjFmNDQ2MmE0NDU2OGI1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGY3ZjNkYTFkMWI0OTMxODUwNzEyYmZlMmY1MjM0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjAsIC0zLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZmY4MGE0ZWZjY2Q0ZWI5OTNmZmNjNmE0ZGZmNjhiOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYzEzYWQyZTk1ZmE0MTEwOTZkOGE0ZmRmYThjZjgyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2MxM2FkMmU5NWZhNDExMDk2ZDhhNGZkZmE4Y2Y4MmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iYXNxMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CYXNxdWU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGZmODBhNGVmY2NkNGViOTkzZmZjYzZhNGRmZjY4Yjkuc2V0Q29udGVudChodG1sXzNjMTNhZDJlOTVmYTQxMTA5NmQ4YTRmZGZhOGNmODJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0ZjdmM2RhMWQxYjQ5MzE4NTA3MTJiZmUyZjUyMzQ1LmJpbmRQb3B1cChwb3B1cF80ZmY4MGE0ZWZjY2Q0ZWI5OTNmZmNjNmE0ZGZmNjhiOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWM0ZDczOTM2NmRiNDgxNzk1NzAxZTMwNTNiNzEyNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi41LCA5Mi4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0ZjU2NzNjYWQwMzQ4ZDFhM2NkMWMyYWIyYjdiYWFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxMzVkOWFmY2I1YTRjZmU5MzgzOTJiOTE1YzIyZDViID0gJChgPGRpdiBpZD0iaHRtbF9jMTM1ZDlhZmNiNWE0Y2ZlOTM4MzkyYjkxNWMyMmQ1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmF3bTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDRmNTY3M2NhZDAzNDhkMWEzY2QxYzJhYjJiN2JhYWEuc2V0Q29udGVudChodG1sX2MxMzVkOWFmY2I1YTRjZmU5MzgzOTJiOTE1YzIyZDViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzljNGQ3MzkzNjZkYjQ4MTc5NTcwMWUzMDUzYjcxMjViLmJpbmRQb3B1cChwb3B1cF80NGY1NjczY2FkMDM0OGQxYTNjZDFjMmFiMmI3YmFhYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjIzNmY2MjVmMDYzNGEzMmE3MTg4MWEwZmUzMzY5NTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC4wLCAzNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTZhZGFmYjU2ZjZiNDhlOWI1MGUyYmE0ZDE3OTIxODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTNmZWJmNGQ1MWQzNDdkMmEwMTM5NjdlYjg2M2YxZTAgPSAkKGA8ZGl2IGlkPSJodG1sXzUzZmViZjRkNTFkMzQ3ZDJhMDEzOTY3ZWI4NjNmMWUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYmVqYTEyMzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QmVqYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNmFkYWZiNTZmNmI0OGU5YjUwZTJiYTRkMTc5MjE4OS5zZXRDb250ZW50KGh0bWxfNTNmZWJmNGQ1MWQzNDdkMmEwMTM5NjdlYjg2M2YxZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjIzNmY2MjVmMDYzNGEzMmE3MTg4MWEwZmUzMzY5NTkuYmluZFBvcHVwKHBvcHVwXzE2YWRhZmI1NmY2YjQ4ZTliNTBlMmJhNGQxNzkyMTg5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTQ4M2U4NjFiMDk0MTkxYTI1OWVkMWYzYWQzYjRmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjMzMzMzMzMzMzMsIDM0LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YWRjY2I1MTE1M2M0NmY2YmRjYWMyZjlmYTAzODgwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Njk2MDYxMjQ1NTE0ODQ3YmQ4MWFlODcwZDJiYjI5ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTY5NjA2MTI0NTUxNDg0N2JkODFhZTg3MGQyYmIyOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iZXJ0MTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CZXJ0YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YWRjY2I1MTE1M2M0NmY2YmRjYWMyZjlmYTAzODgwMy5zZXRDb250ZW50KGh0bWxfNTY5NjA2MTI0NTUxNDg0N2JkODFhZTg3MGQyYmIyOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjU0ODNlODYxYjA5NDE5MWEyNTllZDFmM2FkM2I0ZmEuYmluZFBvcHVwKHBvcHVwXzdhZGNjYjUxMTUzYzQ2ZjZiZGNhYzJmOWZhMDM4ODAzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTE3MWE0OWNlODE0MGM1OTljZDRlYTQ4ZmZmOWVlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuNjY2NjY2NjY2NjY5OTk5LCA4LjgzMzMzMzMzMzMzMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzODNiMGMzNDllODQ1YjJhMTBkMTNhMWY1NzAzNThjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkOGZiNGVlODg5YjQyNjZhM2MwN2JjNzY4NjYxMzFhID0gJChgPGRpdiBpZD0iaHRtbF83ZDhmYjRlZTg4OWI0MjY2YTNjMDdiYzc2ODY2MTMxYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qmlyb208L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzODNiMGMzNDllODQ1YjJhMTBkMTNhMWY1NzAzNThjLnNldENvbnRlbnQoaHRtbF83ZDhmYjRlZTg4OWI0MjY2YTNjMDdiYzc2ODY2MTMxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84OTE3MWE0OWNlODE0MGM1OTljZDRlYTQ4ZmZmOWVlYy5iaW5kUG9wdXAocG9wdXBfMzM4M2IwYzM0OWU4NDViMmExMGQxM2ExZjU3MDM1OGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4YjdlYjY1MDdhMTQxZWVhNjg2N2VkMGYxNWZkNGQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuNDE2NjY2NjY2NjY2Njk4LCAtNC4zMzMzMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTg2ZGJkM2FiNjkzNGYwZDhhOWYzYmY0NWFjMTY3MTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGZkZGE3ZjZhZDA4NDkxZjhmZmEyYjdjYWQ3ZmNkYzYgPSAkKGA8ZGl2IGlkPSJodG1sXzRmZGRhN2Y2YWQwODQ5MWY4ZmZhMmI3Y2FkN2ZjZGM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Cb2JvIE1hZGFyw6kgKE5vcnRoZXJuKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTg2ZGJkM2FiNjkzNGYwZDhhOWYzYmY0NWFjMTY3MTYuc2V0Q29udGVudChodG1sXzRmZGRhN2Y2YWQwODQ5MWY4ZmZhMmI3Y2FkN2ZjZGM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM4YjdlYjY1MDdhMTQxZWVhNjg2N2VkMGYxNWZkNGQ1LmJpbmRQb3B1cChwb3B1cF85ODZkYmQzYWI2OTM0ZjBkOGE5ZjNiZjQ1YWMxNjcxNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWJlMmQ4MzcyYTVjNDRmNzhmZDI3M2UwOTI2YThiMjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyOC41LCA2Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmJmOGY1OWNkZTcyNGE5OThiMzUyZmU0ZjBhMzZmNDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzIxYjg3ZWNhZGFjNDQ4Mjk5NGYzNTg4N2RjYTVlY2QgPSAkKGA8ZGl2IGlkPSJodG1sXzcyMWI4N2VjYWRhYzQ0ODI5OTRmMzU4ODdkY2E1ZWNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnJhaDEyNTYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnJhaHVpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiZjhmNTljZGU3MjRhOTk4YjM1MmZlNGYwYTM2ZjQxLnNldENvbnRlbnQoaHRtbF83MjFiODdlY2FkYWM0NDgyOTk0ZjM1ODg3ZGNhNWVjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YmUyZDgzNzJhNWM0NGY3OGZkMjczZTA5MjZhOGIyMi5iaW5kUG9wdXAocG9wdXBfNmJmOGY1OWNkZTcyNGE5OThiMzUyZmU0ZjBhMzZmNDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjMTY0ZDkyMGQzYjRjMDdhZjJkYzJjMzVlYTlkNGE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuMTY2NjY2NjY2NzAwMDAxLCAxMDcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxYTk4ZGRjN2U2ZDRiODY5Y2JkNjM1ZjViMmVjZGFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0ZTE1ZjdkMjcyMTQ0Y2RhZTIxY2E4MWFhZGM2YjdkID0gJChgPGRpdiBpZD0iaHRtbF9mNGUxNWY3ZDI3MjE0NGNkYWUyMWNhODFhYWRjNmI3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xhdmUxMjQ5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJyYW88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODFhOThkZGM3ZTZkNGI4NjljYmQ2MzVmNWIyZWNkYWEuc2V0Q29udGVudChodG1sX2Y0ZTE1ZjdkMjcyMTQ0Y2RhZTIxY2E4MWFhZGM2YjdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjMTY0ZDkyMGQzYjRjMDdhZjJkYzJjMzVlYTlkNGE1LmJpbmRQb3B1cChwb3B1cF84MWE5OGRkYzdlNmQ0Yjg2OWNiZDYzNWY1YjJlY2RhYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjgwMTFkZjAzYTUyNGNhY2E4NGRiYjdkNTMzYTgzODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAtMy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTU4ZWMxOWFiYmJiNGVlNjkwMDY4MTczOGQzMTkwODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWU3MWNjNmZjYWI1NGY0NzgxMjM4MWRkNDNjMjVlZDEgPSAkKGA8ZGl2IGlkPSJodG1sXzVlNzFjYzZmY2FiNTRmNDc4MTIzODFkZDQzYzI1ZWQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnJldDEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnJldG9uPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1OGVjMTlhYmJiYjRlZTY5MDA2ODE3MzhkMzE5MDg1LnNldENvbnRlbnQoaHRtbF81ZTcxY2M2ZmNhYjU0ZjQ3ODEyMzgxZGQ0M2MyNWVkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iODAxMWRmMDNhNTI0Y2FjYTg0ZGJiN2Q1MzNhODM4MC5iaW5kUG9wdXAocG9wdXBfMTU4ZWMxOWFiYmJiNGVlNjkwMDY4MTczOGQzMTkwODUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ODBkMjNmNmY3NjRhZjBhMDcwNTA2ZWVhMmQ2NWE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTYuNzUsIDEwNC43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1MGExZDljMzc5NzQ3MjQ5MGI5MmEzNTU4YjJhNWUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkYTgxNDY3ZGYyMTQ1YzE4MTE1OTIwMjIyMmE4YWVlID0gJChgPGRpdiBpZD0iaHRtbF85ZGE4MTQ2N2RmMjE0NWMxODExNTkyMDIyMjJhOGFlZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJ1IChXZXN0ZXJuKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTUwYTFkOWMzNzk3NDcyNDkwYjkyYTM1NThiMmE1ZTEuc2V0Q29udGVudChodG1sXzlkYTgxNDY3ZGYyMTQ1YzE4MTE1OTIwMjIyMmE4YWVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4ODBkMjNmNmY3NjRhZjBhMDcwNTA2ZWVhMmQ2NWE0LmJpbmRQb3B1cChwb3B1cF81NTBhMWQ5YzM3OTc0NzI0OTBiOTJhMzU1OGIyYTVlMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjdmMTUzZDNjYTUxNDUzZmI4Y2Q3MjY0MjhlMGM2OGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi41LCAyNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTNkOTRmNjk4Mzc2NGM1OTg4NGJmMTJiY2I5OTU3ZTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjEwMDUyNWQ2ZTA2NDIyNGE5OTk3YmM4ZDM4MmM2Y2QgPSAkKGA8ZGl2IGlkPSJodG1sX2YxMDA1MjVkNmUwNjQyMjRhOTk5N2JjOGQzODJjNmNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnVsZzEyNjIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnVsZ2FyaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzZDk0ZjY5ODM3NjRjNTk4ODRiZjEyYmNiOTk1N2UzLnNldENvbnRlbnQoaHRtbF9mMTAwNTI1ZDZlMDY0MjI0YTk5OTdiYzhkMzgyYzZjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iN2YxNTNkM2NhNTE0NTNmYjhjZDcyNjQyOGUwYzY4Yy5iaW5kUG9wdXAocG9wdXBfZTNkOTRmNjk4Mzc2NGM1OTg4NGJmMTJiY2I5OTU3ZTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiM2M5YmJhNDE0ZDQzYjM5NTM5MmNkMDJkYjA4NzFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4yNSwgLTYuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZjE3M2UzODlmZGM0MzRkODk4NDcwYWRkY2Y1YjU1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZTNhMjE3NmQyZmI0YzVmYTMwYjUyNDg2MDhlOTFhZiA9ICQoYDxkaXYgaWQ9Imh0bWxfY2UzYTIxNzZkMmZiNGM1ZmEzMGI1MjQ4NjA4ZTkxYWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkLDqXTDqTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmYxNzNlMzg5ZmRjNDM0ZDg5ODQ3MGFkZGNmNWI1NWMuc2V0Q29udGVudChodG1sX2NlM2EyMTc2ZDJmYjRjNWZhMzBiNTI0ODYwOGU5MWFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiM2M5YmJhNDE0ZDQzYjM5NTM5MmNkMDJkYjA4NzFkLmJpbmRQb3B1cChwb3B1cF9iZjE3M2UzODlmZGM0MzRkODk4NDcwYWRkY2Y1YjU1YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDRjMjBjM2VhODU2NDMxNDhjNTgxZDljYWNlOTNiOTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy4zMzMzMzMzMzMzLCAtOTMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4OWI2YTQ1OWVlNTRmMzBhYzIwY2ZkZTgzNzRjZTkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4YjgyNGI0MTE1NzRlNzk5YTkzYjIzMDIyNWNiOThjID0gJChgPGRpdiBpZD0iaHRtbF85OGI4MjRiNDExNTc0ZTc5OWE5M2IyMzAyMjVjYjk4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2NhZGQxMjU2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkNhZGRvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4OWI2YTQ1OWVlNTRmMzBhYzIwY2ZkZTgzNzRjZTkzLnNldENvbnRlbnQoaHRtbF85OGI4MjRiNDExNTc0ZTc5OWE5M2IyMzAyMjVjYjk4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNGMyMGMzZWE4NTY0MzE0OGM1ODFkOWNhY2U5M2I5MC5iaW5kUG9wdXAocG9wdXBfNjg5YjZhNDU5ZWU1NGYzMGFjMjBjZmRlODM3NGNlOTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4MDA5MDZkMjBiMDQ3YWY4NzY0ODg2MWVhNDVjMDMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNSwgLTExNi4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViN2VhMjJkZTllMjQ5NmI4MmRlMWFkYmM2MDBkMzEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3Mzg4MWU1N2Y5OTRkZDZhMTY1ZWM5NTQ2ZGI0MTdmID0gJChgPGRpdiBpZD0iaHRtbF8xNzM4ODFlNTdmOTk0ZGQ2YTE2NWVjOTU0NmRiNDE3ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2NhaHUxMjY0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkNhaHVpbGxhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViN2VhMjJkZTllMjQ5NmI4MmRlMWFkYmM2MDBkMzEzLnNldENvbnRlbnQoaHRtbF8xNzM4ODFlNTdmOTk0ZGQ2YTE2NWVjOTU0NmRiNDE3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ODAwOTA2ZDIwYjA0N2FmODc2NDg4NjFlYTQ1YzAzMC5iaW5kUG9wdXAocG9wdXBfNWI3ZWEyMmRlOWUyNDk2YjgyZGUxYWRiYzYwMGQzMTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxYmQyNzcxOTNkNjQzMjU4YmVjMjUzNDljMDRlYmI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMS4xNjY2NjY2NjY2NywgLTc3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjc1MjVhYmY0OWY0OTRhODAyNjIwODM3YjAyN2IzMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNGMzYmZkYWJmOGU0ZjI1YWZjZGE5MzhlNTcyYzg3MyA9ICQoYDxkaXYgaWQ9Imh0bWxfYjRjM2JmZGFiZjhlNGYyNWFmY2RhOTM4ZTU3MmM4NzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jYW1zMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DYW1zw6E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjY3NTI1YWJmNDlmNDk0YTgwMjYyMDgzN2IwMjdiMzAuc2V0Q29udGVudChodG1sX2I0YzNiZmRhYmY4ZTRmMjVhZmNkYTkzOGU1NzJjODczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IxYmQyNzcxOTNkNjQzMjU4YmVjMjUzNDljMDRlYmI4LmJpbmRQb3B1cChwb3B1cF9iNjc1MjVhYmY0OWY0OTRhODAyNjIwODM3YjAyN2IzMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGYyNjMxZjc5YTUwNDYwYmE3NjRmYzg4ZDI4ZWM0NTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMy4wLCAxMTMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0MzU0NDZjMjdiMDQ4N2Q4NTdlNGJlZGJjYjcwYTU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkNGYwY2QyZjk1NTRkODM5ZTQxNGVlYzMwNWEwYzIzID0gJChgPGRpdiBpZD0iaHRtbF9jZDRmMGNkMmY5NTU0ZDgzOWU0MTRlZWMzMDVhMGMyMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2NhbnQxMjM2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkNhbnRvbmVzZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDM1NDQ2YzI3YjA0ODdkODU3ZTRiZWRiY2I3MGE1OC5zZXRDb250ZW50KGh0bWxfY2Q0ZjBjZDJmOTU1NGQ4MzllNDE0ZWVjMzA1YTBjMjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGYyNjMxZjc5YTUwNDYwYmE3NjRmYzg4ZDI4ZWM0NTYuYmluZFBvcHVwKHBvcHVwXzQ0MzU0NDZjMjdiMDQ4N2Q4NTdlNGJlZGJjYjcwYTU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNGFhNjljMTY2M2U0NGVjYmM0MTI1YjM4NDFhY2M3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjc1LCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNmViMzZlZmY1MzE0OTI5OWI1MDQwNWZlNjhmMTcxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZTA4NWE1ZDM3NjQ0M2FmOGEzNGI0N2I1NjRmMWEyNCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWUwODVhNWQzNzY0NDNhZjhhMzRiNDdiNTY0ZjFhMjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zdGFuMTI4OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DYXRhbGFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2ZWIzNmVmZjUzMTQ5Mjk5YjUwNDA1ZmU2OGYxNzEyLnNldENvbnRlbnQoaHRtbF9hZTA4NWE1ZDM3NjQ0M2FmOGEzNGI0N2I1NjRmMWEyNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNGFhNjljMTY2M2U0NGVjYmM0MTI1YjM4NDFhY2M3Ni5iaW5kUG9wdXAocG9wdXBfMjZlYjM2ZWZmNTMxNDkyOTliNTA0MDVmZTY4ZjE3MTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwM2JmYTIyOTUwZDQ3NTc5NDU5ZGY1NjNmNWUzN2ZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC42NjY2NjY2NjY2NjcsIC03OS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmE4ZDg1YzMwZTIxNGI2MWEyMzEyYWY2Yzg4MjMyNDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzNkZjBiYTkyNzcxNGMxZjk5ZmZhZWZkMTYzM2ZlNzAgPSAkKGA8ZGl2IGlkPSJodG1sXzczZGYwYmE5Mjc3MTRjMWY5OWZmYWVmZDE2MzNmZTcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXlhcGE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhOGQ4NWMzMGUyMTRiNjFhMjMxMmFmNmM4ODIzMjQ4LnNldENvbnRlbnQoaHRtbF83M2RmMGJhOTI3NzE0YzFmOTlmZmFlZmQxNjMzZmU3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MDNiZmEyMjk1MGQ0NzU3OTQ1OWRmNTYzZjVlMzdmYS5iaW5kUG9wdXAocG9wdXBfZmE4ZDg1YzMwZTIxNGI2MWEyMzEyYWY2Yzg4MjMyNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0N2I0ZWJmODllYTQ3NzhiNTkyN2M2YWU4NDM2NWVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMCwgMTA1LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNzBhNGIwNmU2MjY0YTk4ODRhMDBiMzY0ZTczYTNhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NjVlZWJlZWUzZGU0NWYwOWYwNzFmNDA4Njc0NmY5NiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjY1ZWViZWVlM2RlNDVmMDlmMDcxZjQwODY3NDZmOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoYW0gKFdlc3Rlcm4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNzBhNGIwNmU2MjY0YTk4ODRhMDBiMzY0ZTczYTNhNy5zZXRDb250ZW50KGh0bWxfNjY1ZWViZWVlM2RlNDVmMDlmMDcxZjQwODY3NDZmOTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzQ3YjRlYmY4OWVhNDc3OGI1OTI3YzZhZTg0MzY1ZWEuYmluZFBvcHVwKHBvcHVwX2I3MGE0YjA2ZTYyNjRhOTg4NGEwMGIzNjRlNzNhM2E3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MDZiMGI3MTYzODU0NmU1OWJiZjYwNmMzMDFiZmI1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjQ1LCAxNDQuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNTdkODdhN2YxZWY0YWMyYjg1YTVlOTI4MjhmM2UyZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MjdlOGMwMGMxYWY0MTFjOTViOGIzMWE0NmVhYjk5MyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjI3ZThjMDBjMWFmNDExYzk1YjhiMzFhNDZlYWI5OTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jaGFtMTMxMiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DaGFtb3JybzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNTdkODdhN2YxZWY0YWMyYjg1YTVlOTI4MjhmM2UyZi5zZXRDb250ZW50KGh0bWxfNjI3ZThjMDBjMWFmNDExYzk1YjhiMzFhNDZlYWI5OTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjA2YjBiNzE2Mzg1NDZlNTliYmY2MDZjMzAxYmZiNTIuYmluZFBvcHVwKHBvcHVwX2Y1N2Q4N2E3ZjFlZjRhYzJiODVhNWU5MjgyOGYzZTJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTIxNGZkMmIwNzQ0NDYyYTg0MjA1NDFmNjkxYWU2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIzLjMzMzMzMzMzMzMsIDkzLjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTc3YWU5N2MwN2Y0MGU5OGUzMmY5ZTcwODc3YThmMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMzMxN2IxM2YwNjM0MzZkOWFiZDg2MjlmOTkwOWFhNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjMzMTdiMTNmMDYzNDM2ZDlhYmQ4NjI5Zjk5MDlhYTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoaW4gKFRpZGRpbSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5NzdhZTk3YzA3ZjQwZTk4ZTMyZjllNzA4NzdhOGYzLnNldENvbnRlbnQoaHRtbF8yMzMxN2IxM2YwNjM0MzZkOWFiZDg2MjlmOTkwOWFhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYTIxNGZkMmIwNzQ0NDYyYTg0MjA1NDFmNjkxYWU2NC5iaW5kUG9wdXAocG9wdXBfZTk3N2FlOTdjMDdmNDBlOThlMzJmOWU3MDg3N2E4ZjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2YmU5OTIwMjk3YTRkY2U4NTcxMWJhYmQwYTkyYjZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMzMzMzMzMzMzMywgLTk1LjkxNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzcwY2JjZTNhMzY0MzVkOGUxZWMwZjQ5YTBlZmRiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTkwMTA4ZjJhYjQ0NzRiODMwMzlhMDExODMwOTZmNSA9ICQoYDxkaXYgaWQ9Imh0bWxfODE5MDEwOGYyYWI0NDc0YjgzMDM5YTAxMTgzMDk2ZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoaW5hbnRlYyAoTGVhbGFvKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTM3MGNiY2UzYTM2NDM1ZDhlMWVjMGY0OWEwZWZkYmYuc2V0Q29udGVudChodG1sXzgxOTAxMDhmMmFiNDQ3NGI4MzAzOWEwMTE4MzA5NmY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE2YmU5OTIwMjk3YTRkY2U4NTcxMWJhYmQwYTkyYjZiLmJpbmRQb3B1cChwb3B1cF9lMzcwY2JjZTNhMzY0MzVkOGUxZWMwZjQ5YTBlZmRiZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTVmZmM0MDUwODc1NDk0NzlmZmYyMzRjZGNiMTRmZTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1NS41LCA0Ny41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWRjYzIxNzU5MWZhNDAyN2JkYjJiZGMyYTQ4NDVhZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTk3NTVhOTRkZTM1NDQ1OGE4YTU5ZjMwZDIwZTkwNzkgPSAkKGA8ZGl2IGlkPSJodG1sXzE5NzU1YTk0ZGUzNTQ0NThhOGE1OWYzMGQyMGU5MDc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2h1djEyNTUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2h1dmFzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZGNjMjE3NTkxZmE0MDI3YmRiMmJkYzJhNDg0NWFlNi5zZXRDb250ZW50KGh0bWxfMTk3NTVhOTRkZTM1NDQ1OGE4YTU5ZjMwZDIwZTkwNzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTVmZmM0MDUwODc1NDk0NzlmZmYyMzRjZGNiMTRmZTMuYmluZFBvcHVwKHBvcHVwXzVkY2MyMTc1OTFmYTQwMjdiZGIyYmRjMmE0ODQ1YWU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOTBiMzZjYmUyMjI0ODhiYmYwNjYxZDg2Nzk2Y2YyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjAsIDIyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wY2U5MzEwZjU4ODc0NmMzYWE1ODRhZTlmZjUxODkzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NWVjNjE5YjcxNzI0OTcyODRkMTM5Y2FhNTA1ZjljMCA9ICQoYDxkaXYgaWQ9Imh0bWxfODVlYzYxOWI3MTcyNDk3Mjg0ZDEzOWNhYTUwNWY5YzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNpTHViYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGNlOTMxMGY1ODg3NDZjM2FhNTg0YWU5ZmY1MTg5M2Iuc2V0Q29udGVudChodG1sXzg1ZWM2MTliNzE3MjQ5NzI4NGQxMzljYWE1MDVmOWMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA5MGIzNmNiZTIyMjQ4OGJiZjA2NjFkODY3OTZjZjI3LmJpbmRQb3B1cChwb3B1cF8wY2U5MzEwZjU4ODc0NmMzYWE1ODRhZTlmZjUxODkzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzdkNjc3Mzg2OWZmNDk5YjkyYWYxYWNkMmYxYmM2MTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMi4zMzMzMzMzMzMzLCAtMTE1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZWM0YTI2ZDc3ZjU0YWYyODM4NTVhNzg0ZmFjMDliZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMGVhMGE4YWRlMDU0ZjNkYTA3MWEyOTRmNjgwZmZlOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTBlYTBhOGFkZTA1NGYzZGEwNzFhMjk0ZjY4MGZmZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jb2NvMTI2MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Db2NvcGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWVjNGEyNmQ3N2Y1NGFmMjgzODU1YTc4NGZhYzA5YmYuc2V0Q29udGVudChodG1sX2UwZWEwYThhZGUwNTRmM2RhMDcxYTI5NGY2ODBmZmU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM3ZDY3NzM4NjlmZjQ5OWI5MmFmMWFjZDJmMWJjNjE1LmJpbmRQb3B1cChwb3B1cF8xZWM0YTI2ZDc3ZjU0YWYyODM4NTVhNzg0ZmFjMDliZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzQxNTdmMDFmOTgzNGJhMWExMmY4OTFhYTJjZGM4YzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjU4MzMzMzMzMzMzMDAwMSwgLTAuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYxYzc2Yzc3NDk0NjQ4YzBiYTEyNGM3M2YyYmUyNjIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhNTYxNDhiOWJkZDRmZWE5Njk2OTVmN2Y2ZTRhNTJjID0gJChgPGRpdiBpZD0iaHRtbF9iYTU2MTQ4YjliZGQ0ZmVhOTY5Njk1ZjdmNmU0YTUyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2RhZ2IxMjQ2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkRhZ2Jhbmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjFjNzZjNzc0OTQ2NDhjMGJhMTI0YzczZjJiZTI2MjMuc2V0Q29udGVudChodG1sX2JhNTYxNDhiOWJkZDRmZWE5Njk2OTVmN2Y2ZTRhNTJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc0MTU3ZjAxZjk4MzRiYTFhMTJmODkxYWEyY2RjOGM5LmJpbmRQb3B1cChwb3B1cF82MWM3NmM3NzQ5NDY0OGMwYmExMjRjNzNmMmJlMjYyMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWU2YTdjYmFlODMwNDZlYWIyZTgwYmViZjc1YWQ4YzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAxMjQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0MWQ4MTMyMzRiZTQ3ZWM5YjNlMDM1ODQ4YmU2NmUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1NDk2ZDhkNDMyYTQyZjViNGU2ZWE0OTExNzNmMDVmID0gJChgPGRpdiBpZD0iaHRtbF9jNTQ5NmQ4ZDQzMmE0MmY1YjRlNmVhNDkxMTczZjA1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2RhdXIxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkRhZ3VyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0MWQ4MTMyMzRiZTQ3ZWM5YjNlMDM1ODQ4YmU2NmUwLnNldENvbnRlbnQoaHRtbF9jNTQ5NmQ4ZDQzMmE0MmY1YjRlNmVhNDkxMTczZjA1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZTZhN2NiYWU4MzA0NmVhYjJlODBiZWJmNzVhZDhjNS5iaW5kUG9wdXAocG9wdXBfZTQxZDgxMzIzNGJlNDdlYzliM2UwMzU4NDhiZTY2ZTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5MGQ1NzFlYTQwNzRkN2I4NGYyMDRkNmUzNDNlNTc0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMjUsIDI1LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjQwNDRhZmNiZTVlNDgxMjgzN2Q2ZDQ4N2M2ZDgzYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTk5MmRmMjkxZWQ1NDY2YWE1OTZjNjU5ZTdmZjMyYTMgPSAkKGA8ZGl2IGlkPSJodG1sXzU5OTJkZjI5MWVkNTQ2NmFhNTk2YzY1OWU3ZmYzMmEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EYWp1IChEYXIgRnVyKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQwNDRhZmNiZTVlNDgxMjgzN2Q2ZDQ4N2M2ZDgzYjUuc2V0Q29udGVudChodG1sXzU5OTJkZjI5MWVkNTQ2NmFhNTk2YzY1OWU3ZmYzMmEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E5MGQ1NzFlYTQwNzRkN2I4NGYyMDRkNmUzNDNlNTc0LmJpbmRQb3B1cChwb3B1cF9mNDA0NGFmY2JlNWU0ODEyODM3ZDZkNDg3YzZkODNiNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzkxMzg1MTFmMTc3NDkyZGIwYjI1ZDQ2ZjBjNWM3YzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjUsIC04LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTkzODA4Nzc2ZjQ0MzVjYjFhNWQ1NmFmM2FiZjUxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMDZhNzI0YWM2NjI0MmRlODU1YzgzODY3ZGNkOTdlZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDA2YTcyNGFjNjYyNDJkZTg1NWM4Mzg2N2RjZDk3ZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9kYW5uMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5EYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTk5MzgwODc3NmY0NDM1Y2IxYTVkNTZhZjNhYmY1MTcuc2V0Q29udGVudChodG1sXzAwNmE3MjRhYzY2MjQyZGU4NTVjODM4NjdkY2Q5N2VkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc5MTM4NTExZjE3NzQ5MmRiMGIyNWQ0NmYwYzVjN2M1LmJpbmRQb3B1cChwb3B1cF9lOTkzODA4Nzc2ZjQ0MzVjYjFhNWQ1NmFmM2FiZjUxNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmE4NWQ3ZGFjMDJkNDk4NGJlMTYyODI1NTI0OWFhNTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4xNjY2NjY2NjY3MDAwMDEsIDE4LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDJjNDBmNjU1NjQ0YzUwYmY0NTYyOTk4N2RiNDE3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNTU5Y2Q2NDdiYmE0MWU1YWIwOTk3YTU0MDUyM2ZmZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDU1OWNkNjQ3YmJhNDFlNWFiMDk5N2E1NDA1MjNmZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRhbmdhbMOpYXQgKFdlc3Rlcm4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDJjNDBmNjU1NjQ0YzUwYmY0NTYyOTk4N2RiNDE3Zi5zZXRDb250ZW50KGh0bWxfMDU1OWNkNjQ3YmJhNDFlNWFiMDk5N2E1NDA1MjNmZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmE4NWQ3ZGFjMDJkNDk4NGJlMTYyODI1NTI0OWFhNTMuYmluZFBvcHVwKHBvcHVwXzZkMmM0MGY2NTU2NDRjNTBiZjQ1NjI5OTg3ZGI0MTdmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNWQyNDczYmU5NDU0MjY4OTViODQ2NjRiODY0NGRiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjY2NjY2NjY2NjcsIC0xMTYuMTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWMxN2ExNjhlNzYwNDc1NWJlMWM5ZWI3ZmJjYzRkNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTkyN2M2Y2MxYWZkNDVhNWFkZmY3MjM5MTRjNTM4ZjAgPSAkKGA8ZGl2IGlkPSJodG1sXzk5MjdjNmNjMWFmZDQ1YTVhZGZmNzIzOTE0YzUzOGYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EaWVndWXDsW8gKE1lc2EgR3JhbmRlKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWMxN2ExNjhlNzYwNDc1NWJlMWM5ZWI3ZmJjYzRkNTYuc2V0Q29udGVudChodG1sXzk5MjdjNmNjMWFmZDQ1YTVhZGZmNzIzOTE0YzUzOGYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1ZDI0NzNiZTk0NTQyNjg5NWI4NDY2NGI4NjQ0ZGJhLmJpbmRQb3B1cChwb3B1cF9hYzE3YTE2OGU3NjA0NzU1YmUxYzllYjdmYmNjNGQ1NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjNjNjI4MjU2MWJlNDI4ZWE3MzY3MWI0OWFlOTk1ZGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjUsIDI4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDExN2RjNDQ2MTQ0ZTE3YTg3NzIyM2NmYzk2MGFiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMGYyYjQxN2FkYjc0MzMwYTNlMWM0OTEzZWFiYmVmMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDBmMmI0MTdhZGI3NDMzMGEzZTFjNDkxM2VhYmJlZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9kaW5rMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5EaW5rYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZDExN2RjNDQ2MTQ0ZTE3YTg3NzIyM2NmYzk2MGFiMi5zZXRDb250ZW50KGh0bWxfMDBmMmI0MTdhZGI3NDMzMGEzZTFjNDkxM2VhYmJlZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjNjNjI4MjU2MWJlNDI4ZWE3MzY3MWI0OWFlOTk1ZGYuYmluZFBvcHVwKHBvcHVwX2VkMTE3ZGM0NDYxNDRlMTdhODc3MjIzY2ZjOTYwYWIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNmVlMDE0NWNjNmQ0NDQ4YjU5YzU1NzY0NGMyNjNkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjAsIC0xNi4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljN2M2MmFkM2I4OTRkYjk4NDE3YWEzOThkMjBjYjllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhMzVmY2M2YTNlODQ3ZDg5MzdiODhiNmJhZjg4OTUwID0gJChgPGRpdiBpZD0iaHRtbF8wYTM1ZmNjNmEzZTg0N2Q4OTM3Yjg4YjZiYWY4ODk1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGlvbGEtRm9nbnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljN2M2MmFkM2I4OTRkYjk4NDE3YWEzOThkMjBjYjllLnNldENvbnRlbnQoaHRtbF8wYTM1ZmNjNmEzZTg0N2Q4OTM3Yjg4YjZiYWY4ODk1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNmVlMDE0NWNjNmQ0NDQ4YjU5YzU1NzY0NGMyNjNkOS5iaW5kUG9wdXAocG9wdXBfOWM3YzYyYWQzYjg5NGRiOTg0MTdhYTM5OGQyMGNiOWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliYTRiZGJjNDFlYzQ4NmJiOWVhZjVjYTYwNTNhNWNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI4LjAsIDEzOS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQ2ODEyYWM2YzQ3NGE0ZjhmNGRiNjEwMTRiNmNmZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGE1YzI5ZDBiNmRlNDc1M2EyMWNlM2NhZTMxMjY5N2EgPSAkKGA8ZGl2IGlkPSJodG1sXzBhNWMyOWQwYjZkZTQ3NTNhMjFjZTNjYWUzMTI2OTdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EaXlhcmk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkNjgxMmFjNmM0NzRhNGY4ZjRkYjYxMDE0YjZjZmVmLnNldENvbnRlbnQoaHRtbF8wYTVjMjlkMGI2ZGU0NzUzYTIxY2UzY2FlMzEyNjk3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YmE0YmRiYzQxZWM0ODZiYjllYWY1Y2E2MDUzYTVjZS5iaW5kUG9wdXAocG9wdXBfZWQ2ODEyYWM2YzQ3NGE0ZjhmNGRiNjEwMTRiNmNmZWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhkYmJlNmU1MjY2ZjQ4YzdhOTY2NjUyYWI4ZTQ5NzIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4xNjY2NjY2NjY2Njk5OTksIDM2LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGFiOGJhOGY4N2M0OGI5YjQzMjg0NjFkYmRjNzYzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOWI1ODlkYzhkNjA0NTdiYmI1YmU3MWQyODc0MjA0NCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDliNTg5ZGM4ZDYwNDU3YmJiNWJlNzFkMjg3NDIwNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRpemk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y4YWI4YmE4Zjg3YzQ4YjliNDMyODQ2MWRiZGM3NjNkLnNldENvbnRlbnQoaHRtbF9kOWI1ODlkYzhkNjA0NTdiYmI1YmU3MWQyODc0MjA0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZGJiZTZlNTI2NmY0OGM3YTk2NjY1MmFiOGU0OTcyMC5iaW5kUG9wdXAocG9wdXBfZjhhYjhiYThmODdjNDhiOWI0MzI4NDYxZGJkYzc2M2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0ZjU0ZjljNDRiNTRjYjRhYjVlNTM0NGQzYjllZGVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjY2NjY2NjY2NjcwMDAwMSwgMTM2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MjVlMjU0MmVlODY0MWMyYmViYzBkZWI1MDU0ZTI2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NGFmOTRiZDRlNWU0YjEyYTk2NWI1MzVlYWM1OTM5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfODRhZjk0YmQ0ZTVlNGIxMmE5NjViNTM1ZWFjNTkzOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9kamFwMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5EamFwdTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MjVlMjU0MmVlODY0MWMyYmViYzBkZWI1MDU0ZTI2My5zZXRDb250ZW50KGh0bWxfODRhZjk0YmQ0ZTVlNGIxMmE5NjViNTM1ZWFjNTkzOTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDRmNTRmOWM0NGI1NGNiNGFiNWU1MzQ0ZDNiOWVkZWEuYmluZFBvcHVwKHBvcHVwXzQyNWUyNTQyZWU4NjQxYzJiZWJjMGRlYjUwNTRlMjYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMTMwNmU0N2Q4YWM0ZGViODc5YjU5ZDQwNTVlODc4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzguNjY2NjY2NjY2NjY5OTk5LCAxMy4wODMzMzMzMzMyOTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZWE3NzE2OGJjOTk0MTI5OTY0YzY5ZWRkN2Q0MjlhYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzdiMzg5MWI1MDg0MGJhYWMxYTlkNTAzOWY5MjdiNCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzM3YjM4OTFiNTA4NDBiYWFjMWE5ZDUwMzlmOTI3YjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9kb3lhMTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Eb3lheW88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWVhNzcxNjhiYzk5NDEyOTk2NGM2OWVkZDdkNDI5YWIuc2V0Q29udGVudChodG1sX2MzN2IzODkxYjUwODQwYmFhYzFhOWQ1MDM5ZjkyN2I0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UxMzA2ZTQ3ZDhhYzRkZWI4NzliNTlkNDA1NWU4NzhkLmJpbmRQb3B1cChwb3B1cF9lZWE3NzE2OGJjOTk0MTI5OTY0YzY5ZWRkN2Q0MjlhYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDViZThlODlhMWVmNGM4ZWIzNGM4MTJjNjAyNWZlNjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjQxNjY2NjY2NjY2OTk5OSwgOC42NjY2NjY2NjY2Njk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMWNlMmVmY2NmMGY0OTBlYmY4M2E1ZGRlYWJhMTA1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYmEwMmFiMjdhYjU0MjcyYjQ5M2FmMDRlYzg0ZGJlOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYmJhMDJhYjI3YWI1NDI3MmI0OTNhZjA0ZWM4NGRiZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9lamFnMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5FamFnaGFtPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxY2UyZWZjY2YwZjQ5MGViZjgzYTVkZGVhYmExMDViLnNldENvbnRlbnQoaHRtbF9iYmEwMmFiMjdhYjU0MjcyYjQ5M2FmMDRlYzg0ZGJlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNWJlOGU4OWExZWY0YzhlYjM0YzgxMmM2MDI1ZmU2My5iaW5kUG9wdXAocG9wdXBfMzFjZTJlZmNjZjBmNDkwZWJmODNhNWRkZWFiYTEwNWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0ZDc3NThhMDEyMjRmOWViOGIwZjk4NTg1ZWFmODQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMCwgMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDJlOWUwZjI0ZjE3NDhhOTkwNjc4MWIxODU4MjI1YjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWEzY2FiMDUwMDRiNDhkMmE5OTJmYjMyZjIzZjIxYmIgPSAkKGA8ZGl2IGlkPSJodG1sXzVhM2NhYjA1MDA0YjQ4ZDJhOTkyZmIzMmYyM2YyMWJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RW5nbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMmU5ZTBmMjRmMTc0OGE5OTA2NzgxYjE4NTgyMjViNy5zZXRDb250ZW50KGh0bWxfNWEzY2FiMDUwMDRiNDhkMmE5OTJmYjMyZjIzZjIxYmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDRkNzc1OGEwMTIyNGY5ZWI4YjBmOTg1ODVlYWY4NDguYmluZFBvcHVwKHBvcHVwX2QyZTllMGYyNGYxNzQ4YTk5MDY3ODFiMTg1ODIyNWI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NjhkNjUyZWViMGE0YWRhYjk5ZWEyM2I1MTNjYjZhZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy44MzMzMzMzMzMzLCAxNzguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljODc3N2Y5OTY1ZTQyMDM5ZGEzYmQ5NDBjODE2YWE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxY2Y5ODMzMmQzMzQ5YzVhZTE1NWQ5MjQ5MDQ3MjhiID0gJChgPGRpdiBpZD0iaHRtbF9mMWNmOTgzMzJkMzM0OWM1YWUxNTVkOTI0OTA0NzI4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2ZpamkxMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZpamlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Yzg3NzdmOTk2NWU0MjAzOWRhM2JkOTQwYzgxNmFhNy5zZXRDb250ZW50KGh0bWxfZjFjZjk4MzMyZDMzNDljNWFlMTU1ZDkyNDkwNDcyOGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTY4ZDY1MmVlYjBhNGFkYWI5OWVhMjNiNTEzY2I2YWQuYmluZFBvcHVwKHBvcHVwXzljODc3N2Y5OTY1ZTQyMDM5ZGEzYmQ5NDBjODE2YWE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNDUzMDM5M2ZmMTE0NjY4OTgxOGQ5MzA0OWZmOWFkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjAsIDIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwY2MzOTBhMDNjNjRiOTBiODY0NjdmZjI1NTZmNTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0ZDIzZmIwODQyOTRmMTBiMjAwM2IxM2UwZGFhYjdjID0gJChgPGRpdiBpZD0iaHRtbF9kNGQyM2ZiMDg0Mjk0ZjEwYjIwMDNiMTNlMGRhYWI3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjkwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZyZW5jaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGNjMzkwYTAzYzY0YjkwYjg2NDY3ZmYyNTU2ZjU1My5zZXRDb250ZW50KGh0bWxfZDRkMjNmYjA4NDI5NGYxMGIyMDAzYjEzZTBkYWFiN2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzQ1MzAzOTNmZjExNDY2ODk4MThkOTMwNDlmZjlhZDYuYmluZFBvcHVwKHBvcHVwXzUwY2MzOTBhMDNjNjRiOTBiODY0NjdmZjI1NTZmNTUzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hODg3MDgxNDAwMjc0OTQ1YmFkYjViNzg3MzM0MTRlOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjAsIC0zNy41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzFkNzMyODMxMWFjNDdmYWJiOGQwNmY3ODBiNzY2NWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Y1ZWRlODcxY2QyNGFiYzk2YTEwYWY4Mjg0MzkwN2EgPSAkKGA8ZGl2IGlkPSJodG1sXzdmNWVkZTg3MWNkMjRhYmM5NmExMGFmODI4NDM5MDdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZnVsbjEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RnVsbmnDtDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MWQ3MzI4MzExYWM0N2ZhYmI4ZDA2Zjc4MGI3NjY1YS5zZXRDb250ZW50KGh0bWxfN2Y1ZWRlODcxY2QyNGFiYzk2YTEwYWY4Mjg0MzkwN2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTg4NzA4MTQwMDI3NDk0NWJhZGI1Yjc4NzMzNDE0ZTkuYmluZFBvcHVwKHBvcHVwXzcxZDczMjgzMTFhYzQ3ZmFiYjhkMDZmNzgwYjc2NjVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MzBkOGI0MzkwODA0NjgxYjRjY2FmNDdkYjg3NzE2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy4wODMzMzMzMzMzLCAxMzcuMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZjNmY2FkNjc4Y2I0Mzg1OGI2MzlkMzhhN2M3NTdlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMWY5MTVjNWRiODc0Y2MyOTU4OGViYjEwYmE3ZGUxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjFmOTE1YzVkYjg3NGNjMjk1ODhlYmIxMGJhN2RlMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9nYXJhMTI2OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HYXJyd2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGYzZmNhZDY3OGNiNDM4NThiNjM5ZDM4YTdjNzU3ZTguc2V0Q29udGVudChodG1sX2IxZjkxNWM1ZGI4NzRjYzI5NTg4ZWJiMTBiYTdkZTEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzMGQ4YjQzOTA4MDQ2ODFiNGNjYWY0N2RiODc3MTY3LmJpbmRQb3B1cChwb3B1cF9kZjNmY2FkNjc4Y2I0Mzg1OGI2MzlkMzhhN2M3NTdlOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWE3YTcyYTM4MTg5NGVkNzhhMGQ2MDVkNDk3OGNhOTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wLCAxMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWViOTFkMjE5MmFmNDcwMzg4NjIwNjgxNGY4ODU2YTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGQ5MzJkNzE1YWUxNDcxMjhkOThjNDNiMmRmMWUzNWUgPSAkKGA8ZGl2IGlkPSJodG1sXzBkOTMyZDcxNWFlMTQ3MTI4ZDk4YzQzYjJkZjFlMzVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2VybWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlYjkxZDIxOTJhZjQ3MDM4ODYyMDY4MTRmODg1NmE5LnNldENvbnRlbnQoaHRtbF8wZDkzMmQ3MTVhZTE0NzEyOGQ5OGM0M2IyZGYxZTM1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYTdhNzJhMzgxODk0ZWQ3OGEwZDYwNWQ0OTc4Y2E5NC5iaW5kUG9wdXAocG9wdXBfNWViOTFkMjE5MmFmNDcwMzg4NjIwNjgxNGY4ODU2YTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczMzE5N2IwM2VjMjQ2NDZiMDRlOTFlMzEyZDZhZDYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE4LjMzMzMzMzMzMzMsIDEyNi4zMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZjQxNmQyMDU3OTg0NzllOWM5ZTk2MWZlMDU2MTA2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YThlZWMxZWUxYzE0ZTFiOTA3N2QyMjFmZTQ4MGI0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWE4ZWVjMWVlMWMxNGUxYjkwNzdkMjIxZmU0ODBiNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9nb29uMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Hb29uaXlhbmRpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmNDE2ZDIwNTc5ODQ3OWU5YzllOTYxZmUwNTYxMDY5LnNldENvbnRlbnQoaHRtbF85YThlZWMxZWUxYzE0ZTFiOTA3N2QyMjFmZTQ4MGI0Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MzMxOTdiMDNlYzI0NjQ2YjA0ZTkxZTMxMmQ2YWQ2My5iaW5kUG9wdXAocG9wdXBfNWY0MTZkMjA1Nzk4NDc5ZTljOWU5NjFmZTA1NjEwNjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwOTEwNjk2MDc0MzRiM2JiZWFmNTllOGFkMDZmODlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMCwgOTIuNjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3Mjg2MGQ1NGU5ODQyYjdiZmRhY2UzMDQ2NzJlMWI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0YjBmYTVkZWE0NzQ4NGM4ZjU5MDliOWFhZGQ4Zjg4ID0gJChgPGRpdiBpZD0iaHRtbF82NGIwZmE1ZGVhNDc0ODRjOGY1OTA5YjlhYWRkOGY4OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2dyZWExMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdyZWF0IEFuZGFtYW5lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDcyODYwZDU0ZTk4NDJiN2JmZGFjZTMwNDY3MmUxYjYuc2V0Q29udGVudChodG1sXzY0YjBmYTVkZWE0NzQ4NGM4ZjU5MDliOWFhZGQ4Zjg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEwOTEwNjk2MDc0MzRiM2JiZWFmNTllOGFkMDZmODlmLmJpbmRQb3B1cChwb3B1cF9kNzI4NjBkNTRlOTg0MmI3YmZkYWNlMzA0NjcyZTFiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTdkMTNhNjhkMjI1NGFhM2E4NDA3Yzc1OTllZTYzZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjAsIC04LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODEzZmU1M2IyNzU0Y2YwOTJkOTkwYWFhOWNlYzJkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZDhmNTg4N2M5Njk0NGIxYWQ5ODg0MDEwZmM0Y2ZiZSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2Q4ZjU4ODdjOTY5NDRiMWFkOTg4NDAxMGZjNGNmYmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ncmViMTI1NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HcmVibzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODEzZmU1M2IyNzU0Y2YwOTJkOTkwYWFhOWNlYzJkNC5zZXRDb250ZW50KGh0bWxfM2Q4ZjU4ODdjOTY5NDRiMWFkOTg4NDAxMGZjNGNmYmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTdkMTNhNjhkMjI1NGFhM2E4NDA3Yzc1OTllZTYzZjIuYmluZFBvcHVwKHBvcHVwX2Q4MTNmZTUzYjI3NTRjZjA5MmQ5OTBhYWE5Y2VjMmQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZDBmMzJlNTUyOWQ0ZGU4ODI2MGI5Zjc3ZDMyNjI4OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAsIDIyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzFiYzBkYjJjYjg0MjdkYTZkNmU0MmUwYWU5ZDY1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZDNiM2RjZGRiYzc0ZTc4YmViNWU1OTM3NzljNGRjNSA9ICQoYDxkaXYgaWQ9Imh0bWxfYmQzYjNkY2RkYmM3NGU3OGJlYjVlNTkzNzc5YzRkYzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWVrIChNb2Rlcm4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NzFiYzBkYjJjYjg0MjdkYTZkNmU0MmUwYWU5ZDY1MC5zZXRDb250ZW50KGh0bWxfYmQzYjNkY2RkYmM3NGU3OGJlYjVlNTkzNzc5YzRkYzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2QwZjMyZTU1MjlkNGRlODgyNjBiOWY3N2QzMjYyODkuYmluZFBvcHVwKHBvcHVwXzg3MWJjMGRiMmNiODQyN2RhNmQ2ZTQyZTBhZTlkNjUwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MTEzYmE4NmRlNjg0NWRjYWM2ZjJlOTNlZWUxOGQ3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY0LjAsIC01MS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWRjOWZhNGY4OTRiNGI0MjkxMTNjNzBlNzVlODRhYjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWJkMTY1NTA4YzcwNDJjYzhlYmM2YWVjMTRlOGU4NTkgPSAkKGA8ZGl2IGlkPSJodG1sX2FiZDE2NTUwOGM3MDQyY2M4ZWJjNmFlYzE0ZThlODU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbmxhbmRpYyAoV2VzdCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlkYzlmYTRmODk0YjRiNDI5MTEzYzcwZTc1ZTg0YWIyLnNldENvbnRlbnQoaHRtbF9hYmQxNjU1MDhjNzA0MmNjOGViYzZhZWMxNGU4ZTg1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MTEzYmE4NmRlNjg0NWRjYWM2ZjJlOTNlZWUxOGQ3MC5iaW5kUG9wdXAocG9wdXBfOWRjOWZhNGY4OTRiNGI0MjkxMTNjNzBlNzVlODRhYjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlNzk3NTljYjVkYjQ2NTBhNWIyZTM2OTY5MDNmZmQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS41LCA3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZmQwNGRjOGU0ZjU0MjZhODFhMjIxMDhlMzFlMzVlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODNkZjM5MjM1ODk0YTNkYmQ3ZThiOTMyYTgxZGMzNiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzgzZGYzOTIzNTg5NGEzZGJkN2U4YjkzMmE4MWRjMzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkd3YXJpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZmQwNGRjOGU0ZjU0MjZhODFhMjIxMDhlMzFlMzVlYy5zZXRDb250ZW50KGh0bWxfYzgzZGYzOTIzNTg5NGEzZGJkN2U4YjkzMmE4MWRjMzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmU3OTc1OWNiNWRiNDY1MGE1YjJlMzY5NjkwM2ZmZDkuYmluZFBvcHVwKHBvcHVwX2RmZDA0ZGM4ZTRmNTQyNmE4MWEyMjEwOGUzMWUzNWVjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNWZiOTJhMzU0MTM0OGM1YTJhNjIyZDZhMDFiZWE4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuMCwgMzYuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RjM2JiOTgwMTE2ZjQ0ODQ4OWQ4NDZhM2JkN2RiODIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmMTkzMGQ3ZGJmMDQ3YWQ5YTk3NjNiYWNkNTY5MmQ4ID0gJChgPGRpdiBpZD0iaHRtbF9mZjE5MzBkN2RiZjA0N2FkOWE5NzYzYmFjZDU2OTJkOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFtZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjM2JiOTgwMTE2ZjQ0ODQ4OWQ4NDZhM2JkN2RiODIwLnNldENvbnRlbnQoaHRtbF9mZjE5MzBkN2RiZjA0N2FkOWE5NzYzYmFjZDU2OTJkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNWZiOTJhMzU0MTM0OGM1YTJhNjIyZDZhMDFiZWE4MC5iaW5kUG9wdXAocG9wdXBfZGMzYmI5ODAxMTZmNDQ4NDg5ZDg0NmEzYmQ3ZGI4MjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0ODQwM2VmYTAxMTQ2M2JhNzhlMGUwNTcyYTgxZWNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMCwgLTExMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGE1ZjU5ZmFhNWJkNGE4MGI2M2Q4NGJmYTQzNDY3OTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODRmZjc5ZGJhOTUzNDFhMWExOWY3NWU1MWUzYWNmZTEgPSAkKGA8ZGl2IGlkPSJodG1sXzg0ZmY3OWRiYTk1MzQxYTFhMTlmNzVlNTFlM2FjZmUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaG9waTEyNDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SG9waTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YTVmNTlmYWE1YmQ0YTgwYjYzZDg0YmZhNDM0Njc5NS5zZXRDb250ZW50KGh0bWxfODRmZjc5ZGJhOTUzNDFhMWExOWY3NWU1MWUzYWNmZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzQ4NDAzZWZhMDExNDYzYmE3OGUwZTA1NzJhODFlY2UuYmluZFBvcHVwKHBvcHVwXzhhNWY1OWZhYTViZDRhODBiNjNkODRiZmE0MzQ2Nzk1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NzUwMGJkZjJkN2U0Y2I2OTQzODVjMjYyMTI0NDA0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIyLjA4MzMzMzMzMzMsIC05OS4zMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTIxYzczZTVjYTIwNDI2ZDgzMTc3OGMxZTc0NzE1ODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTA0ZmIwMjdmOTFkNDhlMmFiMTVkNWE2NDkzMzA4MTAgPSAkKGA8ZGl2IGlkPSJodG1sXzEwNGZiMDI3ZjkxZDQ4ZTJhYjE1ZDVhNjQ5MzMwODEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaHVhczEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SHVhc3RlYzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjFjNzNlNWNhMjA0MjZkODMxNzc4YzFlNzQ3MTU4My5zZXRDb250ZW50KGh0bWxfMTA0ZmIwMjdmOTFkNDhlMmFiMTVkNWE2NDkzMzA4MTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTc1MDBiZGYyZDdlNGNiNjk0Mzg1YzI2MjEyNDQwNDcuYmluZFBvcHVwKHBvcHVwXzEyMWM3M2U1Y2EyMDQyNmQ4MzE3NzhjMWU3NDcxNTgzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NjA3MzMzMjY0ZDI0YmY2YWEwNjM0ODVlMjc1NGYwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjIxNjY2NjY2NjcsIC05NS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWVmNzIyMjU2OTQ1NDYyNDkyNGI0YmRkNGY5ZjlhMDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2ZlOWQ2YzM4ZmYxNGM2Y2E3MDg1NTQxYTY1Mjg3YTAgPSAkKGA8ZGl2IGlkPSJodG1sXzdmZTlkNmMzOGZmMTRjNmNhNzA4NTU0MWE2NTI4N2EwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IdWF2ZSAoU2FuIE1hdGVvIGRlbCBNYXIpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZWY3MjIyNTY5NDU0NjI0OTI0YjRiZGQ0ZjlmOWEwOS5zZXRDb250ZW50KGh0bWxfN2ZlOWQ2YzM4ZmYxNGM2Y2E3MDg1NTQxYTY1Mjg3YTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDYwNzMzMzI2NGQyNGJmNmFhMDYzNDg1ZTI3NTRmMDguYmluZFBvcHVwKHBvcHVwXzFlZjcyMjI1Njk0NTQ2MjQ5MjRiNGJkZDRmOWY5YTA5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGY1MjZjNTg2NTk0YzgwOTY3M2U0MmI0ZGU2ZDVkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuMCwgMTEyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZTA4YWQ3NDE5NmI0NGRhOWI5NjAzZTY5MjdkZTVhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MTJiOWU2ZmRiMjE0MGYwYjc1NGNlYjM3N2JjMTUwNiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTEyYjllNmZkYjIxNDBmMGI3NTRjZWIzNzdiYzE1MDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pYmFuMTI2NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JYmFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllMDhhZDc0MTk2YjQ0ZGE5Yjk2MDNlNjkyN2RlNWExLnNldENvbnRlbnQoaHRtbF85MTJiOWU2ZmRiMjE0MGYwYjc1NGNlYjM3N2JjMTUwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xOGY1MjZjNTg2NTk0YzgwOTY3M2U0MmI0ZGU2ZDVkMS5iaW5kUG9wdXAocG9wdXBfOWUwOGFkNzQxOTZiNDRkYTliOTYwM2U2OTI3ZGU1YTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExMzYxNWQ2YWUxNjRmM2RiOWE5MzZmMmI1ZjZkNTZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE1LjE2NjY2NjY2NjcwMDAwMSwgLTY1LjQxNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MDNlMDI5OGJmN2Y0NzUwOGQ3YzAzMTM3MjEwMDlkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YTJlYzQzZTA4MTI0MzczYTQ1NmFmZjY2ZDFmZmUxNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNWEyZWM0M2UwODEyNDM3M2E0NTZhZmY2NmQxZmZlMTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pZ25hMTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JZ25hY2lhbm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDAzZTAyOThiZjdmNDc1MDhkN2MwMzEzNzIxMDA5ZDMuc2V0Q29udGVudChodG1sXzVhMmVjNDNlMDgxMjQzNzNhNDU2YWZmNjZkMWZmZTE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExMzYxNWQ2YWUxNjRmM2RiOWE5MzZmMmI1ZjZkNTZmLmJpbmRQb3B1cChwb3B1cF80MDNlMDI5OGJmN2Y0NzUwOGQ3YzAzMTM3MjEwMDlkMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzYwNTlhNzJhZjJiNDU3MWFhOTJiNDQ4NDEwOWViMTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0LjkxNjY2NjY2NjY3LCA1LjY2NjY2NjY2NjY2OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkOTU3ZGEyMWUxZjQ0ZjdiOTI2YjJmNmQ4ZDcxOGQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkODYwZTViNGYxZTQ4MmE4ZTNhMjIyODJjNjBhOTQ3ID0gJChgPGRpdiBpZD0iaHRtbF8wZDg2MGU1YjRmMWU0ODJhOGUzYTIyMjgyYzYwYTk0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SWpvIChLb2xva3VtYSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBkOTU3ZGEyMWUxZjQ0ZjdiOTI2YjJmNmQ4ZDcxOGQxLnNldENvbnRlbnQoaHRtbF8wZDg2MGU1YjRmMWU0ODJhOGUzYTIyMjgyYzYwYTk0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNjA1OWE3MmFmMmI0NTcxYWE5MmI0NDg0MTA5ZWIxNy5iaW5kUG9wdXAocG9wdXBfMGQ5NTdkYTIxZTFmNDRmN2I5MjZiMmY2ZDhkNzE4ZDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwNmU1NTJmNWFkZDRkMjJiNDFiZTAxZGE0ZDU2ODlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC4wLCAxMDYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkNjk3MGIxMzg2NjRkYWM5OWI3NTNjZTc3NTBkMTY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0OTFlNjVmNTFmYzQ0OGJiNjQ3MmE4YTNmNzQ0YWQxID0gJChgPGRpdiBpZD0iaHRtbF9iNDkxZTY1ZjUxZmM0NDhiYjY0NzJhOGEzZjc0NGFkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2luZG8xMzE2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkluZG9uZXNpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGQ2OTcwYjEzODY2NGRhYzk5Yjc1M2NlNzc1MGQxNjUuc2V0Q29udGVudChodG1sX2I0OTFlNjVmNTFmYzQ0OGJiNjQ3MmE4YTNmNzQ0YWQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEwNmU1NTJmNWFkZDRkMjJiNDFiZTAxZGE0ZDU2ODlkLmJpbmRQb3B1cChwb3B1cF8wZDY5NzBiMTM4NjY0ZGFjOTliNzUzY2U3NzUwZDE2NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDJkYTFiMTZkYTgxNDMwODk5Nzc5MjMxNDcwNTg2MDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS41LCAzNC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2VkZTRjYzQ3ZjMzNGFhZWIwNWE5Y2EwZTljZTM4ZGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU3YjQwNzQ2ZjIyNDdiODlmYTgwNGViMTc5YWM1YzcgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1N2I0MDc0NmYyMjQ3Yjg5ZmE4MDRlYjE3OWFjNWM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Jbmdlc3NhbmE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlZGU0Y2M0N2YzMzRhYWViMDVhOWNhMGU5Y2UzOGRmLnNldENvbnRlbnQoaHRtbF9kNTdiNDA3NDZmMjI0N2I4OWZhODA0ZWIxNzlhYzVjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MmRhMWIxNmRhODE0MzA4OTk3NzkyMzE0NzA1ODYwNi5iaW5kUG9wdXAocG9wdXBfM2VkZTRjYzQ3ZjMzNGFhZWIwNWE5Y2EwZTljZTM4ZGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4MTk3NjFlYTQ2MjRkYzVhMGI2MjRkMTI2ZWFlZjExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjAsIC01OC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDZjMmEzYWYzMTIyNDgyNmE5MzM0N2U2OWVhZTBlYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTQ4MWZiZDcwYzQ5NDVjNzkyNzA2ODNhMjc2ZGQzMjIgPSAkKGA8ZGl2IGlkPSJodG1sXzk0ODFmYmQ3MGM0OTQ1Yzc5MjcwNjgzYTI3NmRkMzIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JcmFueGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2YzJhM2FmMzEyMjQ4MjZhOTMzNDdlNjllYWUwZWI1LnNldENvbnRlbnQoaHRtbF85NDgxZmJkNzBjNDk0NWM3OTI3MDY4M2EyNzZkZDMyMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kODE5NzYxZWE0NjI0ZGM1YTBiNjI0ZDEyNmVhZWYxMS5iaW5kUG9wdXAocG9wdXBfNDZjMmEzYWYzMTIyNDgyNmE5MzM0N2U2OWVhZTBlYjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllMTFlNWQ5ZmNkODQ0OWZhMDQ1NTQyM2MxYjE3ZmM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjgzMzMzMzMzMzI5OTk5OSwgLTY0LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODk4OGViZGYyMjI0YjM2YTc3ZDBiN2U4MzVmM2Y4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjczNDhjMjJlZGQ0MzAzYTZkYWI3M2ZiODQ4NzEwOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjY3MzQ4YzIyZWRkNDMwM2E2ZGFiNzNmYjg0ODcxMDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pdG9uMTI1MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JdG9uYW1hPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4OTg4ZWJkZjIyMjRiMzZhNzdkMGI3ZTgzNWYzZjhmLnNldENvbnRlbnQoaHRtbF9iNjczNDhjMjJlZGQ0MzAzYTZkYWI3M2ZiODQ4NzEwOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZTExZTVkOWZjZDg0NDlmYTA0NTU0MjNjMWIxN2ZjNi5iaW5kUG9wdXAocG9wdXBfYzg5ODhlYmRmMjIyNGIzNmE3N2QwYjdlODM1ZjNmOGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QzZTk1M2VhY2ZmYTQ5MmM4M2QyZDY5OWM0NjY3MWIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjAuMzMzMzMzMzMzMywgMTIxLjgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiYTRiOWMxNDczNjRhMGI4NDc3MWRlYWY0MjM0ODVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmYmM3NzU4OTFkMjQ1NTc5Yjg2OWEyMGUyMmFiZTYxID0gJChgPGRpdiBpZD0iaHRtbF84ZmJjNzc1ODkxZDI0NTU3OWI4NjlhMjBlMjJhYmU2MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SXZhdGFuIChTb3V0aGVybik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiYTRiOWMxNDczNjRhMGI4NDc3MWRlYWY0MjM0ODVmLnNldENvbnRlbnQoaHRtbF84ZmJjNzc1ODkxZDI0NTU3OWI4NjlhMjBlMjJhYmU2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kM2U5NTNlYWNmZmE0OTJjODNkMmQ2OTljNDY2NzFiMS5iaW5kUG9wdXAocG9wdXBfZGJhNGI5YzE0NzM2NGEwYjg0NzcxZGVhZjQyMzQ4NWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3YzIyMDEyYjNhMDQzM2FhMDcyZDIzMzg3ZDEyZGM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuMCwgMTExLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMmExMzRmZDIzNTA0ZmQ0YjUwNzFiMTcyMDQ2OTEyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZTY5M2I1YzFiNzA0YTEwOTdkMGY3YWQ1MmUzYjE3MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZmU2OTNiNWMxYjcwNGExMDk3ZDBmN2FkNTJlM2IxNzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9qYXZhMTI1NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KYXZhbmVzZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMmExMzRmZDIzNTA0ZmQ0YjUwNzFiMTcyMDQ2OTEyMi5zZXRDb250ZW50KGh0bWxfZmU2OTNiNWMxYjcwNGExMDk3ZDBmN2FkNTJlM2IxNzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTdjMjIwMTJiM2EwNDMzYWEwNzJkMjMzODdkMTJkYzcuYmluZFBvcHVwKHBvcHVwXzEyYTEzNGZkMjM1MDRmZDRiNTA3MWIxNzIwNDY5MTIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZjVkNTU5NjI2NjI0ZWE1ODRhNjQ0OTdjNjVjMDhhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01LjQxNjY2NjY2NjY2OTk5OSwgLTc2LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZWJlN2JmMGVkMjk0ZDNjYjBjZWE3NGIxYzEyZTU3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYjNmNWJhNjQ5YWU0ZDdiYmM2ZmFjYWIwOTUxNjU1YSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWIzZjViYTY0OWFlNGQ3YmJjNmZhY2FiMDk1MTY1NWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9qZWJlMTI1MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KZWJlcm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmViZTdiZjBlZDI5NGQzY2IwY2VhNzRiMWMxMmU1N2Yuc2V0Q29udGVudChodG1sXzFiM2Y1YmE2NDlhZTRkN2JiYzZmYWNhYjA5NTE2NTVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZmNWQ1NTk2MjY2MjRlYTU4NGE2NDQ5N2M2NWMwOGFlLmJpbmRQb3B1cChwb3B1cF82ZWJlN2JmMGVkMjk0ZDNjYjBjZWE3NGIxYzEyZTU3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzM0MzE4Yjc3YmE1NDI0MmFmZjYxNTBjOTFhY2M4ZWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS40MTY2NjY2NjY3LCA5Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjYzMzkwZWIwMWE2NGNiZWEwY2M5YTZlMTViMjdiNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDBhZTY5YThlYWY1NGZhYzkwYjYwOWNkYjRlNDA5MjcgPSAkKGA8ZGl2IGlkPSJodG1sX2QwYWU2OWE4ZWFmNTRmYWM5MGI2MDljZGI0ZTQwOTI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvamluZzEyNjAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmluZ3BobzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NjMzOTBlYjAxYTY0Y2JlYTBjYzlhNmUxNWIyN2I2Ni5zZXRDb250ZW50KGh0bWxfZDBhZTY5YThlYWY1NGZhYzkwYjYwOWNkYjRlNDA5MjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzM0MzE4Yjc3YmE1NDI0MmFmZjYxNTBjOTFhY2M4ZWUuYmluZFBvcHVwKHBvcHVwXzY2MzM5MGViMDFhNjRjYmVhMGNjOWE2ZTE1YjI3YjY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOTI3MjRhMWNjYWM0MmQxOTY0NDcxMDQ1NjM3MzMyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjAsIC04OS44MzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzJhMDE3ZTY2NGM0NGQ5MDk0MmE2ZGU0MWM2NGYyZjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQ3Y2VkMWU2OTUzNDVhMDgzMDY5ZmJmNjQwNjkwMGMgPSAkKGA8ZGl2IGlkPSJodG1sXzc0N2NlZDFlNjk1MzQ1YTA4MzA2OWZiZjY0MDY5MDBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LJ2VrY2jDrTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzJhMDE3ZTY2NGM0NGQ5MDk0MmE2ZGU0MWM2NGYyZjkuc2V0Q29udGVudChodG1sXzc0N2NlZDFlNjk1MzQ1YTA4MzA2OWZiZjY0MDY5MDBjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE5MjcyNGExY2NhYzQyZDE5NjQ0NzEwNDU2MzczMzI3LmJpbmRQb3B1cChwb3B1cF83MmEwMTdlNjY0YzQ0ZDkwOTQyYTZkZTQxYzY0ZjJmOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjdjZjYyOWQ3YjkyNDYwZDhjZGMwMzdjODNhYWMzODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS4wLCAyOS42NjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTBmNzQ1ODQ5M2JhNGM2Njk2NmRjMjEzYjg3YzE2YzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjRiOTU3OTZmMDJkNDRhNDkxOTY4ODE4ZTYxMGMyYjggPSAkKGA8ZGl2IGlkPSJodG1sXzI0Yjk1Nzk2ZjAyZDQ0YTQ5MTk2ODgxOGU2MTBjMmI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FkdTEyNTciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FkdWdsaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MGY3NDU4NDkzYmE0YzY2OTY2ZGMyMTNiODdjMTZjNi5zZXRDb250ZW50KGh0bWxfMjRiOTU3OTZmMDJkNDRhNDkxOTY4ODE4ZTYxMGMyYjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjdjZjYyOWQ3YjkyNDYwZDhjZGMwMzdjODNhYWMzODYuYmluZFBvcHVwKHBvcHVwXzkwZjc0NTg0OTNiYTRjNjY5NjZkYzIxM2I4N2MxNmM2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjg2ZTlmMDNmYTI0YTM4OWFlYjY5ODVhNzk4OWY4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMS4wLCAxMzkuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljM2UzN2MwNmVjODRiMzFiZDZjZTExMWFiZmUzMWYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhNWEzNjNjOThmNjRjMzM5YjRmZmZiZGVjYzZlYzU2ID0gJChgPGRpdiBpZD0iaHRtbF8xYTVhMzYzYzk4ZjY0YzMzOWI0ZmZmYmRlY2M2ZWM1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2Fsa2F0dW5ndTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWMzZTM3YzA2ZWM4NGIzMWJkNmNlMTExYWJmZTMxZjIuc2V0Q29udGVudChodG1sXzFhNWEzNjNjOThmNjRjMzM5YjRmZmZiZGVjYzZlYzU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmODZlOWYwM2ZhMjRhMzg5YWViNjk4NWE3OTg5ZjhiLmJpbmRQb3B1cChwb3B1cF85YzNlMzdjMDZlYzg0YjMxYmQ2Y2UxMTFhYmZlMzFmMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmIxNjE1MGU2MDQ1NGFjN2I1MjNhYjY4ZjNlNDlkMTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNi4wLCAxMDguNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiYmRiODYxZDcxNzQzNjJiMWNjNTZmNmRiZDVhZTI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwMDA5ZGNjMzhjYTQxYzM4Y2UzNWIwY2EwOGU0YWQ1ID0gJChgPGRpdiBpZD0iaHRtbF9jMDAwOWRjYzM4Y2E0MWMzOGNlMzViMGNhMDhlNGFkNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2FtIChaaGFuZ2x1KTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2JiZGI4NjFkNzE3NDM2MmIxY2M1NmY2ZGJkNWFlMjguc2V0Q29udGVudChodG1sX2MwMDA5ZGNjMzhjYTQxYzM4Y2UzNWIwY2EwOGU0YWQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZiMTYxNTBlNjA0NTRhYzdiNTIzYWI2OGYzZTQ5ZDE3LmJpbmRQb3B1cChwb3B1cF9jYmJkYjg2MWQ3MTc0MzYyYjFjYzU2ZjZkYmQ1YWUyOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDhmNzQyNjViZmQ3NDNjOWEzZGJhOWU4NzA0OGU5Y2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC4wLCAxMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWRlYWU1NTM5ZTI2NGEyNDkxNzMzZjcyOGRlYjMxN2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWEzZDM4ZTQ3NDQxNGFkYWJiYzJkMjA2NDljZTFkNWUgPSAkKGA8ZGl2IGlkPSJodG1sX2VhM2QzOGU0NzQ0MTRhZGFiYmMyZDIwNjQ5Y2UxZDVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LYW5ha3VydTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWRlYWU1NTM5ZTI2NGEyNDkxNzMzZjcyOGRlYjMxN2Iuc2V0Q29udGVudChodG1sX2VhM2QzOGU0NzQ0MTRhZGFiYmMyZDIwNjQ5Y2UxZDVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q4Zjc0MjY1YmZkNzQzYzlhM2RiYTllODcwNDhlOWNlLmJpbmRQb3B1cChwb3B1cF81ZGVhZTU1MzllMjY0YTI0OTE3MzNmNzI4ZGViMzE3YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjhhYmU1MzM4NGI1NGI1ZjhhYzU1OTdhMWY1ZThjYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4wLCAxMy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjJlOGRkMGEzMWJlNGUzNWFhZGM4ZDQ2N2RhZmU5MzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y0OTBiOWJhYzAyNDlkZWFlYmZjMGYzNjhiOGQyOGMgPSAkKGA8ZGl2IGlkPSJodG1sX2NmNDkwYjliYWMwMjQ5ZGVhZWJmYzBmMzY4YjhkMjhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LYW51cmk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyZThkZDBhMzFiZTRlMzVhYWRjOGQ0NjdkYWZlOTM4LnNldENvbnRlbnQoaHRtbF9jZjQ5MGI5YmFjMDI0OWRlYWViZmMwZjM2OGI4ZDI4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOGFiZTUzMzg0YjU0YjVmOGFjNTU5N2ExZjVlOGNiNS5iaW5kUG9wdXAocG9wdXBfZjJlOGRkMGEzMWJlNGUzNWFhZGM4ZDQ2N2RhZmU5MzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk2YjViYmVkNTMxYjRhNGFhZjBlNzM3MWQ0OWIzYTc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMCwgLTExNy41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzExYzQwZjM1Yjc0NDlmMmE2ZWJhZmNlZmRjM2FiYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWFiYjU0Y2ViMGIwNDc5YWE1YzRlNDAxNGFlOWQxNTkgPSAkKGA8ZGl2IGlkPSJodG1sXzlhYmI1NGNlYjBiMDQ3OWFhNWM0ZTQwMTRhZTlkMTU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2F3YTEyODMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2F3YWlpc3U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzExYzQwZjM1Yjc0NDlmMmE2ZWJhZmNlZmRjM2FiYjEuc2V0Q29udGVudChodG1sXzlhYmI1NGNlYjBiMDQ3OWFhNWM0ZTQwMTRhZTlkMTU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk2YjViYmVkNTMxYjRhNGFhZjBlNzM3MWQ0OWIzYTc2LmJpbmRQb3B1cChwb3B1cF9jMTFjNDBmMzViNzQ0OWYyYTZlYmFmY2VmZGMzYWJiMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjIwOTk3MGM4YTg5NDBkNGIxZTUyYjkyYjM3OTdhOGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS4wLCA5Ny41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2E5NDMxZDFkOTA0NGVlM2FlNzA1ZWFlNjM5OThlNDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjg2MTdiYWJmOWI0NDg5MmFlODM5NzZkMWE4ZjQxZWMgPSAkKGA8ZGl2IGlkPSJodG1sX2I4NjE3YmFiZjliNDQ4OTJhZTgzOTc2ZDFhOGY0MWVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LYXlhaCBMaSAoRWFzdGVybik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhOTQzMWQxZDkwNDRlZTNhZTcwNWVhZTYzOTk4ZTQzLnNldENvbnRlbnQoaHRtbF9iODYxN2JhYmY5YjQ0ODkyYWU4Mzk3NmQxYThmNDFlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMjA5OTcwYzhhODk0MGQ0YjFlNTJiOTJiMzc5N2E4YS5iaW5kUG9wdXAocG9wdXBfM2E5NDMxZDFkOTA0NGVlM2FlNzA1ZWFlNjM5OThlNDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY4MjdjOWFhOWRiYzQ3ZTVhM2I2MTZlMzFiNmQ2ZWQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4yNSwgMzYuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MWViZThmZDE3MTc0NjEyYmVmOTMzYzY0NTg5MzIxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMmNlYTgzN2VmMjQ0MTQ3ODUzNDZlNjEwYzQ5ODE0YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzJjZWE4MzdlZjI0NDE0Nzg1MzQ2ZTYxMGM0OTgxNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktlZmE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxZWJlOGZkMTcxNzQ2MTJiZWY5MzNjNjQ1ODkzMjFlLnNldENvbnRlbnQoaHRtbF8zMmNlYTgzN2VmMjQ0MTQ3ODUzNDZlNjEwYzQ5ODE0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ODI3YzlhYTlkYmM0N2U1YTNiNjE2ZTMxYjZkNmVkOS5iaW5kUG9wdXAocG9wdXBfOTFlYmU4ZmQxNzE3NDYxMmJlZjkzM2M2NDU4OTMyMWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllNDVkNmVlOTE3MDRhZGM4NmE5MGJlMTUyNTkwZDA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS44MzMzMzMzMzMzMzAwMDEsIDE1LjA4MzMzMzMzMzI5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkMGVjYmJlOTIyMDQzN2RhOWIzYTlkYTQ1YjE2MTJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkxMzE4ZDk0Yzk2YTQyM2JiYmIxY2VlOTUwZWM4MzY4ID0gJChgPGRpdiBpZD0iaHRtbF85MTMxOGQ5NGM5NmE0MjNiYmJiMWNlZTk1MGVjODM2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tlcmExMjU1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktlcmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQwZWNiYmU5MjIwNDM3ZGE5YjNhOWRhNDViMTYxMmYuc2V0Q29udGVudChodG1sXzkxMzE4ZDk0Yzk2YTQyM2JiYmIxY2VlOTUwZWM4MzY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzllNDVkNmVlOTE3MDRhZGM4NmE5MGJlMTUyNTkwZDA3LmJpbmRQb3B1cChwb3B1cF9mZDBlY2JiZTkyMjA0MzdkYTliM2E5ZGE0NWIxNjEyZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjJkMDcxODNhYmQ0NDg1ZWJlNDBiZjAzYmEwZDhkNWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ny4wLCAxMDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwZjkyMTkwNjk2NTRkOTA4YzUxOTE0MTlmM2EzOTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlZjg5NGMzNTNkNjQwNmViMTUyODU5OWEwNmM0YmVmID0gJChgPGRpdiBpZD0iaHRtbF9lZWY4OTRjMzUzZDY0MDZlYjE1Mjg1OTlhMDZjNGJlZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2hhbGtoYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTBmOTIxOTA2OTY1NGQ5MDhjNTE5MTQxOWYzYTM5NTMuc2V0Q29udGVudChodG1sX2VlZjg5NGMzNTNkNjQwNmViMTUyODU5OWEwNmM0YmVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyZDA3MTgzYWJkNDQ4NWViZTQwYmYwM2JhMGQ4ZDVhLmJpbmRQb3B1cChwb3B1cF9lMGY5MjE5MDY5NjU0ZDkwOGM1MTkxNDE5ZjNhMzk1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzU1MmRmNWQyZTNmNDA5NWI4NGE2OTUxMzFlNjE4OGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS41LCA5Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFmNDAzODA2Zjg0NGQxNjg2M2I3Yjk1Njg2NTdlMDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzE1MGVhZmYyZjQ1NDZmMDg0NDBhNWMyYWNlNTlkNzEgPSAkKGA8ZGl2IGlkPSJodG1sXzcxNTBlYWZmMmY0NTQ2ZjA4NDQwYTVjMmFjZTU5ZDcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2hhczEyNjkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2hhc2k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGFmNDAzODA2Zjg0NGQxNjg2M2I3Yjk1Njg2NTdlMDUuc2V0Q29udGVudChodG1sXzcxNTBlYWZmMmY0NTQ2ZjA4NDQwYTVjMmFjZTU5ZDcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc1NTJkZjVkMmUzZjQwOTViODRhNjk1MTMxZTYxODhkLmJpbmRQb3B1cChwb3B1cF84YWY0MDM4MDZmODQ0ZDE2ODYzYjdiOTU2ODY1N2UwNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM3MGRlNmJiMDc3NDIzODlmNzRhMTM0YWNiMzA2OGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi41LCAxMDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1YmFjYzRiNDM2MTRlZTk5NDBlNjZjYTBmZjI1NTNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2MzYyNTRhZjk4MjQxZDBhN2JmZTI2OWZhOWI3MzE5ID0gJChgPGRpdiBpZD0iaHRtbF83NjM2MjU0YWY5ODI0MWQwYTdiZmUyNjlmYTliNzMxOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2htZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1YmFjYzRiNDM2MTRlZTk5NDBlNjZjYTBmZjI1NTNlLnNldENvbnRlbnQoaHRtbF83NjM2MjU0YWY5ODI0MWQwYTdiZmUyNjlmYTliNzMxOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MzcwZGU2YmIwNzc0MjM4OWY3NGExMzRhY2IzMDY4YS5iaW5kUG9wdXAocG9wdXBfMzViYWNjNGI0MzYxNGVlOTk0MGU2NmNhMGZmMjU1M2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlODdmYWNjMGNiYjQzODdiMjgwYTczOTkzNTJmNWU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjEuMCwgMTAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjg0MmYxMDM5OWY0NDJjYWM1YTg5YzlmZWU0ZDc3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMmZiMDViOTk2NjM0NDlhODFkOTczZjQwOGUyN2RjZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjJmYjA1Yjk5NjYzNDQ5YTgxZDk3M2Y0MDhlMjdkY2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raG11MTI1NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaG11JzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjg0MmYxMDM5OWY0NDJjYWM1YTg5YzlmZWU0ZDc3ZS5zZXRDb250ZW50KGh0bWxfYjJmYjA1Yjk5NjYzNDQ5YTgxZDk3M2Y0MDhlMjdkY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWU4N2ZhY2MwY2JiNDM4N2IyODBhNzM5OTM1MmY1ZTcuYmluZFBvcHVwKHBvcHVwXzEyODQyZjEwMzk5ZjQ0MmNhYzVhODljOWZlZTRkNzdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMmIyOGZjZjJlYTQ0ZDA2ODk4MTFhYzRiY2FhNWVjYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjUsIDE1MS4wODMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjY2U4Y2EwNzk1YzRiMmFhMTk0NWIwNzExOGUyNzgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhYjE1ZmRiNDdlZDQ2NTA4N2UzZmYxMGQ2ZTgxMjk2ID0gJChgPGRpdiBpZD0iaHRtbF9jYWIxNWZkYjQ3ZWQ0NjUwODdlM2ZmMTBkNmU4MTI5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tpbGkxMjY3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktpbGl2aWxhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjY2U4Y2EwNzk1YzRiMmFhMTk0NWIwNzExOGUyNzgyLnNldENvbnRlbnQoaHRtbF9jYWIxNWZkYjQ3ZWQ0NjUwODdlM2ZmMTBkNmU4MTI5Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMmIyOGZjZjJlYTQ0ZDA2ODk4MTFhYzRiY2FhNWVjYi5iaW5kUG9wdXAocG9wdXBfNmNjZThjYTA3OTVjNGIyYWExOTQ1YjA3MTE4ZTI3ODIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlZTQyMzI5NWExMzQ5M2I4OTZmZmQ0Mzg4ZDFjZGJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuMCwgLTk5LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNmVmYzlmNDU0MzE0NjZlOTdkZDFjYTI1NmI1YTU0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDQzYzQ1MDMyYWI0NjcxODIyMDkxNmQwMTYyYzhjOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDQ0M2M0NTAzMmFiNDY3MTgyMjA5MTZkMDE2MmM4YzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raW93MTI2NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaW93YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNmVmYzlmNDU0MzE0NjZlOTdkZDFjYTI1NmI1YTU0ZS5zZXRDb250ZW50KGh0bWxfMDQ0M2M0NTAzMmFiNDY3MTgyMjA5MTZkMDE2MmM4YzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGVlNDIzMjk1YTEzNDkzYjg5NmZmZDQzODhkMWNkYmYuYmluZFBvcHVwKHBvcHVwX2E2ZWZjOWY0NTQzMTQ2NmU5N2RkMWNhMjU2YjVhNTRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTE1NDQzMDc1OGI0ZWVjOTQ1MzdhZjY0M2UyNmFlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjAsIDc1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZGIxNGUyOTU1OWY0MmFiYTVkMjdjMzU5NWU2MTUyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MmE2MTk2NWE4YTA0NDMzYTBhNTA4MzAyODY2OWE2MCA9ICQoYDxkaXYgaWQ9Imh0bWxfODJhNjE5NjVhOGEwNDQzM2EwYTUwODMwMjg2NjlhNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raXJnMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaXJnaGl6PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlkYjE0ZTI5NTU5ZjQyYWJhNWQyN2MzNTk1ZTYxNTJlLnNldENvbnRlbnQoaHRtbF84MmE2MTk2NWE4YTA0NDMzYTBhNTA4MzAyODY2OWE2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNTE1NDQzMDc1OGI0ZWVjOTQ1MzdhZjY0M2UyNmFlMC5iaW5kUG9wdXAocG9wdXBfOWRiMTRlMjk1NTlmNDJhYmE1ZDI3YzM1OTVlNjE1MmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1ZjE0ODhjMDI0MzQ2MjJhZDhjM2ZmN2U1NTNkNGU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMTY2NjY2NjY2NjcsIDE0NC4zMzMzMzMzMzI5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiOGEzYWNmM2M2YjRjNmViOThkNWJmY2JlMmUzNmMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkOWQxNTljYmFkOTQ5ZDk5NWFiZTQ1NTg0MWIyODQyID0gJChgPGRpdiBpZD0iaHRtbF8wZDlkMTU5Y2JhZDk0OWQ5OTVhYmU0NTU4NDFiMjg0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tvYm8xMjQ5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktvYm9uPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiOGEzYWNmM2M2YjRjNmViOThkNWJmY2JlMmUzNmMzLnNldENvbnRlbnQoaHRtbF8wZDlkMTU5Y2JhZDk0OWQ5OTVhYmU0NTU4NDFiMjg0Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNWYxNDg4YzAyNDM0NjIyYWQ4YzNmZjdlNTUzZDRlNC5iaW5kUG9wdXAocG9wdXBfMGI4YTNhY2YzYzZiNGM2ZWI5OGQ1YmZjYmUyZTM2YzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiMTgzODBiYzI3NTRjMzJhNjkxYjU3ZWY2OWI2ZDVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOC43NSwgMzMuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YWVjY2FmZjc4MmI0ZjkxOTM4N2M3YWU0OWY2MmUxYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NDVkMzhkNjlkOTI0ZWMzYjdkMjg0YmI4MGM3ODQ2NiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjQ1ZDM4ZDY5ZDkyNGVjM2I3ZDI4NGJiODBjNzg0NjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb21vMTI1OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb21vPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhZWNjYWZmNzgyYjRmOTE5Mzg3YzdhZTQ5ZjYyZTFiLnNldENvbnRlbnQoaHRtbF82NDVkMzhkNjlkOTI0ZWMzYjdkMjg0YmI4MGM3ODQ2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYjE4MzgwYmMyNzU0YzMyYTY5MWI1N2VmNjliNmQ1ZS5iaW5kUG9wdXAocG9wdXBfOWFlY2NhZmY3ODJiNGY5MTkzODdjN2FlNDlmNjJlMWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IyNzg1ZDQ3ZGIyNzQ0NTg5M2EwODVlMzY3NDY2NjYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMjUsIDc0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OGM4YmIxNGE4Yzc0ZmZhYjEyYTNkOWJlZjMyOTM5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NzM1YmY4NjRkMDQ0NDE1Yjg3MWY2MDE0ZjlmMjZjNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzczNWJmODY0ZDA0NDQxNWI4NzFmNjAxNGY5ZjI2YzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktvbmthbmk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4YzhiYjE0YThjNzRmZmFiMTJhM2Q5YmVmMzI5Mzk5LnNldENvbnRlbnQoaHRtbF83NzM1YmY4NjRkMDQ0NDE1Yjg3MWY2MDE0ZjlmMjZjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMjc4NWQ0N2RiMjc0NDU4OTNhMDg1ZTM2NzQ2NjY2Mi5iaW5kUG9wdXAocG9wdXBfOThjOGJiMTRhOGM3NGZmYWIxMmEzZDliZWYzMjkzOTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0NmE0YjA3NTZiYzQzOWFiOWEzMmIyZjk5ZjQzMjY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMmI0MzdjZjlkMGQ0YTUyOTIzYjIyMjlkNGZjM2QzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82N2E5M2IzYjdmMWQ0ZjNlODhlNjAxMTllZDRkYzU1ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjdhOTNiM2I3ZjFkNGYzZTg4ZTYwMTE5ZWQ0ZGM1NWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb3JlMTI4MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb3JlYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTJiNDM3Y2Y5ZDBkNGE1MjkyM2IyMjI5ZDRmYzNkMzQuc2V0Q29udGVudChodG1sXzY3YTkzYjNiN2YxZDRmM2U4OGU2MDExOWVkNGRjNTVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0NmE0YjA3NTZiYzQzOWFiOWEzMmIyZjk5ZjQzMjY2LmJpbmRQb3B1cChwb3B1cF9lMmI0MzdjZjlkMGQ0YTUyOTIzYjIyMjlkNGZjM2QzNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmMxMGE3MGJiZjg1NDQ3ODhhMmY5YTlmYzIxMjMzYzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS41LCA3Ny4xNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTJmMjAzZDU5NDZmNDU5Nzg1ZWMxYTM2MDQyMDkyMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjI4MjEzZjUwMjE5NDk1NGFhMGZjMDRiMDI2Yzc1ZWYgPSAkKGA8ZGl2IGlkPSJodG1sX2IyODIxM2Y1MDIxOTQ5NTRhYTBmYzA0YjAyNmM3NWVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Lb3RhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMmYyMDNkNTk0NmY0NTk3ODVlYzFhMzYwNDIwOTIyNy5zZXRDb250ZW50KGh0bWxfYjI4MjEzZjUwMjE5NDk1NGFhMGZjMDRiMDI2Yzc1ZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmMxMGE3MGJiZjg1NDQ3ODhhMmY5YTlmYzIxMjMzYzYuYmluZFBvcHVwKHBvcHVwX2EyZjIwM2Q1OTQ2ZjQ1OTc4NWVjMWEzNjA0MjA5MjI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MGRiMDk0MTk4MGI0ZDFkOGIzYjM1Njk2MGFkM2YwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjUsIDgxLjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZmI4YTY3Mjk0OGY0ZjYzYWQyZTM4YzMxYWQxYTY1NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTg2M2VjYTg4OWY0MjZiOGFkMzY3YmZmODM3NzBhYyA9ICQoYDxkaXYgaWQ9Imh0bWxfODE4NjNlY2E4ODlmNDI2YjhhZDM2N2JmZjgzNzcwYWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb3lhMTI1MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb3lhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmYjhhNjcyOTQ4ZjRmNjNhZDJlMzhjMzFhZDFhNjU0LnNldENvbnRlbnQoaHRtbF84MTg2M2VjYTg4OWY0MjZiOGFkMzY3YmZmODM3NzBhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MGRiMDk0MTk4MGI0ZDFkOGIzYjM1Njk2MGFkM2YwZC5iaW5kUG9wdXAocG9wdXBfMmZiOGE2NzI5NDhmNGY2M2FkMmUzOGMzMWFkMWE2NTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFhYzYzNDdhM2I4NTQxYzZiNjIyYjNjNDJkMTIxNGFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy41ODMzMzMzMzMzMzAwMDEsIDEwLjE2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zODQ3NzNiZGRmYTY0ZTU3YTRjZWZkMGY4YWE5ZTJmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWVjOTg5NWUxNDM0YjJjOTZjNjMxOWJmYzI1Mjg1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGFlYzk4OTVlMTQzNGIyYzk2YzYzMTliZmMyNTI4NWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rcGFuMTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LcGFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM4NDc3M2JkZGZhNjRlNTdhNGNlZmQwZjhhYTllMmY1LnNldENvbnRlbnQoaHRtbF80YWVjOTg5NWUxNDM0YjJjOTZjNjMxOWJmYzI1Mjg1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYWM2MzQ3YTNiODU0MWM2YjYyMmIzYzQyZDEyMTRhZS5iaW5kUG9wdXAocG9wdXBfMzg0NzczYmRkZmE2NGU1N2E0Y2VmZDBmOGFhOWUyZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzViMjAwMDYyMDk3NDQyYjQ4N2U4NjY1ZmQ4NTZkOTMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4wLCAtMTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1ZmY3NWRmYWMwMzRkNWM5OTA2MmIwN2U4ZWU0YjQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzZjQ4YmFhMDNjZTQ0OWQ5YzhiNzg3NDU2NDRhNDU2ID0gJChgPGRpdiBpZD0iaHRtbF81M2Y0OGJhYTAzY2U0NDlkOWM4Yjc4NzQ1NjQ0YTQ1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2twZWwxMjUyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktwZWxsZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNWZmNzVkZmFjMDM0ZDVjOTkwNjJiMDdlOGVlNGI0Mi5zZXRDb250ZW50KGh0bWxfNTNmNDhiYWEwM2NlNDQ5ZDljOGI3ODc0NTY0NGE0NTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWIyMDAwNjIwOTc0NDJiNDg3ZTg2NjVmZDg1NmQ5MzIuYmluZFBvcHVwKHBvcHVwX2I1ZmY3NWRmYWMwMzRkNWM5OTA2MmIwN2U4ZWU0YjQyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NTIwOTMwZmI1OGE0ODRhOWU4YmE0YmU3OTc5ZjM2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjUsIDMwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZmFkMGNhMjI5YjQ0ZWI4OWE4YmM5YmE2NDdjZTcyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDk2ZjJkZjA1Nzc0ZmFlYmI0YTA0M2UxMjg3MzQyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfODQ5NmYyZGYwNTc3NGZhZWJiNGEwNDNlMTI4NzM0MjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rcm9uMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lcm9uZ288L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWZhZDBjYTIyOWI0NGViODlhOGJjOWJhNjQ3Y2U3MjIuc2V0Q29udGVudChodG1sXzg0OTZmMmRmMDU3NzRmYWViYjRhMDQzZTEyODczNDI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk1MjA5MzBmYjU4YTQ4NGE5ZThiYTRiZTc5NzlmMzYyLmJpbmRQb3B1cChwb3B1cF81ZmFkMGNhMjI5YjQ0ZWI4OWE4YmM5YmE2NDdjZTcyMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTIyNTRhZTlmZjQ5NDE5YTg4ZjY5NjI0ZDhkMGVlNjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Ljc1LCAzNy4wODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTc3ZmUzYTU0ZGRiNDM3MjlkNmI3NGZiMTMwMzcyMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzk3NGRhZjkxODM0NGM0OTgzODU2OThlZTIxNWYwYmEgPSAkKGA8ZGl2IGlkPSJodG1sXzM5NzRkYWY5MTgzNDRjNDk4Mzg1Njk4ZWUyMTVmMGJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LdWxsbzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTc3ZmUzYTU0ZGRiNDM3MjlkNmI3NGZiMTMwMzcyMzMuc2V0Q29udGVudChodG1sXzM5NzRkYWY5MTgzNDRjNDk4Mzg1Njk4ZWUyMTVmMGJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyMjU0YWU5ZmY0OTQxOWE4OGY2OTYyNGQ4ZDBlZTY4LmJpbmRQb3B1cChwb3B1cF9hNzdmZTNhNTRkZGI0MzcyOWQ2Yjc0ZmIxMzAzNzIzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjFkZDU4NmJmNTJkNDI1ZGI5MTkxZDYwMDk2ZDgwNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC41LCAzNy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzMzNzJhMjM1YTFkNGI5OWE3ZDcwMTczYWQxYWQwZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjJlNWYzNGNjMzY1NDQ2NTg2MDFiNjUzY2EyZTM3NzEgPSAkKGA8ZGl2IGlkPSJodG1sX2IyZTVmMzRjYzM2NTQ0NjU4NjAxYjY1M2NhMmUzNzcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva3VuYTEyNjgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S3VuYW1hPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczMzcyYTIzNWExZDRiOTlhN2Q3MDE3M2FkMWFkMGUxLnNldENvbnRlbnQoaHRtbF9iMmU1ZjM0Y2MzNjU0NDY1ODYwMWI2NTNjYTJlMzc3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMWRkNTg2YmY1MmQ0MjVkYjkxOTFkNjAwOTZkODA0ZC5iaW5kUG9wdXAocG9wdXBfNzMzNzJhMjM1YTFkNGI5OWE3ZDcwMTczYWQxYWQwZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwZWRmOTU1NmJmMjRmN2E5MGFkNTliZTQ4MjZmY2YzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjIuODMzMzMzMzMzMywgODUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmZmVmNTJkOGIzNTQ5ZDNiMTExODQwMmIxMjAzZmU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyYjNjNzhiNjRhNDRmMGE4YWJkMjkxM2I5ZWUxMDg2ID0gJChgPGRpdiBpZD0iaHRtbF9iMmIzYzc4YjY0YTQ0ZjBhOGFiZDI5MTNiOWVlMTA4NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2t1cnUxMzAyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkt1cnVraDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZmZlZjUyZDhiMzU0OWQzYjExMTg0MDJiMTIwM2ZlNC5zZXRDb250ZW50KGh0bWxfYjJiM2M3OGI2NGE0NGYwYThhYmQyOTEzYjllZTEwODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDBlZGY5NTU2YmYyNGY3YTkwYWQ1OWJlNDgyNmZjZjMuYmluZFBvcHVwKHBvcHVwX2JmZmVmNTJkOGIzNTQ5ZDNiMTExODQwMmIxMjAzZmU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjVlZjI3NWRmYWI0ODg1ODFkMjgwNjM2MGY3N2I3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjE2NjY2NjY2NjY3LCAxNDIuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDU5ZDJkM2U4Yjk0ZDlhYjgwOWYxY2QyNjQxZTM2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjYxOWZhMTEwNmY0ZThkYTEwYjNiN2YzZThlMmIzYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTY2MTlmYTExMDZmNGU4ZGExMGIzYjdmM2U4ZTJiM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rd29tMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ld29tYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NDU5ZDJkM2U4Yjk0ZDlhYjgwOWYxY2QyNjQxZTM2Mi5zZXRDb250ZW50KGh0bWxfMTY2MTlmYTExMDZmNGU4ZGExMGIzYjdmM2U4ZTJiM2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWI1ZWYyNzVkZmFiNDg4NTgxZDI4MDYzNjBmNzdiNzcuYmluZFBvcHVwKHBvcHVwXzc0NTlkMmQzZThiOTRkOWFiODA5ZjFjZDI2NDFlMzYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZmJhZTAwODYzYWQ0YmJmYWQxZGNkNjkyMjQ4ZTZhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzMzMzMzMzMzMsIC0xMDEuODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWJjNjNiOGY0YjliNDVhOWE2NGU2ZTdiYTMyMTNkZGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGE1ZTg4MzA2MmRmNDkwYmE5YzU1MjQ5ZDFmZGZjZTEgPSAkKGA8ZGl2IGlkPSJodG1sXzBhNWU4ODMwNjJkZjQ5MGJhOWM1NTI0OWQxZmRmY2UxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYWtob3RhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YmM2M2I4ZjRiOWI0NWE5YTY0ZTZlN2JhMzIxM2RkZi5zZXRDb250ZW50KGh0bWxfMGE1ZTg4MzA2MmRmNDkwYmE5YzU1MjQ5ZDFmZGZjZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmZiYWUwMDg2M2FkNGJiZmFkMWRjZDY5MjI0OGU2YTMuYmluZFBvcHVwKHBvcHVwXzViYzYzYjhmNGI5YjQ1YTlhNjRlNmU3YmEzMjEzZGRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMzkxM2IyNmE4ZDk0ODFlODg1ZmMwODM0Yzc4Yzc5YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzcuMzMzMzMzMzMzMzMwMDAxLCAwLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTg3YmM2YjMyMzU0NGRiOTQ5MzRjYmE4YTJhNGJhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iN2NlMjM3NzAxZjY0NDdlYWQ5OTc3NzNjNWMyNzViZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjdjZTIzNzcwMWY2NDQ3ZWFkOTk3NzczYzVjMjc1YmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sZWxlMTI2NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MZWxlbWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDE4N2JjNmIzMjM1NDRkYjk0OTM0Y2JhOGEyYTRiYTQuc2V0Q29udGVudChodG1sX2I3Y2UyMzc3MDFmNjQ0N2VhZDk5Nzc3M2M1YzI3NWJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MzOTEzYjI2YThkOTQ4MWU4ODVmYzA4MzRjNzhjNzlhLmJpbmRQb3B1cChwb3B1cF9kMTg3YmM2YjMyMzU0NGRiOTQ5MzRjYmE4YTJhNGJhNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmI0ZTNkMGVmNzJlNDU0YzgyYjBjZTljOWRiNDkyOWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5Ljc1LCAxNy43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwYWZkMTMwMzg4ZTQ5NzdiNTQyZGU5OGY4NWJmZWQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyYjBlYzMwYjQwZjQ3M2I5YjJkNzA2YmRkODY1YjE0ID0gJChgPGRpdiBpZD0iaHRtbF9hMmIwZWMzMGI0MGY0NzNiOWIyZDcwNmJkZDg2NWIxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+THVhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMGFmZDEzMDM4OGU0OTc3YjU0MmRlOThmODViZmVkNS5zZXRDb250ZW50KGh0bWxfYTJiMGVjMzBiNDBmNDczYjliMmQ3MDZiZGQ4NjViMTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmI0ZTNkMGVmNzJlNDU0YzgyYjBjZTljOWRiNDkyOWYuYmluZFBvcHVwKHBvcHVwX2UwYWZkMTMwMzg4ZTQ5NzdiNTQyZGU5OGY4NWJmZWQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOTE2ODc5ZTAwODA0NTE3YTNiOTQ3ZTU0ZGNlMzI4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjMzMzMzMzMzMzMsIC0xMTcuMTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWY1NjAwM2QyMzI3NGJjNDg2MzQ2ZDE3N2Y4Mzk2M2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTQ4ZGI5MDlkYTQ4NDkzZTlkN2QzZjg2MjkyOTU1ZmMgPSAkKGA8ZGl2IGlkPSJodG1sXzk0OGRiOTA5ZGE0ODQ5M2U5ZDdkM2Y4NjI5Mjk1NWZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbHVpczEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+THVpc2XDsW88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWY1NjAwM2QyMzI3NGJjNDg2MzQ2ZDE3N2Y4Mzk2M2Muc2V0Q29udGVudChodG1sXzk0OGRiOTA5ZGE0ODQ5M2U5ZDdkM2Y4NjI5Mjk1NWZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U5MTY4NzllMDA4MDQ1MTdhM2I5NDdlNTRkY2UzMjhiLmJpbmRQb3B1cChwb3B1cF9lZjU2MDAzZDIzMjc0YmM0ODYzNDZkMTc3ZjgzOTYzYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmZlOTliOTI2ZTNiNGY2MmI2YTVmYjdhNDg5M2U0YzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi4wLCAxMDAuNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzZhZjUzNzJjYjZmNDI2Y2IwZDMyZjQ4NTRlMDYzZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODQwNzQyZTFiMzAwNDJhM2EzOGM4NWIzZjU5ZGY0ODkgPSAkKGA8ZGl2IGlkPSJodG1sXzg0MDc0MmUxYjMwMDQyYTNhMzhjODViM2Y1OWRmNDg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbHV1dTEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TMO8PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2YWY1MzcyY2I2ZjQyNmNiMGQzMmY0ODU0ZTA2M2YwLnNldENvbnRlbnQoaHRtbF84NDA3NDJlMWIzMDA0MmEzYTM4Yzg1YjNmNTlkZjQ4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZmU5OWI5MjZlM2I0ZjYyYjZhNWZiN2E0ODkzZTRjMS5iaW5kUG9wdXAocG9wdXBfMzZhZjUzNzJjYjZmNDI2Y2IwZDMyZjQ4NTRlMDYzZjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZhMzU0MTYwNTJmZTQwOTNiM2Q5NGQ2ODUwMjBlMGZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuMCwgMzYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5OWY2YmRiYjY2NjQ0MDQ4ODExZDczMzRjNzI3NjVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwNDcxN2M3ZmQ0YjQ5NWFhYzU4ZjU0NDdmYzg2NzdjID0gJChgPGRpdiBpZD0iaHRtbF9lMDQ3MTdjN2ZkNGI0OTVhYWM1OGY1NDQ3ZmM4Njc3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFhc2FpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OTlmNmJkYmI2NjY0NDA0ODgxMWQ3MzM0YzcyNzY1YS5zZXRDb250ZW50KGh0bWxfZTA0NzE3YzdmZDRiNDk1YWFjNThmNTQ0N2ZjODY3N2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmEzNTQxNjA1MmZlNDA5M2IzZDk0ZDY4NTAyMGUwZmIuYmluZFBvcHVwKHBvcHVwXzg5OWY2YmRiYjY2NjQ0MDQ4ODExZDczMzRjNzI3NjVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTgzNDA5NTc0NDg0MGUxOWNiZWUwMmQ1MmY2NjI2MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjc1LCAyMC44MzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2RkNTc2OTYwN2IzNDIxODk0ZTI5NGI4MjZmY2FjN2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjQ3MzBiMTQ1YjY0NDFhMGJmYjU2MDI4Y2Y4NjgyYzggPSAkKGA8ZGl2IGlkPSJodG1sXzI0NzMwYjE0NWI2NDQxYTBiZmI1NjAyOGNmODY4MmM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYWJhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZGQ1NzY5NjA3YjM0MjE4OTRlMjk0YjgyNmZjYWM3ZC5zZXRDb250ZW50KGh0bWxfMjQ3MzBiMTQ1YjY0NDFhMGJmYjU2MDI4Y2Y4NjgyYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTU4MzQwOTU3NDQ4NDBlMTljYmVlMDJkNTJmNjYyNjMuYmluZFBvcHVwKHBvcHVwXzdkZDU3Njk2MDdiMzQyMTg5NGUyOTRiODI2ZmNhYzdkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MGY5ZDFiNmE3NDY0OGYwOTcyZjVlZmYxNmE1OThhZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuNzUsIDExLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OGIyOTU3YWU4ZTE0MTA5OTM4Njk1OTNhZWU5YjI3NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDdlM2YxYWZlNWY0YmQ3ODQxZmU1YzViOTE5MDRiYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjQ3ZTNmMWFmZTVmNGJkNzg0MWZlNWM1YjkxOTA0YmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYW1iMTMxMiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYW1iaWxhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4YjI5NTdhZThlMTQxMDk5Mzg2OTU5M2FlZTliMjc0LnNldENvbnRlbnQoaHRtbF9mNDdlM2YxYWZlNWY0YmQ3ODQxZmU1YzViOTE5MDRiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MGY5ZDFiNmE3NDY0OGYwOTcyZjVlZmYxNmE1OThhZi5iaW5kUG9wdXAocG9wdXBfNjhiMjk1N2FlOGUxNDEwOTkzODY5NTkzYWVlOWIyNzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4NjRhNzIzZGVmNTRkMTlhNGVkYTVlZjRjOTkzYTM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMCwgMTEwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NWIxNThkODdkNWY0MWQ4OGNjYTJlNzAxZjQ2NGViNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YTJiNjhkZGZkNzU0MjEzYWM2NmIwMmNkZjFjNGM0ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNGEyYjY4ZGRmZDc1NDIxM2FjNjZiMDJjZGYxYzRjNGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hbmRhcmluPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NWIxNThkODdkNWY0MWQ4OGNjYTJlNzAxZjQ2NGViNy5zZXRDb250ZW50KGh0bWxfNGEyYjY4ZGRmZDc1NDIxM2FjNjZiMDJjZGYxYzRjNGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDg2NGE3MjNkZWY1NGQxOWE0ZWRhNWVmNGM5OTNhMzQuYmluZFBvcHVwKHBvcHVwXzY1YjE1OGQ4N2Q1ZjQxZDg4Y2NhMmU3MDFmNDY0ZWI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NjY0NGJkZDE4NDA0NzA4OTJlYWUzM2Y1MGE0NWIzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjAsIDEwMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTA5MTI0ODBlYWRhNGQwZGE0MjU3M2YxMGFlNmIxMmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODJmNGQ3MGNmNjU1NDE1ZjgxYjRlZjk5ZmUzYjM0MjYgPSAkKGA8ZGl2IGlkPSJodG1sXzgyZjRkNzBjZjY1NTQxNWY4MWI0ZWY5OWZlM2IzNDI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYW5nZ2h1ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwOTEyNDgwZWFkYTRkMGRhNDI1NzNmMTBhZTZiMTJlLnNldENvbnRlbnQoaHRtbF84MmY0ZDcwY2Y2NTU0MTVmODFiNGVmOTlmZTNiMzQyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NjY0NGJkZDE4NDA0NzA4OTJlYWUzM2Y1MGE0NWIzNi5iaW5kUG9wdXAocG9wdXBfMTA5MTI0ODBlYWRhNGQwZGE0MjU3M2YxMGFlNmIxMmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0YTRkN2IxNTA5MDRiYmM4Y2U4YjI2NjAzYjE5YTMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTM4LjAsIC03Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2ZlOGI1ZGUyZDdiNGE2Njg5NzBmNDNiNTBjMjk1MGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2FhZjg3OWU3NjU2NDk0YjhkZGY1NDMwNzY5NGY3OTEgPSAkKGA8ZGl2IGlkPSJodG1sXzNhYWY4NzllNzY1NjQ5NGI4ZGRmNTQzMDc2OTRmNzkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFwdTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFwdWR1bmd1bjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZmU4YjVkZTJkN2I0YTY2ODk3MGY0M2I1MGMyOTUwYy5zZXRDb250ZW50KGh0bWxfM2FhZjg3OWU3NjU2NDk0YjhkZGY1NDMwNzY5NGY3OTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjRhNGQ3YjE1MDkwNGJiYzhjZThiMjY2MDNiMTlhMzAuYmluZFBvcHVwKHBvcHVwXzNmZThiNWRlMmQ3YjRhNjY4OTcwZjQzYjUwYzI5NTBjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NzA1ZDI3MGEwYWM0MDBlYjgwNzI2MTUzNzA3NDkwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU3LjAsIDQ4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjBmNWJiMWY3NTQ0OTMxOWNiZjVlODQ0ZTA4MGJiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZGI4Y2QwMDU5MmM0ZmNiYWFkZjE3ZWYyMDhlZGIxYyA9ICQoYDxkaXYgaWQ9Imh0bWxfN2RiOGNkMDA1OTJjNGZjYmFhZGYxN2VmMjA4ZWRiMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcmkgKE1lYWRvdyk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZmMGY1YmIxZjc1NDQ5MzE5Y2JmNWU4NDRlMDgwYmI1LnNldENvbnRlbnQoaHRtbF83ZGI4Y2QwMDU5MmM0ZmNiYWFkZjE3ZWYyMDhlZGIxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NzA1ZDI3MGEwYWM0MDBlYjgwNzI2MTUzNzA3NDkwNC5iaW5kUG9wdXAocG9wdXBfZmYwZjViYjFmNzU0NDkzMTljYmY1ZTg0NGUwODBiYjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBhMDE0ZGUxZDc3ZTQzYjVhY2UzZTFhMjM5YjFjYmVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuMTY2NjY2NjY2NywgLTExMy4xNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Y2M3NjY1MmE4NmI0NDE5OGMzODQ4M2NmZTZkNWRiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYzk3YjM0NTM2YmU0MGFlOTNlNzEzNDY5MmVhOWUxMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmM5N2IzNDUzNmJlNDBhZTkzZTcxMzQ2OTJlYTllMTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXJpMTQ0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXJpY29wYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Y2M3NjY1MmE4NmI0NDE5OGMzODQ4M2NmZTZkNWRiZC5zZXRDb250ZW50KGh0bWxfZmM5N2IzNDUzNmJlNDBhZTkzZTcxMzQ2OTJlYTllMTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGEwMTRkZTFkNzdlNDNiNWFjZTNlMWEyMzliMWNiZWEuYmluZFBvcHVwKHBvcHVwXzhjYzc2NjUyYTg2YjQ0MTk4YzM4NDgzY2ZlNmQ1ZGJkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MjRhZmM0M2I3ODU0MWUzYTcxMjk3MGNjNWUwNDVmZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC44MzMzMzMzMzMzLCAxMTYuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxN2VkMDc3Mzc5MTRiYzc5ODE2NjM3NGIzZjU4NzUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJlMDQ3YjM4MzhiNTQ2ZjM4NmE4MTg3MGMyNzBiMjRlID0gJChgPGRpdiBpZD0iaHRtbF8yZTA0N2IzODM4YjU0NmYzODZhODE4NzBjMjcwYjI0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcnQxMjU1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcnR1dGh1bmlyYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MTdlZDA3NzM3OTE0YmM3OTgxNjYzNzRiM2Y1ODc1Mi5zZXRDb250ZW50KGh0bWxfMmUwNDdiMzgzOGI1NDZmMzg2YTgxODcwYzI3MGIyNGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjI0YWZjNDNiNzg1NDFlM2E3MTI5NzBjYzVlMDQ1ZmUuYmluZFBvcHVwKHBvcHVwXzgxN2VkMDc3Mzc5MTRiYzc5ODE2NjM3NGIzZjU4NzUyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODk5NjNiMjZiMTc0NTAyOTUyYjkyNzc4NGY4YTMwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3Ljc1LCAtOTYuOTE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFmY2NhMGMxMTU2ODQ5MTBhODJjN2Y4MmJkOTExZTU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1NWY0Y2JkZGFhNDQyMjY5NzQ1NDA1YTRjMjJjMWNkID0gJChgPGRpdiBpZD0iaHRtbF84NTVmNGNiZGRhYTQ0MjI2OTc0NTQwNWE0YzIyYzFjZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWF6YXRlYyAoQ2hpcXVpaHVpdGzDoW4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZmNjYTBjMTE1Njg0OTEwYTgyYzdmODJiZDkxMWU1OC5zZXRDb250ZW50KGh0bWxfODU1ZjRjYmRkYWE0NDIyNjk3NDU0MDVhNGMyMmMxY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODg5OTYzYjI2YjE3NDUwMjk1MmI5Mjc3ODRmOGEzMDUuYmluZFBvcHVwKHBvcHVwXzFmY2NhMGMxMTU2ODQ5MTBhODJjN2Y4MmJkOTExZTU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNWUzYzc0YmNiNTY0NjI0OGQ2N2Y2MzE3Yzc2NWU3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEuMCwgMjUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZmZTMxNmRmNzhkYzRmODE4Nzc3MTQwZjBlYzM4M2RkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4NzFhY2FkZTQwMTQ3YmE4N2Q4ZGY4ODIyYzI0MmZmID0gJChgPGRpdiBpZD0iaHRtbF8zODcxYWNhZGU0MDE0N2JhODdkOGRmODgyMmMyNDJmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21iYWExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1iYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZmUzMTZkZjc4ZGM0ZjgxODc3NzE0MGYwZWMzODNkZC5zZXRDb250ZW50KGh0bWxfMzg3MWFjYWRlNDAxNDdiYTg3ZDhkZjg4MjJjMjQyZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzVlM2M3NGJjYjU2NDYyNDhkNjdmNjMxN2M3NjVlNzguYmluZFBvcHVwKHBvcHVwX2ZmZTMxNmRmNzhkYzRmODE4Nzc3MTQwZjBlYzM4M2RkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZDRlZDhmZTg2Y2E0YjE3YTVmZGI5NGNmOTEzMDUzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy4xNjY2NjY2NjY3LCAxNDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzZTVlOGNiYmE2MzRkZDBiNTQzMzYyMTIzNTY5Y2E3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwMjg4MmM1Y2QxNTRjOWZiOWVmOGU5YWM2NTk3NzFiID0gJChgPGRpdiBpZD0iaHRtbF83MDI4ODJjNWNkMTU0YzlmYjllZjhlOWFjNjU5NzcxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21iYWIxMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1iYWJhcmFtPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzZTVlOGNiYmE2MzRkZDBiNTQzMzYyMTIzNTY5Y2E3LnNldENvbnRlbnQoaHRtbF83MDI4ODJjNWNkMTU0YzlmYjllZjhlOWFjNjU5NzcxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZDRlZDhmZTg2Y2E0YjE3YTVmZGI5NGNmOTEzMDUzMC5iaW5kUG9wdXAocG9wdXBfOTNlNWU4Y2JiYTYzNGRkMGI1NDMzNjIxMjM1NjljYTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1NmJjNDIyMDhkYzRhOGY4Y2ZkZmJkM2QyZjE3MTEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjQuNzUsIDk0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYmUzOTQ1ODczZTg0M2EyYjU5NjA0MzgzNTIxNjRmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMGY1MTdmY2MwOGQ0YTcyYjQ4YzhhMmQyZjE4Y2UzYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjBmNTE3ZmNjMDhkNGE3MmI0OGM4YTJkMmYxOGNlM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1laXRoZWk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiZTM5NDU4NzNlODQzYTJiNTk2MDQzODM1MjE2NGYwLnNldENvbnRlbnQoaHRtbF9mMGY1MTdmY2MwOGQ0YTcyYjQ4YzhhMmQyZjE4Y2UzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTZiYzQyMjA4ZGM0YThmOGNmZGZiZDNkMmYxNzExMC5iaW5kUG9wdXAocG9wdXBfMmJlMzk0NTg3M2U4NDNhMmI1OTYwNDM4MzUyMTY0ZjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwODg2ZGUwNWJlNjQ0N2ZhYWFhNTQ1NzI1NGU5MWI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMCwgNjIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzllYWFiNTFhMTM4YTQzMWQ4YjIxOTg4ZDlmYzVmMDM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1ZTMxOGU5MDAwZjQ2ODY5NjE1ZjlhNmI0ZjgyMmNlID0gJChgPGRpdiBpZD0iaHRtbF9kNWUzMThlOTAwMGY0Njg2OTYxNWY5YTZiNGY4MjJjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9naG9sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZWFhYjUxYTEzOGE0MzFkOGIyMTk4OGQ5ZmM1ZjAzNy5zZXRDb250ZW50KGh0bWxfZDVlMzE4ZTkwMDBmNDY4Njk2MTVmOWE2YjRmODIyY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDA4ODZkZTA1YmU2NDQ3ZmFhYWE1NDU3MjU0ZTkxYjUuYmluZFBvcHVwKHBvcHVwXzllYWFiNTFhMTM4YTQzMWQ4YjIxOTg4ZDlmYzVmMDM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNTNjNzdkYzZmMGQ0Y2ZjODI4NWU5NWJkNWE0ZmY5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjAsIDMwLjE2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNWQ0MzZkM2ViNzM0NTFjYjcyNjZkNDg0YzJmMDdlNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZDIzMWVhMWUzYmQ0YjIwYWZmOTAxZGYwNjlkMWQwNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMWQyMzFlYTFlM2JkNGIyMGFmZjkwMWRmMDY5ZDFkMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tb3JvMTI4NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Nb3JvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1ZDQzNmQzZWI3MzQ1MWNiNzI2NmQ0ODRjMmYwN2U1LnNldENvbnRlbnQoaHRtbF8xZDIzMWVhMWUzYmQ0YjIwYWZmOTAxZGYwNjlkMWQwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNTNjNzdkYzZmMGQ0Y2ZjODI4NWU5NWJkNWE0ZmY5MC5iaW5kUG9wdXAocG9wdXBfYjVkNDM2ZDNlYjczNDUxY2I3MjY2ZDQ4NGMyZjA3ZTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkNmQyNWU4OGRiODQ4YmRhMzY2YjgzY2FjYmYxNDU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuMCwgLTcyLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMjEwNzgxZmYzMWM0MWZjOTQ1MzY4NDk2YTZjYmEwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMGRmNmI4MTdmZjA0YWNjYjZlZjQyMjVmNDIzYjM2NiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDBkZjZiODE3ZmYwNGFjY2I2ZWY0MjI1ZjQyM2IzNjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tdWluMTI0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NdWluYW5lPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyMTA3ODFmZjMxYzQxZmM5NDUzNjg0OTZhNmNiYTBmLnNldENvbnRlbnQoaHRtbF8wMGRmNmI4MTdmZjA0YWNjYjZlZjQyMjVmNDIzYjM2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZDZkMjVlODhkYjg0OGJkYTM2NmI4M2NhY2JmMTQ1OC5iaW5kUG9wdXAocG9wdXBfZTIxMDc4MWZmMzFjNDFmYzk0NTM2ODQ5NmE2Y2JhMGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjZTYzZTMzMTJmNjRhOWZhNTYxN2ViYTlkYjQ3NGEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4wLCAxMS42NjY2NjY2NjY3MDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zM2QwNTE0ZGNlZjg0ZDRiYmU4MWY0M2I2ZTM4YTRmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NzI1NTFlMjE3Zjg0NmFjOGMzZTVjMzkwYjRkOWNiOSA9ICQoYDxkaXYgaWQ9Imh0bWxfODcyNTUxZTIxN2Y4NDZhYzhjM2U1YzM5MGI0ZDljYjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NdW11eWU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzNkMDUxNGRjZWY4NGQ0YmJlODFmNDNiNmUzOGE0ZjIuc2V0Q29udGVudChodG1sXzg3MjU1MWUyMTdmODQ2YWM4YzNlNWMzOTBiNGQ5Y2I5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjZTYzZTMzMTJmNjRhOWZhNTYxN2ViYTlkYjQ3NGEzLmJpbmRQb3B1cChwb3B1cF8zM2QwNTE0ZGNlZjg0ZDRiYmU4MWY0M2I2ZTM4YTRmMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGU5MmVlZTliM2VjNDQ0Yjk1YTRkNjE2MjNmNzFlODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjUsIDMzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDY2NTg2MDFkOTc0YWMwYWY3NTFhYWVlODBlZmI4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNDUwM2NkYzY4YTE0NTQyODdiMDZjZWY3ZDI2MWE4OSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTQ1MDNjZGM2OGExNDU0Mjg3YjA2Y2VmN2QyNjFhODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tdXJsMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NdXJsZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDY2NTg2MDFkOTc0YWMwYWY3NTFhYWVlODBlZmI4MC5zZXRDb250ZW50KGh0bWxfMTQ1MDNjZGM2OGExNDU0Mjg3YjA2Y2VmN2QyNjFhODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGU5MmVlZTliM2VjNDQ0Yjk1YTRkNjE2MjNmNzFlODUuYmluZFBvcHVwKHBvcHVwXzRkNjY1ODYwMWQ5NzRhYzBhZjc1MWFhZWU4MGVmYjgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NmQ1MjUzZDhmZWE0ZDZhYWJjYTU3YzU4ZTJiZDA0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNC42NjY2NjY2NjY3MDAwMDEsIDEyOS42NjY2NjY2NjcwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1NzQ0NmI4MDMyNjRmMmJhNDg5MjY1MTc2ZTA5M2U1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5OGViZWMwN2Q5OTQ0MGRhN2JjNGNjNmE2NDdhZDkzID0gJChgPGRpdiBpZD0iaHRtbF9mOThlYmVjMDdkOTk0NDBkYTdiYzRjYzZhNjQ3YWQ5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TXVycmluaC1QYXRoYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTU3NDQ2YjgwMzI2NGYyYmE0ODkyNjUxNzZlMDkzZTUuc2V0Q29udGVudChodG1sX2Y5OGViZWMwN2Q5OTQ0MGRhN2JjNGNjNmE2NDdhZDkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU2ZDUyNTNkOGZlYTRkNmFhYmNhNTdjNThlMmJkMDRhLmJpbmRQb3B1cChwb3B1cF9hNTc0NDZiODAzMjY0ZjJiYTQ4OTI2NTE3NmUwOTNlNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDE4OGQyNDJlOWYyNDIyMWE1OWVjNzM3MmFhNDJkZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuMCwgLTU5LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYTRiNDgzNDczN2I0NjIzOWI1MzkzMmExYTdlYjU3NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kODkyOTg1MmY2YTU0YWM1OGIzMDE3Yjc4YzIwNTc0NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDg5Mjk4NTJmNmE1NGFjNThiMzAxN2I3OGMyMDU3NDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5hbWJpa3XDoXJhIChTb3V0aGVybik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhNGI0ODM0NzM3YjQ2MjM5YjUzOTMyYTFhN2ViNTc1LnNldENvbnRlbnQoaHRtbF9kODkyOTg1MmY2YTU0YWM1OGIzMDE3Yjc4YzIwNTc0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMTg4ZDI0MmU5ZjI0MjIxYTU5ZWM3MzcyYWE0MmRkNi5iaW5kUG9wdXAocG9wdXBfYWE0YjQ4MzQ3MzdiNDYyMzliNTM5MzJhMWE3ZWI1NzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3OWM5Y2ZkN2EyNjQwOWJiMjBmZGRkYWMzZWZjYjU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMDgzMzMzMzMzMjk5OTk5LCAzNy41ODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2Q0YTRlOTQzZDBmNDEyOTlmYzQxMThiOTcxM2VlZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzY2MmVjOTVhYWI3NGM5ZDhlOThmM2I3MDM5ODcxZjQgPSAkKGA8ZGl2IGlkPSJodG1sX2M2NjJlYzk1YWFiNzRjOWQ4ZTk4ZjNiNzAzOTg3MWY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OYXJhIChpbiBFdGhpb3BpYSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkNGE0ZTk0M2QwZjQxMjk5ZmM0MTE4Yjk3MTNlZWQzLnNldENvbnRlbnQoaHRtbF9jNjYyZWM5NWFhYjc0YzlkOGU5OGYzYjcwMzk4NzFmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NzljOWNmZDdhMjY0MDliYjIwZmRkZGFjM2VmY2I1Ny5iaW5kUG9wdXAocG9wdXBfY2Q0YTRlOTQzZDBmNDEyOTlmYzQxMThiOTcxM2VlZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5N2Y2OTU1M2NhNTQ2YjU5YTE5NmM0Yjk5YzJhOTdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMCwgNDcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjNzhlYjZiYTQ0YjQ5YTRiYzc1NzgwYzhhNTc4MWY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4OGFjNzBmY2ZiMDQ3MzE4YzU3NjM3YzJhYjgyZDQ2ID0gJChgPGRpdiBpZD0iaHRtbF85ODhhYzcwZmNmYjA0NzMxOGM1NzYzN2MyYWI4MmQ0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmVvLUFyYW1haWMgKFBlcnNpYW4gQXplcmJhaWphbik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JjNzhlYjZiYTQ0YjQ5YTRiYzc1NzgwYzhhNTc4MWY4LnNldENvbnRlbnQoaHRtbF85ODhhYzcwZmNmYjA0NzMxOGM1NzYzN2MyYWI4MmQ0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wOTdmNjk1NTNjYTU0NmI1OWExOTZjNGI5OWMyYTk3Yi5iaW5kUG9wdXAocG9wdXBfYmM3OGViNmJhNDRiNDlhNGJjNzU3ODBjOGE1NzgxZjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxODI1Y2M3ZDhiYTRkMzk4YTdjMjIzNmE5MTdlM2RhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjcuNjY2NjY2NjY2NywgODUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFmNDEyOWJlZWQ2MTQyNzA5MmFhN2QzODVjMmMyYjllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwZGQyOWMwM2Y1YzQ0M2FhMjMzYzFhYzYyZDJjN2JlID0gJChgPGRpdiBpZD0iaHRtbF8zMGRkMjljMDNmNWM0NDNhYTIzM2MxYWM2MmQyYzdiZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3YXJpIChLYXRobWFuZHUpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZjQxMjliZWVkNjE0MjcwOTJhYTdkMzg1YzJjMmI5ZS5zZXRDb250ZW50KGh0bWxfMzBkZDI5YzAzZjVjNDQzYWEyMzNjMWFjNjJkMmM3YmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzE4MjVjYzdkOGJhNGQzOThhN2MyMjM2YTkxN2UzZGEuYmluZFBvcHVwKHBvcHVwXzFmNDEyOWJlZWQ2MTQyNzA5MmFhN2QzODVjMmMyYjllKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzkyOTFmZmZjNzk0NzJkOTg5Mjk5NjUzYmNlNTU4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzcxLjAsIDkzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMzMzMjkwOTQ5Mzk0ZGQyODExMjdiNWU5MWM3NzI4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjBhYzVjNzE1NTU0YmU4YWFjOWVjMDkyNDA3MzkxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWYwYWM1YzcxNTU1NGJlOGFhYzllYzA5MjQwNzM5MTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uZ2FuMTI5MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OZ2FuYXNhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMzMzMjkwOTQ5Mzk0ZGQyODExMjdiNWU5MWM3NzI4MC5zZXRDb250ZW50KGh0bWxfOWYwYWM1YzcxNTU1NGJlOGFhYzllYzA5MjQwNzM5MTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTc5MjkxZmZmYzc5NDcyZDk4OTI5OTY1M2JjZTU1OGIuYmluZFBvcHVwKHBvcHVwX2IzMzMyOTA5NDkzOTRkZDI4MTEyN2I1ZTkxYzc3MjgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYTM2ZWUzMWU5NmQ0Zjk0YmY3ZmYwMWQxYWEyMzVhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMy41LCAtNjAuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhMWQ4ZGY5ZjkxMDQ4MGZiNTgzOGQ4OTRjMDg1NTI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0Yzc0NWNlOGY3OTQ0ZmZhYWFjN2I3MjAyMDMzZWFhID0gJChgPGRpdiBpZD0iaHRtbF83NGM3NDVjZThmNzk0NGZmYWFhYzdiNzIwMjAzM2VhYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tml2YWNsZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2ExZDhkZjlmOTEwNDgwZmI1ODM4ZDg5NGMwODU1Mjkuc2V0Q29udGVudChodG1sXzc0Yzc0NWNlOGY3OTQ0ZmZhYWFjN2I3MjAyMDMzZWFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FhMzZlZTMxZTk2ZDRmOTRiZjdmZjAxZDFhYTIzNWFiLmJpbmRQb3B1cChwb3B1cF9jYTFkOGRmOWY5MTA0ODBmYjU4MzhkODk0YzA4NTUyOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTAxZmY4OWM0Y2EzNDY1ZGJmMGE3NDY0NGJjOTgxNDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMC45MTY2NjY2NjY2NjcsIDI5LjgzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NmQyMmFlMzdhMjU0Yzc1ODFkNTVmYjdlZGYzMmVhYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMThiODFlMjhjMjE0MTA3OTkyYmQyYTRkNTMxZjliNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYjE4YjgxZTI4YzIxNDEwNzk5MmJkMmE0ZDUzMWY5YjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ua29yMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Oa29yZS1LaWdhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc2ZDIyYWUzN2EyNTRjNzU4MWQ1NWZiN2VkZjMyZWFhLnNldENvbnRlbnQoaHRtbF9iMThiODFlMjhjMjE0MTA3OTkyYmQyYTRkNTMxZjliNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMDFmZjg5YzRjYTM0NjVkYmYwYTc0NjQ0YmM5ODE0My5iaW5kUG9wdXAocG9wdXBfNzZkMjJhZTM3YTI1NGM3NTgxZDU1ZmI3ZWRmMzJlYWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM3YWQxNzI0ZGUzZTQxYWRhMzM1YjZlZmU0ZGExZmUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi40MTY2NjY2NjY2Njk5OTksIDEwLjU4MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OTM5MjM5YzYxZWU0NzhlYjMyZDBmNzExOGRhM2NiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80Nzc3NTZjZjhjODk0NmFhYjY1ZmEzMTYzOTBiNzY5YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDc3NzU2Y2Y4Yzg5NDZhYWI2NWZhMzE2MzkwYjc2OWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vbmk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5MzkyMzljNjFlZTQ3OGViMzJkMGY3MTE4ZGEzY2I3LnNldENvbnRlbnQoaHRtbF80Nzc3NTZjZjhjODk0NmFhYjY1ZmEzMTYzOTBiNzY5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zN2FkMTcyNGRlM2U0MWFkYTMzNWI2ZWZlNGRhMWZlMi5iaW5kUG9wdXAocG9wdXBfNTkzOTIzOWM2MWVlNDc4ZWIzMmQwZjcxMThkYTNjYjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwMjZmNWQwN2Y2NjQ4MTI5YzRhMzNjNjQzM2JlNTU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjEuMCwgOC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGFhOTEwNzlkMTNmNDZkZGEwODBmODE3ZmIzZDg5M2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjc4NzlmMzE5NmM3NDEzNGI4NDZiNTQzMDg5YzM3NDMgPSAkKGA8ZGl2IGlkPSJodG1sXzI3ODc5ZjMxOTZjNzQxMzRiODQ2YjU0MzA4OWMzNzQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9ydzEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9yd2VnaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhYTkxMDc5ZDEzZjQ2ZGRhMDgwZjgxN2ZiM2Q4OTNjLnNldENvbnRlbnQoaHRtbF8yNzg3OWYzMTk2Yzc0MTM0Yjg0NmI1NDMwODljMzc0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMDI2ZjVkMDdmNjY0ODEyOWM0YTMzYzY0MzNiZTU1OS5iaW5kUG9wdXAocG9wdXBfZGFhOTEwNzlkMTNmNDZkZGEwODBmODE3ZmIzZDg5M2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjZjk3OWFlZDRlNDQ2ZDI5MzZiOTI5Mzk4NTczMTkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjEuOTE2NjY2NjY2NywgMTA2LjQxNjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4OWQ1MGIzMjYzMDQwMjhhNjQzMzViZjkzODcxMmI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAyYzE3ODFkODIxODQ2ZTBiYTQ5MzRhYTMxNTdmYmRhID0gJChgPGRpdiBpZD0iaHRtbF8wMmMxNzgxZDgyMTg0NmUwYmE0OTM0YWEzMTU3ZmJkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TnVuZyAoaW4gVmlldG5hbSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4OWQ1MGIzMjYzMDQwMjhhNjQzMzViZjkzODcxMmI3LnNldENvbnRlbnQoaHRtbF8wMmMxNzgxZDgyMTg0NmUwYmE0OTM0YWEzMTU3ZmJkYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80Y2Y5NzlhZWQ0ZTQ0NmQyOTM2YjkyOTM5ODU3MzE5Mi5iaW5kUG9wdXAocG9wdXBfZDg5ZDUwYjMyNjMwNDAyOGE2NDMzNWJmOTM4NzEyYjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNlZmU3ODZjYTk1ZDRiYzJhZjdiZDdlZThkNTFhNTBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjc1LCAxMzUuNjY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzk5NmI5YWFhZDQ0NGRmOWUxYjc1Y2JjMjZjMjY0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NjMzYTEyN2EyMzE0YjQyYjc3NWMxYjU3ZGJiN2IwYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDYzM2ExMjdhMjMxNGI0MmI3NzVjMWI1N2RiYjdiMGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk51bmdndWJ1eXU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3OTk2YjlhYWFkNDQ0ZGY5ZTFiNzVjYmMyNmMyNjRhLnNldENvbnRlbnQoaHRtbF80NjMzYTEyN2EyMzE0YjQyYjc3NWMxYjU3ZGJiN2IwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZWZlNzg2Y2E5NWQ0YmMyYWY3YmQ3ZWU4ZDUxYTUwZi5iaW5kUG9wdXAocG9wdXBfYzc5OTZiOWFhYWQ0NDRkZjllMWI3NWNiYzI2YzI2NGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkMjY4N2M4ZWE1MTQ0NTA5N2ZjMjE0MTdlNjIyMDRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuMCwgLTExMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDBlNzg1ZTM0MTViNDBkODhmYTE5ZTJlNzg3ZjUxYTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmNiNDVjNTA0Y2E5NDgxYmEzMDJlZDE3MTU4NGE5MDUgPSAkKGA8ZGl2IGlkPSJodG1sX2ZjYjQ1YzUwNGNhOTQ4MWJhMzAyZWQxNzE1ODRhOTA1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PJ29kaGFtPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MGU3ODVlMzQxNWI0MGQ4OGZhMTllMmU3ODdmNTFhMS5zZXRDb250ZW50KGh0bWxfZmNiNDVjNTA0Y2E5NDgxYmEzMDJlZDE3MTU4NGE5MDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2QyNjg3YzhlYTUxNDQ1MDk3ZmMyMTQxN2U2MjIwNGQuYmluZFBvcHVwKHBvcHVwXzQwZTc4NWUzNDE1YjQwZDg4ZmExOWUyZTc4N2Y1MWExKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNmI1YmUyYWU1MmY0NTQzYTE2ZTBhNDc5NjM2ODdiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQuNjY2NjY2NjY2NjcsIDYuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjFlZmMyODI3OTE0MWVlYWZiYjRmOWQ5Y2JkMjRhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNTQwOTA2Yjk2ZDA0NTU4YTIyZmRiOTM0MjVkM2ViYiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzU0MDkwNmI5NmQwNDU1OGEyMmZkYjkzNDI1ZDNlYmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9vZ2JpMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5PZ2JpYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjFlZmMyODI3OTE0MWVlYWZiYjRmOWQ5Y2JkMjRhNC5zZXRDb250ZW50KGh0bWxfYzU0MDkwNmI5NmQwNDU1OGEyMmZkYjkzNDI1ZDNlYmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTZiNWJlMmFlNTJmNDU0M2ExNmUwYTQ3OTYzNjg3YmIuYmluZFBvcHVwKHBvcHVwXzMyMWVmYzI4Mjc5MTQxZWVhZmJiNGY5ZDljYmQyNGE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NjQzY2VjOTFhNjg0ZjFmOGVjMGFmOTQ5Yzg3OTA5NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjUsIDY5Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODBkMGUxMjVlYjU2NDk0YThmY2Y3MTUzNjg5NTBiZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGQyMzJhNjM2MDc2NDg2NTk4NzNmODUzMTJkYWVjZTUgPSAkKGA8ZGl2IGlkPSJodG1sXzhkMjMyYTYzNjA3NjQ4NjU5ODczZjg1MzEyZGFlY2U1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvb3JtdTEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+T3JtdXJpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwZDBlMTI1ZWI1NjQ5NGE4ZmNmNzE1MzY4OTUwYmZiLnNldENvbnRlbnQoaHRtbF84ZDIzMmE2MzYwNzY0ODY1OTg3M2Y4NTMxMmRhZWNlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NjQzY2VjOTFhNjg0ZjFmOGVjMGFmOTQ5Yzg3OTA5NS5iaW5kUG9wdXAocG9wdXBfODBkMGUxMjVlYjU2NDk0YThmY2Y3MTUzNjg5NTBiZmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyY2FkOTQ4M2RjODQyOTFiZDc3NWI1NzBmNzA3YTVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjAuMTY2NjY2NjY2NywgLTk5LjE2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzFmNjkwZjIyZGM0YzEwODMxNmQ3Y2Y0NDNkNGZkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOGI4ZTFkMmQ3OWM0MWJhOTkxZGNiZWRmYWU1MmJjMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjhiOGUxZDJkNzljNDFiYTk5MWRjYmVkZmFlNTJiYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk90b23DrSAoTWV6cXVpdGFsKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTMxZjY5MGYyMmRjNGMxMDgzMTZkN2NmNDQzZDRmZDUuc2V0Q29udGVudChodG1sX2Y4YjhlMWQyZDc5YzQxYmE5OTFkY2JlZGZhZTUyYmMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyY2FkOTQ4M2RjODQyOTFiZDc3NWI1NzBmNzA3YTVlLmJpbmRQb3B1cChwb3B1cF85MzFmNjkwZjIyZGM0YzEwODMxNmQ3Y2Y0NDNkNGZkNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTJhYTQwOTg4ZTcwNGUwZmJmZWMwYTAxYjMwZGEyMDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi40MTY2NjY2NjY3LCAxMDcuMDgzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2U2NWIwNzRjZTY2NDdmYzg0MDJlYWZhMjU5NDlkMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmVlZWYzNjZlZjBkNDYxMWIyNzU2MWYyZjAyM2RkZjIgPSAkKGA8ZGl2IGlkPSJodG1sXzZlZWVmMzY2ZWYwZDQ2MTFiMjc1NjFmMmYwMjNkZGYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGFjbzEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGFjb2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2U2NWIwNzRjZTY2NDdmYzg0MDJlYWZhMjU5NDlkMTIuc2V0Q29udGVudChodG1sXzZlZWVmMzY2ZWYwZDQ2MTFiMjc1NjFmMmYwMjNkZGYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyYWE0MDk4OGU3MDRlMGZiZmVjMGEwMWIzMGRhMjA5LmJpbmRQb3B1cChwb3B1cF9jZTY1YjA3NGNlNjY0N2ZjODQwMmVhZmEyNTk0OWQxMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmNjOTVlNGVjNzBjNGJlOTkyNmY5NjY0ZDY1ZGM5NTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi41LCAxMjAuODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzMyMWZkY2VkNTQ5NGFjZTk2OGFhMDJhYzI1ZjQ1MmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQ4Mzc3NjE2MzQwNDE3Zjg2ODNiNTY4M2YyZjAyNjMgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0ODM3NzYxNjM0MDQxN2Y4NjgzYjU2ODNmMmYwMjYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGFpdzEyNDgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGFpd2FuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczMjFmZGNlZDU0OTRhY2U5NjhhYTAyYWMyNWY0NTJlLnNldENvbnRlbnQoaHRtbF9kNDgzNzc2MTYzNDA0MTdmODY4M2I1NjgzZjJmMDI2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82Y2M5NWU0ZWM3MGM0YmU5OTI2Zjk2NjRkNjVkYzk1Ny5iaW5kUG9wdXAocG9wdXBfNzMyMWZkY2VkNTQ5NGFjZTk2OGFhMDJhYzI1ZjQ1MmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwNmZkYThjMDcxZTQ0MDE4MDVkODkyYmZhN2IzZmY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMCwgLTY0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDVmNzY2MzM5NGQ0MTNmOWE0NGU2MzNlZmQ5NzAyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYjBkNzdkYzA0NmE0ZjczYTcwNzEwODQxZDA1NzM1OCA9ICQoYDxkaXYgaWQ9Imh0bWxfYmIwZDc3ZGMwNDZhNGY3M2E3MDcxMDg0MWQwNTczNTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhdW1hcsOtPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMDVmNzY2MzM5NGQ0MTNmOWE0NGU2MzNlZmQ5NzAyNy5zZXRDb250ZW50KGh0bWxfYmIwZDc3ZGMwNDZhNGY3M2E3MDcxMDg0MWQwNTczNTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTA2ZmRhOGMwNzFlNDQwMTgwNWQ4OTJiZmE3YjNmZjcuYmluZFBvcHVwKHBvcHVwX2IwNWY3NjYzMzk0ZDQxM2Y5YTQ0ZTYzM2VmZDk3MDI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZWE1ODhlNTczMjM0OTAyOTgwMTdiMWEyYTdjZWE2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjAsIDU0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMzdhZmE0NDc3Y2E0ZmIzYjRmNjNhNDZkNWY0MzM5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZTJkYzIyNjEzZjk0YTY3YmNhMmVmMGNmZWRjZmQzNSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2UyZGMyMjYxM2Y5NGE2N2JjYTJlZjBjZmVkY2ZkMzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBlcnNpYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzN2FmYTQ0NzdjYTRmYjNiNGY2M2E0NmQ1ZjQzMzkzLnNldENvbnRlbnQoaHRtbF9jZTJkYzIyNjEzZjk0YTY3YmNhMmVmMGNmZWRjZmQzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZWE1ODhlNTczMjM0OTAyOTgwMTdiMWEyYTdjZWE2NC5iaW5kUG9wdXAocG9wdXBfMDM3YWZhNDQ3N2NhNGZiM2I0ZjYzYTQ2ZDVmNDMzOTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FhNWVkZmI3MDU0YzQ3NTNiMTdhYTY4MTUzNTExNzc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMCwgOTkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5ODhkMDI1MjUxNjRiZjhhMDExZDEwMzBhNjdmMTg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1NTVmZDJkOTcyMjQyMGE4NTY5NWJlODZkYjBlMTE1ID0gJChgPGRpdiBpZD0iaHRtbF9iNTU1ZmQyZDk3MjI0MjBhODU2OTViZTg2ZGIwZTExNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGhsb25nPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOTg4ZDAyNTI1MTY0YmY4YTAxMWQxMDMwYTY3ZjE4Ny5zZXRDb250ZW50KGh0bWxfYjU1NWZkMmQ5NzIyNDIwYTg1Njk1YmU4NmRiMGUxMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWE1ZWRmYjcwNTRjNDc1M2IxN2FhNjgxNTM1MTE3NzYuYmluZFBvcHVwKHBvcHVwX2Q5ODhkMDI1MjUxNjRiZjhhMDExZDEwMzBhNjdmMTg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kN2Q4MTlkMDAwM2U0ODMxYjlmMTk5YzFmYWQwZTk4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00OS4wLCAtNzUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmN2U5OTZmZjcxODRmZWE4OGI0ZWYyNmUzYWFlMGZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhMGQ5YTNlYmZmMjQ4ZWU5NWE3Zjk3ZjA5ZmJkOTZiID0gJChgPGRpdiBpZD0iaHRtbF8wYTBkOWEzZWJmZjI0OGVlOTVhN2Y5N2YwOWZiZDk2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Fhd2ExMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlFhd2FzcWFyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmN2U5OTZmZjcxODRmZWE4OGI0ZWYyNmUzYWFlMGZhLnNldENvbnRlbnQoaHRtbF8wYTBkOWEzZWJmZjI0OGVlOTVhN2Y5N2YwOWZiZDk2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kN2Q4MTlkMDAwM2U0ODMxYjlmMTk5YzFmYWQwZTk4MC5iaW5kUG9wdXAocG9wdXBfOGY3ZTk5NmZmNzE4NGZlYTg4YjRlZjI2ZTNhYWUwZmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxNzlkYjA0MjVmYjQzMGQ5ZDQxM2Q4Yjk0NzMzYzAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMCwgMjUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlYjZiYmRhYzZiNjRiZGU4NGMzZDhjZWNlNGMxN2Y1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4MzMxNzkzNTM4NzQ5NGFhYzY5YWU5NjI0ZTliNjQ5ID0gJChgPGRpdiBpZD0iaHRtbF85ODMzMTc5MzUzODc0OTRhYWM2OWFlOTYyNGU5YjY0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3JvbWExMzI3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJvbWFuaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlYjZiYmRhYzZiNjRiZGU4NGMzZDhjZWNlNGMxN2Y1LnNldENvbnRlbnQoaHRtbF85ODMzMTc5MzUzODc0OTRhYWM2OWFlOTYyNGU5YjY0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMTc5ZGIwNDI1ZmI0MzBkOWQ0MTNkOGI5NDczM2MwMC5iaW5kUG9wdXAocG9wdXBfNWViNmJiZGFjNmI2NGJkZTg0YzNkOGNlY2U0YzE3ZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzODA0NDBiNGMxMjQ0ZDc4OGI2MThjZGJlYTgxNDVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuNzUsIDkuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiOWI5ZDFjNGVkYjQyMDZiMGFmMTNiYzFjZjM5N2M5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmNzBiODgxZmZlZDQzYmQ5OGMwYTIyMzc0ZGYzMTFjID0gJChgPGRpdiBpZD0iaHRtbF82ZjcwYjg4MWZmZWQ0M2JkOThjMGEyMjM3NGRmMzExYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9tYW5zY2ggKFNjaGFyYW5zKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGI5YjlkMWM0ZWRiNDIwNmIwYWYxM2JjMWNmMzk3Yzkuc2V0Q29udGVudChodG1sXzZmNzBiODgxZmZlZDQzYmQ5OGMwYTIyMzc0ZGYzMTFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzODA0NDBiNGMxMjQ0ZDc4OGI2MThjZGJlYTgxNDVkLmJpbmRQb3B1cChwb3B1cF9kYjliOWQxYzRlZGI0MjA2YjBhZjEzYmMxY2YzOTdjOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTQyZjYwZDk0OWQ1NDEyYjk0ZGE1MGZkZjFjNTk5MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi44MzMzMzMzMzMzLCAxMjAuODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjBkNjkyNDc5NDA2NDBkOGJiYTJlNmNiM2NhZjM1ZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjVmZTQ5YzExYWQ3NDI5ZWJhYjFlYjc2YzU5ZmZjODEgPSAkKGA8ZGl2IGlkPSJodG1sXzY1ZmU0OWMxMWFkNzQyOWViYWIxZWI3NmM1OWZmYzgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SdWthaSAoVGFuYW4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMGQ2OTI0Nzk0MDY0MGQ4YmJhMmU2Y2IzY2FmMzVmNi5zZXRDb250ZW50KGh0bWxfNjVmZTQ5YzExYWQ3NDI5ZWJhYjFlYjc2YzU5ZmZjODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTQyZjYwZDk0OWQ1NDEyYjk0ZGE1MGZkZjFjNTk5MTEuYmluZFBvcHVwKHBvcHVwXzIwZDY5MjQ3OTQwNjQwZDhiYmEyZTZjYjNjYWYzNWY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZjMzNzI2ODE4ZTA0M2RmYmRjNjRmMDYyZGFhNTk1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMuNjY2NjY2NjY2NjcsIDExNS42NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MGRlNjdiY2UxY2Y0YTYzODkzYzQ5ZjczZjE5MzIzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOTQzODBjMTM3OTA0MDA4OTQwMzQ4MzM5ZTg1YzNhYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDk0MzgwYzEzNzkwNDAwODk0MDM0ODMzOWU4NWMzYWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zYWJhMTI2NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TYSdiYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODBkZTY3YmNlMWNmNGE2Mzg5M2M0OWY3M2YxOTMyM2Iuc2V0Q29udGVudChodG1sXzA5NDM4MGMxMzc5MDQwMDg5NDAzNDgzMzllODVjM2FiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhmMzM3MjY4MThlMDQzZGZiZGM2NGYwNjJkYWE1OTVlLmJpbmRQb3B1cChwb3B1cF84MGRlNjdiY2UxY2Y0YTYzODkzYzQ5ZjczZjE5MzIzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODQ2MDdhMjRhOWY4NDUwNjhlZjUwNzMzYjQ2MThiMTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNTMuMCwgLTcwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80N2U2YWVmOTQ2YzE0ZGEyOWEwMTc3ZWM5ZjFhYTYxOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MGY2YWU1NTk3ZTk0ZWE1OWVlYmY0YjdhYTQ2ZmVlYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTBmNmFlNTU5N2U5NGVhNTllZWJmNGI3YWE0NmZlZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNlbGtuYW08L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3ZTZhZWY5NDZjMTRkYTI5YTAxNzdlYzlmMWFhNjE4LnNldENvbnRlbnQoaHRtbF81MGY2YWU1NTk3ZTk0ZWE1OWVlYmY0YjdhYTQ2ZmVlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NDYwN2EyNGE5Zjg0NTA2OGVmNTA3MzNiNDYxOGIxOS5iaW5kUG9wdXAocG9wdXBfNDdlNmFlZjk0NmMxNGRhMjlhMDE3N2VjOWYxYWE2MTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmNDRhZWZmNmRmZDRjY2FhMjdlZjBmNmE3NWUxM2EwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS41LCAtNi4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkOWY5NDU3M2UxNzQ2YmI5N2RjMWFiYTEyZDA3YjY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1N2UwNTg3NjA4OTQwYzBhM2Y0YzI3ZGM3NWE5ODhkID0gJChgPGRpdiBpZD0iaHRtbF85NTdlMDU4NzYwODk0MGMwYTNmNGMyN2RjNzVhOTg4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2VuYWRpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZDlmOTQ1NzNlMTc0NmJiOTdkYzFhYmExMmQwN2I2OC5zZXRDb250ZW50KGh0bWxfOTU3ZTA1ODc2MDg5NDBjMGEzZjRjMjdkYzc1YTk4OGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Y0NGFlZmY2ZGZkNGNjYWEyN2VmMGY2YTc1ZTEzYTAuYmluZFBvcHVwKHBvcHVwXzFkOWY5NDU3M2UxNzQ2YmI5N2RjMWFiYTEyZDA3YjY4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNGQ2ZGJmZTE5NDg0ZGZiOTllODIxYjM1OTFhMjYyMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIyLjAsIDk4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZWVkNDRjMmMwMTI0MGYyYTIyMDZmNTk1ZDc1OTRiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZmU4YjI2MjNiNjk0MDdjYTgwM2EyYTIxMzZhMzExZSA9ICQoYDxkaXYgaWQ9Imh0bWxfOGZlOGIyNjIzYjY5NDA3Y2E4MDNhMmEyMTM2YTMxMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zaGFuMTI3NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TaGFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlZWQ0NGMyYzAxMjQwZjJhMjIwNmY1OTVkNzU5NGIzLnNldENvbnRlbnQoaHRtbF84ZmU4YjI2MjNiNjk0MDdjYTgwM2EyYTIxMzZhMzExZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNGQ2ZGJmZTE5NDg0ZGZiOTllODIxYjM1OTFhMjYyMS5iaW5kUG9wdXAocG9wdXBfM2VlZDQ0YzJjMDEyNDBmMmEyMjA2ZjU5NWQ3NTk0YjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM2MGE2ZDg4Nzc4ZjRiMGQ5NzRlNWQ4Mjc4MjFlZWRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4wLCA4MC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjljZWI4YWIyMzIxNGIyZWFmYzZiZTFjNzdmMGE2ZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTNmNDFkYzhjODdiNDRjMmFkYjJhZTJjNDRlZDc2NTAgPSAkKGA8ZGl2IGlkPSJodG1sXzUzZjQxZGM4Yzg3YjQ0YzJhZGIyYWUyYzQ0ZWQ3NjUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2luaDEyNDYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2luaGFsYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOWNlYjhhYjIzMjE0YjJlYWZjNmJlMWM3N2YwYTZmNi5zZXRDb250ZW50KGh0bWxfNTNmNDFkYzhjODdiNDRjMmFkYjJhZTJjNDRlZDc2NTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzYwYTZkODg3NzhmNGIwZDk3NGU1ZDgyNzgyMWVlZGYuYmluZFBvcHVwKHBvcHVwXzI5Y2ViOGFiMjMyMTRiMmVhZmM2YmUxYzc3ZjBhNmY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDI2NmU1NThiZjc0MjQ1OWZjYjQyY2JlODJmMzViYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS41ODMzMzMzMzMyOTk5OTksIC02NC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzRhZWJiYTcyMDY1NGQ1ZTljODgwMjQzZDVmYTE1NTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTc5YzU2NWQ0OWVlNGM3ZmFmZGQxZTlmNmFmMmJhMzQgPSAkKGA8ZGl2IGlkPSJodG1sXzU3OWM1NjVkNDllZTRjN2ZhZmRkMWU5ZjZhZjJiYTM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2lyaTEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2lyaW9uw7M8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzRhZWJiYTcyMDY1NGQ1ZTljODgwMjQzZDVmYTE1NTEuc2V0Q29udGVudChodG1sXzU3OWM1NjVkNDllZTRjN2ZhZmRkMWU5ZjZhZjJiYTM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZkMjY2ZTU1OGJmNzQyNDU5ZmNiNDJjYmU4MmYzNWJjLmJpbmRQb3B1cChwb3B1cF8zNGFlYmJhNzIwNjU0ZDVlOWM4ODAyNDNkNWZhMTU1MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTdlOGMzMmUwMWRhNDFhZWJmYjE4MzBmM2ZjMDc4ODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjAsIDQ1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YzE4MzE0MTc2ZjA0YWEwYjNkYjliZDY5MWIwZWMxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMTFhMzQ2NDdlNTg0OGE0YTY5MWY4NmUyM2VmMDVkZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjExYTM0NjQ3ZTU4NDhhNGE2OTFmODZlMjNlZjA1ZGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zb21hMTI1NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Tb21hbGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGMxODMxNDE3NmYwNGFhMGIzZGI5YmQ2OTFiMGVjMTIuc2V0Q29udGVudChodG1sX2IxMWEzNDY0N2U1ODQ4YTRhNjkxZjg2ZTIzZWYwNWRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU3ZThjMzJlMDFkYTQxYWViZmIxODMwZjNmYzA3ODgzLmJpbmRQb3B1cChwb3B1cF84YzE4MzE0MTc2ZjA0YWEwYjNkYjliZDY5MWIwZWMxMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGRmNzg2ZmRjZThkNDI4MmE2ZDZiNWNkZGU2ODZjYTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4wLCAtNC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWE5Nzg4MWE3ZTBlNGFkM2JkY2RmMmFjZGZmMDllZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2QzOGRiYTA4NjY1NGMwZjk3NDc0OWZkMzk3NzI4ZDUgPSAkKGA8ZGl2IGlkPSJodG1sX2NkMzhkYmEwODY2NTRjMGY5NzQ3NDlmZDM5NzcyOGQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyODgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3BhbmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYTk3ODgxYTdlMGU0YWQzYmRjZGYyYWNkZmYwOWVlNi5zZXRDb250ZW50KGh0bWxfY2QzOGRiYTA4NjY1NGMwZjk3NDc0OWZkMzk3NzI4ZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGRmNzg2ZmRjZThkNDI4MmE2ZDZiNWNkZGU2ODZjYTUuYmluZFBvcHVwKHBvcHVwXzFhOTc4ODFhN2UwZTRhZDNiZGNkZjJhY2RmZjA5ZWU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNDQxYWYwNzE0YTI0MjZiODJiZDQ5YmQyMGViYTBhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjUsIC01LjU4MzMzMzMzMzMzMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2YjhkYzk5MmExMjRlNzc5MjhjOWQwMGQyOWRlZTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkYjEwYjA4ZWJlMzQ2MDBiNjViMDNiMjNjNTM0NTZiID0gJChgPGRpdiBpZD0iaHRtbF8xZGIxMGIwOGViZTM0NjAwYjY1YjAzYjIzYzUzNDU2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3VweWlyZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjZiOGRjOTkyYTEyNGU3NzkyOGM5ZDAwZDI5ZGVlNWIuc2V0Q29udGVudChodG1sXzFkYjEwYjA4ZWJlMzQ2MDBiNjViMDNiMjNjNTM0NTZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I0NDFhZjA3MTRhMjQyNmI4MmJkNDliZDIwZWJhMGE2LmJpbmRQb3B1cChwb3B1cF82NmI4ZGM5OTJhMTI0ZTc3OTI4YzlkMDBkMjlkZWU1YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzg3ZjZjOGI1YzRmNGI4Mzg5ODVjZGFiOWNlYTVhYzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjAsIC03MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDc4MWYwNjRjZGYwNDJkZjkyYWJlZDM0ODY0YTdmZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNkNjFhNmQ1OTdjNDA0NmI4ODkyYzM1MjU2ZjFlN2MgPSAkKGA8ZGl2IGlkPSJodG1sXzkzZDYxYTZkNTk3YzQwNDZiODg5MmMzNTI1NmYxZTdjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tw6FsaWJhIChpbiBDb2xvbWJpYSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3ODFmMDY0Y2RmMDQyZGY5MmFiZWQzNDg2NGE3ZmRkLnNldENvbnRlbnQoaHRtbF85M2Q2MWE2ZDU5N2M0MDQ2Yjg4OTJjMzUyNTZmMWU3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zODdmNmM4YjVjNGY0YjgzODk4NWNkYWI5Y2VhNWFjNy5iaW5kUG9wdXAocG9wdXBfZDc4MWYwNjRjZGYwNDJkZjkyYWJlZDM0ODY0YTdmZGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3YTliMGU4MmNkNDRjYjQ5MzJkMDNmZjJlNGE4MzJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuNSwgMjIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyMTkwOWRmYzdjOTRhNzY4MmQ1MGRjNWYxMWM5ZjI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5ZjRkNTI1M2U1NTQ5YWI5ODA1M2Y1Y2Y1YmY3ODNmID0gJChgPGRpdiBpZD0iaHRtbF8yOWY0ZDUyNTNlNTU0OWFiOTgwNTNmNWNmNWJmNzgzZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RhbWExMzMyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRhbWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDIxOTA5ZGZjN2M5NGE3NjgyZDUwZGM1ZjExYzlmMjkuc2V0Q29udGVudChodG1sXzI5ZjRkNTI1M2U1NTQ5YWI5ODA1M2Y1Y2Y1YmY3ODNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU3YTliMGU4MmNkNDRjYjQ5MzJkMDNmZjJlNGE4MzJlLmJpbmRQb3B1cChwb3B1cF9kMjE5MDlkZmM3Yzk0YTc2ODJkNTBkYzVmMTFjOWYyOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTI5NzVlYTZmOWE5NGI5ZTk3M2IzYTFhNWZmNjViZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNy41LCA4NS42NjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NmU3YjEzNGQ1NjA0ZTE0YWEwNTM2YjJlZGVhNTZhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNmEwNGU4NmExNmM0NzNlOGE1N2Q0ZTkzYjQwOTU4MyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzZhMDRlODZhMTZjNDczZThhNTdkNGU5M2I0MDk1ODMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRhbWFuZyAoRWFzdGVybik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2ZTdiMTM0ZDU2MDRlMTRhYTA1MzZiMmVkZWE1NmExLnNldENvbnRlbnQoaHRtbF9jNmEwNGU4NmExNmM0NzNlOGE1N2Q0ZTkzYjQwOTU4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMjk3NWVhNmY5YTk0YjllOTczYjNhMWE1ZmY2NWJkNS5iaW5kUG9wdXAocG9wdXBfNTZlN2IxMzRkNTYwNGUxNGFhMDUzNmIyZWRlYTU2YTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwZGUwMjZlZDBiYjRjNzNiYTY0NTE1NTA4YTkwYTdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNDE2NjY2NjY2NywgLTAuNTgzMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGEyNDY3OTg4ZTRkNDQ0Mjk0YTIyMjc5YmQxODAyZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDRkZGVjMTU2NDAwNDg0YjkyOWMxYTg0MDJlMzM5NTcgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0ZGRlYzE1NjQwMDQ4NGI5MjljMWE4NDAyZTMzOTU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGFtcDEyNTIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGFtcHVsbWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGEyNDY3OTg4ZTRkNDQ0Mjk0YTIyMjc5YmQxODAyZjcuc2V0Q29udGVudChodG1sX2Q0ZGRlYzE1NjQwMDQ4NGI5MjljMWE4NDAyZTMzOTU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QwZGUwMjZlZDBiYjRjNzNiYTY0NTE1NTA4YTkwYTdjLmJpbmRQb3B1cChwb3B1cF80YTI0Njc5ODhlNGQ0NDQyOTRhMjIyNzliZDE4MDJmNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDQwOWI5N2Q2M2NiNGE2ZjlkZDc4MjM4ZDg3NDU5OTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi4zMzMzMzMzMzMzMywgMTQuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhMGFiNTdiOGZiNDRjY2U4MjgxYjlkNWQwMDQ0M2Y5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5ZWJmMTczMjJlMDQ0NDA4ZjM0NGMwYWY0ZDJhMGEzID0gJChgPGRpdiBpZD0iaHRtbF9lOWViZjE3MzIyZTA0NDQwOGYzNDRjMGFmNGQyYTBhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGVrZSAoU291dGhlcm4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYTBhYjU3YjhmYjQ0Y2NlODI4MWI5ZDVkMDA0NDNmOS5zZXRDb250ZW50KGh0bWxfZTllYmYxNzMyMmUwNDQ0MDhmMzQ0YzBhZjRkMmEwYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDQwOWI5N2Q2M2NiNGE2ZjlkZDc4MjM4ZDg3NDU5OTAuYmluZFBvcHVwKHBvcHVwX2JhMGFiNTdiOGZiNDRjY2U4MjgxYjlkNWQwMDQ0M2Y5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MGVmNWY4YmVhZjg0MjQxOTAyYmQzM2I5ZGY4NDcxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjAsIDEwMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzUzZjczYjI2MTk4NGUxY2E1MDg0M2Y1ZDkwNmJlYzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWExYjRhNmE0YjdlNGY4OGFjMjRhZjEwMjkyYTUxMmUgPSAkKGA8ZGl2IGlkPSJodG1sX2VhMWI0YTZhNGI3ZTRmODhhYzI0YWYxMDI5MmE1MTJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGhhaTEyNjEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGhhaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NTNmNzNiMjYxOTg0ZTFjYTUwODQzZjVkOTA2YmVjNi5zZXRDb250ZW50KGh0bWxfZWExYjRhNmE0YjdlNGY4OGFjMjRhZjEwMjkyYTUxMmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODBlZjVmOGJlYWY4NDI0MTkwMmJkMzNiOWRmODQ3MTQuYmluZFBvcHVwKHBvcHVwXzc1M2Y3M2IyNjE5ODRlMWNhNTA4NDNmNWQ5MDZiZWM2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZDFkOTVkYjFjYzA0ZGFmYTgzZTAzNWNjNTVkODc2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS41LCAxMzEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiZGU5ZWM3MWZlNTQ0ZDg5MWI2YTA0MGY0ZjUyYjM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxYzRkZTMwYmFhYTQwMzU5MDE2ZmVlYjllNThlMWIwID0gJChgPGRpdiBpZD0iaHRtbF9jMWM0ZGUzMGJhYWE0MDM1OTAxNmZlZWI5ZTU4ZTFiMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rpd2kxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpd2k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGJkZTllYzcxZmU1NDRkODkxYjZhMDQwZjRmNTJiMzguc2V0Q29udGVudChodG1sX2MxYzRkZTMwYmFhYTQwMzU5MDE2ZmVlYjllNThlMWIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FkMWQ5NWRiMWNjMDRkYWZhODNlMDM1Y2M1NWQ4NzZlLmJpbmRQb3B1cChwb3B1cF9kYmRlOWVjNzFmZTU0NGQ4OTFiNmEwNDBmNGY1MmIzOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmJkNmRhYmEzMDA5NDU2MWJlOWRjN2I2MjRkMzlhMWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC42NjY2NjY2NjY3MDAwMDEsIC04Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWJhYzVjMzJhMGJhNGRlMmIyNDExY2EwMDIxZDkyZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM1NmMzYWU1MTlhNGU0MWEwZTNmMzJjNDJlNmZmMzUgPSAkKGA8ZGl2IGlkPSJodG1sX2IzNTZjM2FlNTE5YTRlNDFhMGUzZjMyYzQyZTZmZjM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdG9sbDEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VG9sPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiYWM1YzMyYTBiYTRkZTJiMjQxMWNhMDAyMWQ5MmY4LnNldENvbnRlbnQoaHRtbF9iMzU2YzNhZTUxOWE0ZTQxYTBlM2YzMmM0MmU2ZmYzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYmQ2ZGFiYTMwMDk0NTYxYmU5ZGM3YjYyNGQzOWExYi5iaW5kUG9wdXAocG9wdXBfMWJhYzVjMzJhMGJhNGRlMmIyNDExY2EwMDIxZDkyZjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNjZjI1NzYwN2IyNTQ4MTc4MmI4OWMzNGJkYmE3MjE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjkxNjY2NjY2NjcwMDAwMSwgLTUzLjU4MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZGMwYjkzYjk2YzY0YmI2ODA5NGI1ZTgyZDU5MDkzMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODFkMzFjY2JmNWQ0NGE4OWNhY2NiNGVhYjRiOWI1YSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjgxZDMxY2NiZjVkNDRhODljYWNjYjRlYWI0YjliNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90cnVtMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UcnVtYWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2RjMGI5M2I5NmM2NGJiNjgwOTRiNWU4MmQ1OTA5MzAuc2V0Q29udGVudChodG1sXzI4MWQzMWNjYmY1ZDQ0YTg5Y2FjY2I0ZWFiNGI5YjVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNjZjI1NzYwN2IyNTQ4MTc4MmI4OWMzNGJkYmE3MjE2LmJpbmRQb3B1cChwb3B1cF83ZGMwYjkzYjk2YzY0YmI2ODA5NGI1ZTgyZDU5MDkzMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWZjNTFmMjI1ZTEwNDYzNDk1N2U3NGU1OTRiZGFiMDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMy4wLCA2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YTllMDA4Zjg5ZTE0NjgzYjY2M2ExNWViYzBlNDdjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ODAyZDAxNmRiMDA0YmViOTQwOTgxMWQ1N2QyYjVmZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDgwMmQwMTZkYjAwNGJlYjk0MDk4MTFkNTdkMmI1ZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlR1YXJlZyAoQWhhZ2dhcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhOWUwMDhmODllMTQ2ODNiNjYzYTE1ZWJjMGU0N2NmLnNldENvbnRlbnQoaHRtbF80ODAyZDAxNmRiMDA0YmViOTQwOTgxMWQ1N2QyYjVmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZmM1MWYyMjVlMTA0NjM0OTU3ZTc0ZTU5NGJkYWIwNy5iaW5kUG9wdXAocG9wdXBfNWE5ZTAwOGY4OWUxNDY4M2I2NjNhMTVlYmMwZTQ3Y2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FhMmVmYjQxOWMzZTRmYmQ5Nzk4ZGZmNTBkM2EyNDJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNSwgMTIzLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZDYxMmU5YTUwYjM0OGU2YjcyMjk4MDExYzM1ZThlNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjNhMDUzYzFmZTQ0ODdjOGYyMjIwODE2NGZjMWI5ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTYzYTA1M2MxZmU0NDg3YzhmMjIyMDgxNjRmYzFiOWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90dWthMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdWthbmcgQmVzaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZDYxMmU5YTUwYjM0OGU2YjcyMjk4MDExYzM1ZThlNS5zZXRDb250ZW50KGh0bWxfMTYzYTA1M2MxZmU0NDg3YzhmMjIyMDgxNjRmYzFiOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWEyZWZiNDE5YzNlNGZiZDk3OThkZmY1MGQzYTI0MmIuYmluZFBvcHVwKHBvcHVwXzNkNjEyZTlhNTBiMzQ4ZTZiNzIyOTgwMTFjMzVlOGU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZDYyMGJiZjk2Yzg0ZTFjOWJiZjRiMzkzMzIyMDIyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjc1LCA3NS4zMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjlkMjgwNWEzMmFhNDJlYTg3MTU4OGQ4M2VlNGQ2ZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ4ZTNkMTdlZTYxNGFkYWJlZTE3OGNkY2NjYmM1MDYgPSAkKGA8ZGl2IGlkPSJodG1sXzM0OGUzZDE3ZWU2MTRhZGFiZWUxNzhjZGNjY2JjNTA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHVsdTEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVsdTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOWQyODA1YTMyYWE0MmVhODcxNTg4ZDgzZWU0ZDZkYS5zZXRDb250ZW50KGh0bWxfMzQ4ZTNkMTdlZTYxNGFkYWJlZTE3OGNkY2NjYmM1MDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Q2MjBiYmY5NmM4NGUxYzliYmY0YjM5MzMyMjAyMmIuYmluZFBvcHVwKHBvcHVwXzI5ZDI4MDVhMzJhYTQyZWE4NzE1ODhkODNlZTRkNmRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYjAzMzUzZjgwZjc0MmJkYjNjYWNhNDY0ZTY0N2QzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAsIDM1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81M2FhNTFlMzFhZmI0NWZlYjljNmE4NzM3Zjk4NTg1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MWMxZWY4ZjU0NzQ0ZDYwOTUxMTJhMzA0YmNhNTdkZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTFjMWVmOGY1NDc0NGQ2MDk1MTEyYTMwNGJjYTU3ZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzYWE1MWUzMWFmYjQ1ZmViOWM2YTg3MzdmOTg1ODU3LnNldENvbnRlbnQoaHRtbF81MWMxZWY4ZjU0NzQ0ZDYwOTUxMTJhMzA0YmNhNTdkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYjAzMzUzZjgwZjc0MmJkYjNjYWNhNDY0ZTY0N2QzZS5iaW5kUG9wdXAocG9wdXBfNTNhYTUxZTMxYWZiNDVmZWI5YzZhODczN2Y5ODU4NTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZhZGE0MjRjM2ZiZDRhODliOTlhYTQ5NTNkMWYyZWYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMCwgOTUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlYjRhYjg3ZWFkNTQzNTdhZmU4YzEzZTIwOTI1MWE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk2M2ZhYmM1MWFhNjQ5OGU4ZGM0NmM5ZjY5MDNhYjVkID0gJChgPGRpdiBpZD0iaHRtbF85NjNmYWJjNTFhYTY0OThlOGRjNDZjOWY2OTAzYWI1ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHV2YW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlYjRhYjg3ZWFkNTQzNTdhZmU4YzEzZTIwOTI1MWE0LnNldENvbnRlbnQoaHRtbF85NjNmYWJjNTFhYTY0OThlOGRjNDZjOWY2OTAzYWI1ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YWRhNDI0YzNmYmQ0YTg5Yjk5YWE0OTUzZDFmMmVmMC5iaW5kUG9wdXAocG9wdXBfM2ViNGFiODdlYWQ1NDM1N2FmZThjMTNlMjA5MjUxYTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4ZjlmYmYwOTE0NDQ1MWQ4ZjNkOGIxODIxYzVjYmU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTYuNDE2NjY2NjY2NywgLTkyLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYjZkOTQyZGQxNTI0Mzk4YmEyNmFhNTE5ODRlM2MxZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMGMyMjcxNDUzZjQ0ODkzOThkZTVlMDg3YWFhNzIyMyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjBjMjI3MTQ1M2Y0NDg5Mzk4ZGU1ZTA4N2FhYTcyMjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlR6ZWx0YWwgKEFndWFjYXRlbmFuZ28pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjZkOTQyZGQxNTI0Mzk4YmEyNmFhNTE5ODRlM2MxZi5zZXRDb250ZW50KGh0bWxfZjBjMjI3MTQ1M2Y0NDg5Mzk4ZGU1ZTA4N2FhYTcyMjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzhmOWZiZjA5MTQ0NDUxZDhmM2Q4YjE4MjFjNWNiZTYuYmluZFBvcHVwKHBvcHVwXzNiNmQ5NDJkZDE1MjQzOThiYTI2YWE1MTk4NGUzYzFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODgzN2EzMjI5ZWM0NTZmOWJmMDhlNGNiNWI0YzE3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi41LCAxNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGI0MTg3NmNmODVjNGUwZjg2OWQ3ZDllN2YxZTU3MTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzA5MzQxZWY0ZGUwNGQ2MWE0OTdmYzBjYTBkMjcyOTkgPSAkKGA8ZGl2IGlkPSJodG1sXzMwOTM0MWVmNGRlMDRkNjFhNDk3ZmMwY2EwZDI3Mjk5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VTWJ1bmR1PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjQxODc2Y2Y4NWM0ZTBmODY5ZDdkOWU3ZjFlNTcxMi5zZXRDb250ZW50KGh0bWxfMzA5MzQxZWY0ZGUwNGQ2MWE0OTdmYzBjYTBkMjcyOTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDg4MzdhMzIyOWVjNDU2ZjliZjA4ZTRjYjViNGMxN2IuYmluZFBvcHVwKHBvcHVwX2RiNDE4NzZjZjg1YzRlMGY4NjlkN2Q5ZTdmMWU1NzEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NzFkOTc2MGFiODk0YjY5YTRiOWUzNjU5YjFhNDNhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjY2NjY2NjY2NjY3LCAxNDAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVkYjE5ZGQwNjNhNDRhYjNiYTdiYzhiMmExMTUxYWEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg2ZmMzMDQ2OTQzYjQ3YmNhZWIzYzljM2E4MGIxM2NlID0gJChgPGRpdiBpZD0iaHRtbF84NmZjMzA0Njk0M2I0N2JjYWViM2M5YzNhODBiMTNjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3VuYWExMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlVuYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZGIxOWRkMDYzYTQ0YWIzYmE3YmM4YjJhMTE1MWFhMi5zZXRDb250ZW50KGh0bWxfODZmYzMwNDY5NDNiNDdiY2FlYjNjOWMzYTgwYjEzY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDcxZDk3NjBhYjg5NGI2OWE0YjllMzY1OWIxYTQzYTQuYmluZFBvcHVwKHBvcHVwXzVkYjE5ZGQwNjNhNDRhYjNiYTdiYzhiMmExMTUxYWEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMjliYzAzZTM2NmY0NGJhYTU4NTk1ZDBlNzUxYmE4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2NjY2NjY2NjcsIDY2LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNzVjY2QwNjJkMDg0ZThkYTVkNjI3OGRlY2MyZjlhZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NmY3NjQ2YWY1MTQ0NDcyOWVjZTZkNzZjZmVmMTM5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjZmNzY0NmFmNTE0NDQ3MjllY2U2ZDc2Y2ZlZjEzOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlV6YmVrIChOb3J0aGVybik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3NWNjZDA2MmQwODRlOGRhNWQ2Mjc4ZGVjYzJmOWFlLnNldENvbnRlbnQoaHRtbF82NmY3NjQ2YWY1MTQ0NDcyOWVjZTZkNzZjZmVmMTM5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMjliYzAzZTM2NmY0NGJhYTU4NTk1ZDBlNzUxYmE4NC5iaW5kUG9wdXAocG9wdXBfMDc1Y2NkMDYyZDA4NGU4ZGE1ZDYyNzhkZWNjMmY5YWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1MTdhZjZlNmM2ZTQ4NzI4ZTc3MDVjOTkwZDM0OWFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNSwgMTA2LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OWU4NzQ3Y2JjYWM0NDc1YjViOTYzOGY4YjljNjczZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZTczMTVmYzM2Y2Y0MjU3YmU0NjkxYTAwNmIwNGU3YSA9ICQoYDxkaXYgaWQ9Imh0bWxfMGU3MzE1ZmMzNmNmNDI1N2JlNDY5MWEwMDZiMDRlN2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC92aWV0MTI1MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5WaWV0bmFtZXNlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5ZTg3NDdjYmNhYzQ0NzViNWI5NjM4ZjhiOWM2NzNmLnNldENvbnRlbnQoaHRtbF8wZTczMTVmYzM2Y2Y0MjU3YmU0NjkxYTAwNmIwNGU3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNTE3YWY2ZTZjNmU0ODcyOGU3NzA1Yzk5MGQzNDlhZC5iaW5kUG9wdXAocG9wdXBfOTllODc0N2NiY2FjNDQ3NWI1Yjk2MzhmOGI5YzY3M2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5YjdjZWFmNDE0MDQxMThiNjY4MzY1NzAyNzU3Y2M2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuMzMzMzMzMzMzMywgLTk3LjMzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZTgzMjEzZTQ4ZWQ0OTg0YmE4YTJhMmM4ZjU2Zjc1MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNWY1OThmM2M0N2M0NzRjYTdjYTIyMDI2MTY5N2FiYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDVmNTk4ZjNjNDdjNDc0Y2E3Y2EyMjAyNjE2OTdhYmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93aWNoMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XaWNoaXRhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlODMyMTNlNDhlZDQ5ODRiYThhMmEyYzhmNTZmNzUxLnNldENvbnRlbnQoaHRtbF9kNWY1OThmM2M0N2M0NzRjYTdjYTIyMDI2MTY5N2FiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OWI3Y2VhZjQxNDA0MTE4YjY2ODM2NTcwMjc1N2NjNi5iaW5kUG9wdXAocG9wdXBfYWU4MzIxM2U0OGVkNDk4NGJhOGEyYTJjOGY1NmY3NTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjZTgzZmJlMDExNjQ4ZGViZWJhMTljOTg3ZjhkZDQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIyLjUsIC02Mi41ODMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjQ4YTVkYzU5ZjY5NDk0MjliOGYyNzRhOGIzNzFmYTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWRiZjZiMDA0YzU1NGZiNzkxY2M1MGM2ZDQwNzViZWQgPSAkKGA8ZGl2IGlkPSJodG1sXzlkYmY2YjAwNGM1NTRmYjc5MWNjNTBjNmQ0MDc1YmVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWNow608L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0OGE1ZGM1OWY2OTQ5NDI5YjhmMjc0YThiMzcxZmE2LnNldENvbnRlbnQoaHRtbF85ZGJmNmIwMDRjNTU0ZmI3OTFjYzUwYzZkNDA3NWJlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xY2U4M2ZiZTAxMTY0OGRlYmViYTE5Yzk4N2Y4ZGQ0OC5iaW5kUG9wdXAocG9wdXBfNjQ4YTVkYzU5ZjY5NDk0MjliOGYyNzRhOGIzNzFmYTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyN2U4NjBkMDYzNzQ2NmM4NGJmZDhhNzNjMjFmZTUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODMzMzMzMzMzMywgLTEyNC4xNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wN2NmNzc3ZjNiMDM0OTBiODQ3M2QyNTc0NmEzYjZhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ODhjNTg4NzUwYTQ0NmFhYmI5ZjUzY2MzOGYwOGMzMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjg4YzU4ODc1MGE0NDZhYWJiOWY1M2NjMzhmMDhjMzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93aXlvMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XaXlvdDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wN2NmNzc3ZjNiMDM0OTBiODQ3M2QyNTc0NmEzYjZhZC5zZXRDb250ZW50KGh0bWxfNjg4YzU4ODc1MGE0NDZhYWJiOWY1M2NjMzhmMDhjMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODI3ZTg2MGQwNjM3NDY2Yzg0YmZkOGE3M2MyMWZlNTMuYmluZFBvcHVwKHBvcHVwXzA3Y2Y3NzdmM2IwMzQ5MGI4NDczZDI1NzQ2YTNiNmFkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTU1OTNmNDNhNWM0ZDBmYmUxNGUzNThiMjIyODE4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjY2NjY2NjY2NjcsIDExOS45MTY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MGMxNTk4YzQyOGM0YzMyYjA0YzYzZmRiZGIwMTlmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMThiNjNmN2U1ZDM0NTU4OTJiMzU4Y2UwYTU0MTdlMSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjE4YjYzZjdlNWQzNDU1ODkyYjM1OGNlMGE1NDE3ZTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93dXV1MTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XdTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MGMxNTk4YzQyOGM0YzMyYjA0YzYzZmRiZGIwMTlmMi5zZXRDb250ZW50KGh0bWxfYjE4YjYzZjdlNWQzNDU1ODkyYjM1OGNlMGE1NDE3ZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGU1NTkzZjQzYTVjNGQwZmJlMTRlMzU4YjIyMjgxODcuYmluZFBvcHVwKHBvcHVwXzQwYzE1OThjNDI4YzRjMzJiMDRjNjNmZGJkYjAxOWYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNDM4ZjRjYjdkOGQ0NjQ2ODlmMzAwOTdkNWI2Y2FhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI0LjUsIDExOC4xNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MmE0MTc2MTFjZjE0OGZmODM4NjE0NDc4NTI3ZGU4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OWQ1YTQ3ZjMyMzY0MGMwOGJiZDFmNzJmY2Y4ZTg2NSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjlkNWE0N2YzMjM2NDBjMDhiYmQxZjcyZmNmOGU4NjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC94aWFtMTIzNiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5YaWFtZW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTJhNDE3NjExY2YxNDhmZjgzODYxNDQ3ODUyN2RlODkuc2V0Q29udGVudChodG1sXzY5ZDVhNDdmMzIzNjQwYzA4YmJkMWY3MmZjZjhlODY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA0MzhmNGNiN2Q4ZDQ2NDY4OWYzMDA5N2Q1YjZjYWE5LmJpbmRQb3B1cChwb3B1cF81MmE0MTc2MTFjZjE0OGZmODM4NjE0NDc4NTI3ZGU4OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWUxMmJlMTU5MTY5NGNkNWE2MGZhMTM3ZTE5NWJlNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Mi4wLCAxMzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5YTkwNGMxYzZiOTQ1NmViMzhhMDI2NDJkZTU0NmI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4YjQzYjUyYmI5NDRjOTI5ZWJhY2NiNTBkYzUxYzkyID0gJChgPGRpdiBpZD0iaHRtbF85OGI0M2I1MmJiOTQ0YzkyOWViYWNjYjUwZGM1MWM5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WWFrdXQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5YTkwNGMxYzZiOTQ1NmViMzhhMDI2NDJkZTU0NmI3LnNldENvbnRlbnQoaHRtbF85OGI0M2I1MmJiOTQ0YzkyOWViYWNjYjUwZGM1MWM5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZTEyYmUxNTkxNjk0Y2Q1YTYwZmExMzdlMTk1YmU0ZC5iaW5kUG9wdXAocG9wdXBfMjlhOTA0YzFjNmI5NDU2ZWIzOGEwMjY0MmRlNTQ2YjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY4ODNhNmM1YmZhYzRiYzk5MzU1MGRjZjBjNGE1M2U2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNSwgLTEyMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzYxNTZiNTNjZGZmNGE0NmFhNmE2NmQ0Yjk4MjY5NWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjg1Yzc4MTNhMjM1NDEzNjhkZjkyNmJlY2FkYmVhNTEgPSAkKGA8ZGl2IGlkPSJodG1sXzY4NWM3ODEzYTIzNTQxMzY4ZGY5MjZiZWNhZGJlYTUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveWFuYTEyNzEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WWFuYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjE1NmI1M2NkZmY0YTQ2YWE2YTY2ZDRiOTgyNjk1Zi5zZXRDb250ZW50KGh0bWxfNjg1Yzc4MTNhMjM1NDEzNjhkZjkyNmJlY2FkYmVhNTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjg4M2E2YzViZmFjNGJjOTkzNTUwZGNmMGM0YTUzZTYuYmluZFBvcHVwKHBvcHVwXzM2MTU2YjUzY2RmZjRhNDZhYTZhNjZkNGI5ODI2OTVmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NzNmODZjYmI4Njg0NzY0OGJhNDVkNzU2OTI3ZGJmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuNTgzMzMzMzMzMzMwMDAxLCAxMzguMTY2NjY2NjY3MDAwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOTM4ZDU2ODNjZmI0ZTBhOTI3MGQ5YTRhYWFmZjA3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYWZhYmFlYWNiYjY0ODI0YjIxMjczYWQ4ODI3NjE2MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMGFmYWJhZWFjYmI2NDgyNGIyMTI3M2FkODgyNzYxNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95YXBlMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZYXBlc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzkzOGQ1NjgzY2ZiNGUwYTkyNzBkOWE0YWFhZmYwNzAuc2V0Q29udGVudChodG1sXzBhZmFiYWVhY2JiNjQ4MjRiMjEyNzNhZDg4Mjc2MTYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg3M2Y4NmNiYjg2ODQ3NjQ4YmE0NWQ3NTY5MjdkYmZhLmJpbmRQb3B1cChwb3B1cF8zOTM4ZDU2ODNjZmI0ZTBhOTI3MGQ5YTRhYWFmZjA3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTAyZWZhY2Q5Nzg1NDJkZmJlNmE4NDVmYzMyNWMwYWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi40MTY2NjY2NjY3LCAxMDQuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2MGJmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYzA1MjA5ZGY1YzY0Mzg5YWI3MWQwOGE2MjdiYzI3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2E3NGUwYTM0YzU0MjAwYTIyYWZjNWNlYWM1ZTQyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjNhNzRlMGEzNGM1NDIwMGEyMmFmYzVjZWFjNWU0MmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPllheTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmMwNTIwOWRmNWM2NDM4OWFiNzFkMDhhNjI3YmMyNzEuc2V0Q29udGVudChodG1sX2IzYTc0ZTBhMzRjNTQyMDBhMjJhZmM1Y2VhYzVlNDJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EwMmVmYWNkOTc4NTQyZGZiZTZhODQ1ZmMzMjVjMGFmLmJpbmRQb3B1cChwb3B1cF8yYzA1MjA5ZGY1YzY0Mzg5YWI3MWQwOGE2MjdiYzI3MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWJiNjU4ZGM1MGM0NGRhNGIyMTNiN2NiMmNkNjI1Y2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4wLCAtODkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1ZjFiYzJlY2QzZjQ3OTk5OTgzMDMxMmEyODRjMDQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RiZjcwMTY2MDUwZjQ5YTE4YmFhZDlkZmQ1MzFmMWE1ID0gJChgPGRpdiBpZD0iaHRtbF9kYmY3MDE2NjA1MGY0OWExOGJhYWQ5ZGZkNTMxZjFhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WXVjYXRlYzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTVmMWJjMmVjZDNmNDc5OTk5ODMwMzEyYTI4NGMwNDAuc2V0Q29udGVudChodG1sX2RiZjcwMTY2MDUwZjQ5YTE4YmFhZDlkZmQ1MzFmMWE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFiYjY1OGRjNTBjNDRkYTRiMjEzYjdjYjJjZDYyNWNiLmJpbmRQb3B1cChwb3B1cF81NWYxYmMyZWNkM2Y0Nzk5OTk4MzAzMTJhMjg0YzA0MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzhlNDFhZmE3OWI1NGU1ZGFkMjAxMTQ3NGU1YzY4ZjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NS43NSwgMTUwLjgzMzMzMzMzMjk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2M4ZGMxZDEzNTg1NGE3Nzg5YmM1MjNlMzg5NjMwNDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjRiNGVkMzg2ZThlNDdmZTk0OWI0MmI5NzM0Yjk4ZGEgPSAkKGA8ZGl2IGlkPSJodG1sX2I0YjRlZDM4NmU4ZTQ3ZmU5NDliNDJiOTczNGI5OGRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ZdWthZ2hpciAoS29seW1hKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2M4ZGMxZDEzNTg1NGE3Nzg5YmM1MjNlMzg5NjMwNDkuc2V0Q29udGVudChodG1sX2I0YjRlZDM4NmU4ZTQ3ZmU5NDliNDJiOTczNGI5OGRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M4ZTQxYWZhNzliNTRlNWRhZDIwMTE0NzRlNWM2OGY3LmJpbmRQb3B1cChwb3B1cF83YzhkYzFkMTM1ODU0YTc3ODliYzUyM2UzODk2MzA0OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjgxZjA0OTA5NTk5NDEwMWFjNDhhMmYzODQ5YmU2NGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2OS4wLCAxNTUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NkMmYxMmRjNTVlODQ0MzdhNTRiM2UxNzEzNjRhODk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0MDc2YTY1Y2VjMDQ1MGM5YTUwODk1MzMzZjc5NDQ0ID0gJChgPGRpdiBpZD0iaHRtbF8yNDA3NmE2NWNlYzA0NTBjOWE1MDg5NTMzM2Y3OTQ0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WXVrYWdoaXIgKFR1bmRyYSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkMmYxMmRjNTVlODQ0MzdhNTRiM2UxNzEzNjRhODk3LnNldENvbnRlbnQoaHRtbF8yNDA3NmE2NWNlYzA0NTBjOWE1MDg5NTMzM2Y3OTQ0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mODFmMDQ5MDk1OTk0MTAxYWM0OGEyZjM4NDliZTY0YS5iaW5kUG9wdXAocG9wdXBfY2QyZjEyZGM1NWU4NDQzN2E1NGIzZTE3MTM2NGE4OTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlNGRmOGVjM2U3YTQxOTVhNDI3YTk4NGUwNzQzZGJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC4wLCAyNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNjBiZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzdkMWRlMTU3YWYxNDIwNmIwMTllNjMwYWUwMmUzYmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTI1YzQ4YjMxYzk5NDNhMmFmMGU4MWZiYmNhY2Q3YzEgPSAkKGA8ZGl2IGlkPSJodG1sX2UyNWM0OGIzMWM5OTQzYTJhZjBlODFmYmJjYWNkN2MxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvemFuZDEyNDgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WmFuZGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzdkMWRlMTU3YWYxNDIwNmIwMTllNjMwYWUwMmUzYmYuc2V0Q29udGVudChodG1sX2UyNWM0OGIzMWM5OTQzYTJhZjBlODFmYmJjYWNkN2MxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZlNGRmOGVjM2U3YTQxOTVhNDI3YTk4NGUwNzQzZGJlLmJpbmRQb3B1cChwb3B1cF8zN2QxZGUxNTdhZjE0MjA2YjAxOWU2MzBhZTAyZTNiZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNlNmJjODIyNzU4NDY5NmE4OTNlMDhiYjlmMTEzZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4wODMzMzMzMzMzLCAtMTA4LjgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzYwYmYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdhOWU5YTk2NDdhNTRjOTc5NjZjZTA0MGI4MzI0OWJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2OTAxZGEwNzE5MTRlOWI5ZjgyYTRkZDdhYWI0NzEzID0gJChgPGRpdiBpZD0iaHRtbF9mNjkwMWRhMDcxOTE0ZTliOWY4MmE0ZGQ3YWFiNDcxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3p1bmkxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlp1bmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2E5ZTlhOTY0N2E1NGM5Nzk2NmNlMDQwYjgzMjQ5YmMuc2V0Q29udGVudChodG1sX2Y2OTAxZGEwNzE5MTRlOWI5ZjgyYTRkZDdhYWI0NzEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QzZTZiYzgyMjc1ODQ2OTZhODkzZTA4YmI5ZjExM2ZhLmJpbmRQb3B1cChwb3B1cF83YTllOWE5NjQ3YTU0Yzk3OTY2Y2UwNDBiODMyNDliYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTU1MzM1YzY3ODhkNGM5MjkyYzc0ZDVkMzkwZDQ1OGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Mi4wLCAtMTQ1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMmNlMWYxYjAzZDg0ZDUwYjI3ZWRkZDQ3OGFjMGEyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMGFlZWEwODMxMTQ0Nzk3YTViY2I1OGE4NmVhNjY3ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzBhZWVhMDgzMTE0NDc5N2E1YmNiNThhODZlYTY2N2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFodG5hPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMmNlMWYxYjAzZDg0ZDUwYjI3ZWRkZDQ3OGFjMGEyNi5zZXRDb250ZW50KGh0bWxfMzBhZWVhMDgzMTE0NDc5N2E1YmNiNThhODZlYTY2N2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTU1MzM1YzY3ODhkNGM5MjkyYzc0ZDVkMzkwZDQ1OGQuYmluZFBvcHVwKHBvcHVwX2EyY2UxZjFiMDNkODRkNTBiMjdlZGRkNDc4YWMwYTI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YjYwOTU1ODRjNDQ0YTBlOTM3OTQyYzlmZDM1NWY3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjAsIDM4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81M2ZjMWExOWU3ZDI0OTk4ODEzYzlmMGU5MjIzYTUzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YjAxZGMwYjY5MWI0YWEzYTg3NTZiOGM5NWE0NTExNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmIwMWRjMGI2OTFiNGFhM2E4NzU2YjhjOTVhNDUxMTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hbWhhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BbWhhcmljPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzZmMxYTE5ZTdkMjQ5OTg4MTNjOWYwZTkyMjNhNTMxLnNldENvbnRlbnQoaHRtbF82YjAxZGMwYjY5MWI0YWEzYTg3NTZiOGM5NWE0NTExNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YjYwOTU1ODRjNDQ0YTBlOTM3OTQyYzlmZDM1NWY3YS5iaW5kUG9wdXAocG9wdXBfNTNmYzFhMTllN2QyNDk5ODgxM2M5ZjBlOTIyM2E1MzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmN2I0M2U4NDFlYjQ4YmI4NGEyOWMwNTQ1YmY0MDk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS41LCA5LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNzNkYTI5NGM4OGM0MWJlYjE0MmE5NzM1YzNlMGI1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDZiZmU0NGZlYmE0ZTk0OTFhMzVjNzNkOGVhOTQyNyA9ICQoYDxkaXYgaWQ9Imh0bWxfODQ2YmZlNDRmZWJhNGU5NDkxYTM1YzczZDhlYTk0MjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFuZ2FzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNzNkYTI5NGM4OGM0MWJlYjE0MmE5NzM1YzNlMGI1Ny5zZXRDb250ZW50KGh0bWxfODQ2YmZlNDRmZWJhNGU5NDkxYTM1YzczZDhlYTk0MjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmY3YjQzZTg0MWViNDhiYjg0YTI5YzA1NDViZjQwOTguYmluZFBvcHVwKHBvcHVwX2Y3M2RhMjk0Yzg4YzQxYmViMTQyYTk3MzVjM2UwYjU3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMmY5OWNkMGQyYTQ0MzgwYjYzZWZkOWM2OGM2M2JjMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjAsIDMxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZTFkNGNmNjRiZTU0N2MzOGZkYTBmY2RlYjQxNmJhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMDZmNDFjODM2ZjE0NDEzYmQyNjNkY2Q2YjQzNjdmZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTA2ZjQxYzgzNmYxNDQxM2JkMjYzZGNkNmI0MzY3ZmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFyYWJpYyAoRWd5cHRpYW4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZTFkNGNmNjRiZTU0N2MzOGZkYTBmY2RlYjQxNmJhNC5zZXRDb250ZW50KGh0bWxfMTA2ZjQxYzgzNmYxNDQxM2JkMjYzZGNkNmI0MzY3ZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDJmOTljZDBkMmE0NDM4MGI2M2VmZDljNjhjNjNiYzMuYmluZFBvcHVwKHBvcHVwXzBlMWQ0Y2Y2NGJlNTQ3YzM4ZmRhMGZjZGViNDE2YmE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZjhiODY5MmZhZmQ0Mjc3YmFkNWFjZWI4NjNiZTRlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjAsIDQ1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDQxYjhmYWMxOTM0N2JkOTIyZjg3YzkwNWQyM2UwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNzMyMzM5ZjhkN2M0OWEzYTI3OTRjZTQ2ODNhYzM1NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDczMjMzOWY4ZDdjNDlhM2EyNzk0Y2U0NjgzYWMzNTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFybWVuaWFuIChFYXN0ZXJuKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQ0MWI4ZmFjMTkzNDdiZDkyMmY4N2M5MDVkMjNlMGUuc2V0Q29udGVudChodG1sXzA3MzIzMzlmOGQ3YzQ5YTNhMjc5NGNlNDY4M2FjMzU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBmOGI4NjkyZmFmZDQyNzdiYWQ1YWNlYjg2M2JlNGU2LmJpbmRQb3B1cChwb3B1cF8wNDQxYjhmYWMxOTM0N2JkOTIyZjg3YzkwNWQyM2UwZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDgwNmQ4ZWU4Y2FiNGM1ZjkwM2Y5N2UxYWI0NWMxODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC44MzMzMzMzMzMyOTk5OTksIDM2LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDc4YWVmZDhlMTg0MjUxYjdiYTRhZDg0MjJiYTdiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NWQ5Y2RlM2E4Njk0NDNiOWI3OGFmOTllZThiMjA0ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzVkOWNkZTNhODY5NDQzYjliNzhhZjk5ZWU4YjIwNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hd25nMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Bd25naTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMDc4YWVmZDhlMTg0MjUxYjdiYTRhZDg0MjJiYTdiYi5zZXRDb250ZW50KGh0bWxfNzVkOWNkZTNhODY5NDQzYjliNzhhZjk5ZWU4YjIwNGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDgwNmQ4ZWU4Y2FiNGM1ZjkwM2Y5N2UxYWI0NWMxODcuYmluZFBvcHVwKHBvcHVwXzIwNzhhZWZkOGUxODQyNTFiN2JhNGFkODQyMmJhN2JiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZmIyN2Q3N2VkNWU0YTU0OGQxZDMwYTZhNTljYjUwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy4wLCAtNjkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4ZDZhNGVmNGYxYTQyNTM4YmVjNDE0MDIyNWQ4NmRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjNzc5OGZiMDJmZjQ5ZDRhYjA1ODNmNTA2ODYxNDk5ID0gJChgPGRpdiBpZD0iaHRtbF8yYzc3OThmYjAyZmY0OWQ0YWIwNTgzZjUwNjg2MTQ5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXltYXJhIChDZW50cmFsKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjhkNmE0ZWY0ZjFhNDI1MzhiZWM0MTQwMjI1ZDg2ZGQuc2V0Q29udGVudChodG1sXzJjNzc5OGZiMDJmZjQ5ZDRhYjA1ODNmNTA2ODYxNDk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmYjI3ZDc3ZWQ1ZTRhNTQ4ZDFkMzBhNmE1OWNiNTA2LmJpbmRQb3B1cChwb3B1cF8yOGQ2YTRlZjRmMWE0MjUzOGJlYzQxNDAyMjVkODZkZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWEzNzA1NTY0ZDE1NDBiNmFhZjc2ZDhkMTM4OTg0YjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS42NjY2NjY2NjY3MDAwMDEsIDE2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDVjODIyZGQ3MjA0OGVhOTU4NzcxNDBkNzBmN2UwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYThmNTQ4YTg3MmM0ZTE3ODk3OGU3YjBjMTg4YjI2NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGE4ZjU0OGE4NzJjNGUxNzg5NzhlN2IwYzE4OGIyNjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iYWdpMTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CYWdpcm1pPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkNWM4MjJkZDcyMDQ4ZWE5NTg3NzE0MGQ3MGY3ZTA1LnNldENvbnRlbnQoaHRtbF9kYThmNTQ4YTg3MmM0ZTE3ODk3OGU3YjBjMTg4YjI2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YTM3MDU1NjRkMTU0MGI2YWFmNzZkOGQxMzg5ODRiMC5iaW5kUG9wdXAocG9wdXBfNmQ1YzgyMmRkNzIwNDhlYTk1ODc3MTQwZDcwZjdlMDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwMGY0MDQyMDMyMTQ4M2FiZjQ3NDVjOTE5ZjU0NmUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQuMzMzMzMzMzMzMzMsIDEyMy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGVmZWE3NjIxODFiNDA5ZTg5ZjQ0MTIyOWFiOTRkZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjkyNmRjNDIwNDViNDAyY2I2ZWVhZmUyNmU5MjIzZTYgPSAkKGA8ZGl2IGlkPSJodG1sXzI5MjZkYzQyMDQ1YjQwMmNiNmVlYWZlMjZlOTIyM2U2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYWphdSAoU2FtYSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhlZmVhNzYyMTgxYjQwOWU4OWY0NDEyMjlhYjk0ZGVhLnNldENvbnRlbnQoaHRtbF8yOTI2ZGM0MjA0NWI0MDJjYjZlZWFmZTI2ZTkyMjNlNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MDBmNDA0MjAzMjE0ODNhYmY0NzQ1YzkxOWY1NDZlMy5iaW5kUG9wdXAocG9wdXBfOGVmZWE3NjIxODFiNDA5ZTg5ZjQ0MTIyOWFiOTRkZWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5MzlkM2RiNTc3MzQxM2ZiODQ5MGE0MzM2MTAyNWEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgNTguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmOGRkMTRjOGI3OTQxNGE5ZDYyMjdiOGViNmU4YTM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhNWZlOTg0MTM2YjQxZTdiZjYzNWM4MWM5NDViNTdiID0gJChgPGRpdiBpZD0iaHRtbF9mYTVmZTk4NDEzNmI0MWU3YmY2MzVjODFjOTQ1YjU3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Jhc2gxMjY0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJhc2hraXI8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGY4ZGQxNGM4Yjc5NDE0YTlkNjIyN2I4ZWI2ZThhMzcuc2V0Q29udGVudChodG1sX2ZhNWZlOTg0MTM2YjQxZTdiZjYzNWM4MWM5NDViNTdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY5MzlkM2RiNTc3MzQxM2ZiODQ5MGE0MzM2MTAyNWEwLmJpbmRQb3B1cChwb3B1cF9kZjhkZDE0YzhiNzk0MTRhOWQ2MjI3YjhlYjZlOGEzNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjlhOTk1NDVmNTRlNDgwMTg2MjAyODA1NzBjMTI3M2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi41LCAtMTI2LjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlNmE3MjNhNDY0OTRjOTZiZjJiN2NjMmQ1MzlhMTZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyZTY4YjVlYTljYjQ2MDM4ODAyOGRiZjg2YTAwOThjID0gJChgPGRpdiBpZD0iaHRtbF83MmU2OGI1ZWE5Y2I0NjAzODgwMjhkYmY4NmEwMDk4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2JlbGwxMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJlbGxhIENvb2xhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RlNmE3MjNhNDY0OTRjOTZiZjJiN2NjMmQ1MzlhMTZmLnNldENvbnRlbnQoaHRtbF83MmU2OGI1ZWE5Y2I0NjAzODgwMjhkYmY4NmEwMDk4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOWE5OTU0NWY1NGU0ODAxODYyMDI4MDU3MGMxMjczZS5iaW5kUG9wdXAocG9wdXBfZGU2YTcyM2E0NjQ5NGM5NmJmMmI3Y2MyZDUzOWExNmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiNzY0YjdkY2QwYzRkNzNhZmVmMDk5NzFjNWMyOWQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjQuMCwgOTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjODUxMjMwNmJkZTQ2ZTA4MjhhNjQ2NWM2MTIwYmM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4Y2YxYzUyZWZiNDQzYTZiMTY0ZGU2OTIyZjRiY2QwID0gJChgPGRpdiBpZD0iaHRtbF84OGNmMWM1MmVmYjQ0M2E2YjE2NGRlNjkyMmY0YmNkMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2JlbmcxMjgwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJlbmdhbGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmM4NTEyMzA2YmRlNDZlMDgyOGE2NDY1YzYxMjBiYzguc2V0Q29udGVudChodG1sXzg4Y2YxYzUyZWZiNDQzYTZiMTY0ZGU2OTIyZjRiY2QwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiNzY0YjdkY2QwYzRkNzNhZmVmMDk5NzFjNWMyOWQ3LmJpbmRQb3B1cChwb3B1cF8yYzg1MTIzMDZiZGU0NmUwODI4YTY0NjVjNjEyMGJjOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTg3ODlkMTVjNWNiNGFjNjlhZDE2NTM1ZmQ1YzJlZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy4wLCAtNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQzMDk5YzNlMTQyNGVjZWJiMWUyY2YzYWQ0Y2QyZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmU0MWJiYjA2YTBiNGZkMDhhMDI3MmVlYTZmYzgxMTYgPSAkKGA8ZGl2IGlkPSJodG1sXzZlNDFiYmIwNmEwYjRmZDA4YTAyNzJlZWE2ZmM4MTE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZXJiZXIgKE1pZGRsZSBBdGxhcyk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0MzA5OWMzZTE0MjRlY2ViYjFlMmNmM2FkNGNkMmQ2LnNldENvbnRlbnQoaHRtbF82ZTQxYmJiMDZhMGI0ZmQwOGEwMjcyZWVhNmZjODExNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hODc4OWQxNWM1Y2I0YWM2OWFkMTY1MzVmZDVjMmVkOC5iaW5kUG9wdXAocG9wdXBfMzQzMDk5YzNlMTQyNGVjZWJiMWUyY2YzYWQ0Y2QyZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1MjA1ZWE0NzZmZTQ2YmU5MDUyYzhlYzM1MzQ0NTgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjEuMCwgOTYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxOWVhMmEyZTQ3YTRkNTY5MWUyNTYwYjhjYTQyNmZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxMDhjYTE0NTRmMjRjY2U4N2IyN2I0ZmM0M2Y1ZGIzID0gJChgPGRpdiBpZD0iaHRtbF9mMTA4Y2ExNDU0ZjI0Y2NlODdiMjdiNGZjNDNmNWRiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzEwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJ1cm1lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTE5ZWEyYTJlNDdhNGQ1NjkxZTI1NjBiOGNhNDI2ZmEuc2V0Q29udGVudChodG1sX2YxMDhjYTE0NTRmMjRjY2U4N2IyN2I0ZmM0M2Y1ZGIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE1MjA1ZWE0NzZmZTQ2YmU5MDUyYzhlYzM1MzQ0NTgzLmJpbmRQb3B1cChwb3B1cF85MTllYTJhMmU0N2E0ZDU2OTFlMjU2MGI4Y2E0MjZmYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2UwYjkyZThkNTc0NGM4YjkyZjE0NTM0OTU0YjIxNDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni41ODMzMzMzMzMzLCAtMTIzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjIxYzU4YTRjYWQ0OWYxYTkxNDNiYzVlMjcyZDUzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMjFjYzE2Mjc1YzI0ZWY4YjE1NTlkZWUyNmY1YWFlZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjIxY2MxNjI3NWMyNGVmOGIxNTU5ZGVlMjZmNWFhZWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoZWhhbGlzIChVcHBlcik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiMjFjNThhNGNhZDQ5ZjFhOTE0M2JjNWUyNzJkNTM5LnNldENvbnRlbnQoaHRtbF8yMjFjYzE2Mjc1YzI0ZWY4YjE1NTlkZWUyNmY1YWFlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZTBiOTJlOGQ1NzQ0YzhiOTJmMTQ1MzQ5NTRiMjE0OC5iaW5kUG9wdXAocG9wdXBfMGIyMWM1OGE0Y2FkNDlmMWE5MTQzYmM1ZTI3MmQ1MzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3YmIzOTNhZWE4ODRmMTNiOWQ1NDlmZGUyOWU1NWExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuNTgzMzMzMzMzMywgLTk2LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOTc4ZjE5ODQxZjk0ZWRlOWM1OGJlNGI2ODg3MDFmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMzg2NzFiNWFhODU0YTc2OTBlYzkyNDk1ZGIyM2IwNSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjM4NjcxYjVhYTg1NGE3NjkwZWM5MjQ5NWRiMjNiMDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoaW5hbnRlYyAoUXVpb3RlcGVjKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzk3OGYxOTg0MWY5NGVkZTljNThiZTRiNjg4NzAxZjEuc2V0Q29udGVudChodG1sX2IzODY3MWI1YWE4NTRhNzY5MGVjOTI0OTVkYjIzYjA1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M3YmIzOTNhZWE4ODRmMTNiOWQ1NDlmZGUyOWU1NWExLmJpbmRQb3B1cChwb3B1cF9jOTc4ZjE5ODQxZjk0ZWRlOWM1OGJlNGI2ODg3MDFmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTI0MDg3ZTExZTk4NDE0MGE4MWUwOTE0MTdiMzZkMmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFswLjE2NjY2NjY2NjY2NywgLTc3LjE2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzk4MGFjZTg0N2U0NTU1OTIwNmJiNTM0ODkxZjQwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTZiZThhNzI2MTE0NDBjYTVjYTc2ZGY1M2NjZDE4MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjU2YmU4YTcyNjExNDQwY2E1Y2E3NmRmNTNjY2QxODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jb2ZhMTI0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Db2bDoW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzc5ODBhY2U4NDdlNDU1NTkyMDZiYjUzNDg5MWY0MGYuc2V0Q29udGVudChodG1sX2I1NmJlOGE3MjYxMTQ0MGNhNWNhNzZkZjUzY2NkMTgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEyNDA4N2UxMWU5ODQxNDBhODFlMDkxNDE3YjM2ZDJjLmJpbmRQb3B1cChwb3B1cF9jNzk4MGFjZTg0N2U0NTU1OTIwNmJiNTM0ODkxZjQwZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODI0YjJmNDEwZmViNDVmNTgzNmFkY2Q2ODI1NjRmNDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC4wLCA4NC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGMwNzdjZmI1NmM2NGM0OWJjZTNhYWYwMzA3YzhjYjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmVhN2I1ODdmYjhlNGJlNGI0ZDY1ZjA3N2Y1NWZhNDIgPSAkKGA8ZGl2IGlkPSJodG1sXzJlYTdiNTg3ZmI4ZTRiZTRiNGQ2NWYwNzdmNTVmYTQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZGFyYTEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RGFyYWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGMwNzdjZmI1NmM2NGM0OWJjZTNhYWYwMzA3YzhjYjcuc2V0Q29udGVudChodG1sXzJlYTdiNTg3ZmI4ZTRiZTRiNGQ2NWYwNzdmNTVmYTQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyNGIyZjQxMGZlYjQ1ZjU4MzZhZGNkNjgyNTY0ZjQwLmJpbmRQb3B1cChwb3B1cF80YzA3N2NmYjU2YzY0YzQ5YmNlM2FhZjAzMDdjOGNiNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWNlMmFkMjVkYmEzNDFhMGE5YzEzZTQ0ZGI5NDcxODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjEuMCwgMTY3LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDc3OTIzOTUzYzM5NDE2N2I0ZjRiZDNjNWQyMjE0MDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmIzNDZiODUwMWFhNDMxMThkNGRjNWI0MDdmMGEyOWEgPSAkKGA8ZGl2IGlkPSJodG1sX2JiMzQ2Yjg1MDFhYTQzMTE4ZDRkYzViNDA3ZjBhMjlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EcmVodTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDc3OTIzOTUzYzM5NDE2N2I0ZjRiZDNjNWQyMjE0MDAuc2V0Q29udGVudChodG1sX2JiMzQ2Yjg1MDFhYTQzMTE4ZDRkYzViNDA3ZjBhMjlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VjZTJhZDI1ZGJhMzQxYTBhOWMxM2U0NGRiOTQ3MTg0LmJpbmRQb3B1cChwb3B1cF80Nzc5MjM5NTNjMzk0MTY3YjRmNGJkM2M1ZDIyMTQwMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzc3MDJlOWI3ODBmNDQ0YzkyMDMxOThkMzA2MmZiMGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjMzMzMzMzMzMzMzMDAwMSwgMC40MTY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kN2M4YzkzZmQ0OTM0NjRhYTQ5MTVhNTY2MTAwY2NhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDFiYWNlMGVjZmM0YWM5OTM2MTM4OGJkZTlkZGJiNSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2QxYmFjZTBlY2ZjNGFjOTkzNjEzODhiZGU5ZGRiYjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ld2VlMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Fd2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDdjOGM5M2ZkNDkzNDY0YWE0OTE1YTU2NjEwMGNjYTAuc2V0Q29udGVudChodG1sXzdkMWJhY2UwZWNmYzRhYzk5MzYxMzg4YmRlOWRkYmI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc3NzAyZTliNzgwZjQ0NGM5MjAzMTk4ZDMwNjJmYjBjLmJpbmRQb3B1cChwb3B1cF9kN2M4YzkzZmQ0OTM0NjRhYTQ5MTVhNTY2MTAwY2NhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDYzMWNjNjg1ZTQ1NDgxZTk0YjEwMjkxZDRjNjBjNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0LjAsIDEyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZjMxMGZmYWQzYzA0YjIzOGRhZmUyYzViOGY0ZWM4ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xY2E1ODU3YzhlNjA0NDBlYTE4OTllNTFjODA1MGVhZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWNhNTg1N2M4ZTYwNDQwZWExODk5ZTUxYzgwNTBlYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ld29uMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Fd29uZG88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2YzMTBmZmFkM2MwNGIyMzhkYWZlMmM1YjhmNGVjOGUuc2V0Q29udGVudChodG1sXzFjYTU4NTdjOGU2MDQ0MGVhMTg5OWU1MWM4MDUwZWFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q2MzFjYzY4NWU0NTQ4MWU5NGIxMDI5MWQ0YzYwYzY5LmJpbmRQb3B1cChwb3B1cF83ZjMxMGZmYWQzYzA0YjIzOGRhZmUyYzViOGY0ZWM4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTVlOGYzMzMyODgxNDI0ZGE3MzM0NDUzZGZkOWQzMzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2MC41LCAtMTQ1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NGU1ZTYzNmE3NWM0YTFmYjdjODIyMDdmMTVmZGZmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYjFhODY1YjNlZGQ0YzE3YmQ2ZjlmNTM5NTNhODM1NCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2IxYTg2NWIzZWRkNGMxN2JkNmY5ZjUzOTUzYTgzNTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9leWFrMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5FeWFrPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0ZTVlNjM2YTc1YzRhMWZiN2M4MjIwN2YxNWZkZmY4LnNldENvbnRlbnQoaHRtbF8zYjFhODY1YjNlZGQ0YzE3YmQ2ZjlmNTM5NTNhODM1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNWU4ZjMzMzI4ODE0MjRkYTczMzQ0NTNkZmQ5ZDMzNS5iaW5kUG9wdXAocG9wdXBfOTRlNWU2MzZhNzVjNGExZmI3YzgyMjA3ZjE1ZmRmZjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3OTRlYzYxNTc4MjRiMDFiODk5YTE2MTNkMGE2NjAxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi42NjY2NjY2NjY2Njk5OTksIDE3LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWIyZTdkNzBmNTU0MjFhOWE2Nzg2MTc0NGRmNjk5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OTc0ZjlmYTYwMTE0MzExOWIzMDE1ODMyNTlmZWEyYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzk3NGY5ZmE2MDExNDMxMTliMzAxNTgzMjU5ZmVhMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdiZXlhIEJvc3NhbmdvYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2ViMmU3ZDcwZjU1NDIxYTlhNjc4NjE3NDRkZjY5OTIuc2V0Q29udGVudChodG1sXzc5NzRmOWZhNjAxMTQzMTE5YjMwMTU4MzI1OWZlYTJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI3OTRlYzYxNTc4MjRiMDFiODk5YTE2MTNkMGE2NjAxLmJpbmRQb3B1cChwb3B1cF83ZWIyZTdkNzBmNTU0MjFhOWE2Nzg2MTc0NGRmNjk5MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDhhNDlmZTc1MmFlNDdmNWI1ZTYyZTlhZTg5MGI4YzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi45MTY2NjY2NjY3LCAxMDUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhNDU2ZTE1YjU1YjQyODM4YzgzYWI2YTg1ZWRlOTJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlOTAyMDFkMDMzYzRjNTE5MWFiYzRiN2FiYzk4NTY5ID0gJChgPGRpdiBpZD0iaHRtbF9lZTkwMjAxZDAzM2M0YzUxOTFhYmM0YjdhYmM5ODU2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2dlbGExMjYxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdlbGFvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhNDU2ZTE1YjU1YjQyODM4YzgzYWI2YTg1ZWRlOTJmLnNldENvbnRlbnQoaHRtbF9lZTkwMjAxZDAzM2M0YzUxOTFhYmM0YjdhYmM5ODU2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wOGE0OWZlNzUyYWU0N2Y1YjVlNjJlOWFlODkwYjhjMi5iaW5kUG9wdXAocG9wdXBfYWE0NTZlMTViNTViNDI4MzhjODNhYjZhODVlZGU5MmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5ZDhhNmMwMjQ0NzQzNWQ5NTZmNmI5OGQ5OTJmOWI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMCwgNDQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5OTU2MzdiNjkzZTRjNWM5YjcxZGQ5ZTNlNTY3NDM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhN2IxZWNiNWYxODQ0OGI4OTBlNTMxNzIxNDlmOWE4ID0gJChgPGRpdiBpZD0iaHRtbF9jYTdiMWVjYjVmMTg0NDhiODkwZTUzMTcyMTQ5ZjlhOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdlb3JnaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5OTU2MzdiNjkzZTRjNWM5YjcxZGQ5ZTNlNTY3NDM2LnNldENvbnRlbnQoaHRtbF9jYTdiMWVjYjVmMTg0NDhiODkwZTUzMTcyMTQ5ZjlhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOWQ4YTZjMDI0NDc0MzVkOTU2ZjZiOThkOTkyZjliOC5iaW5kUG9wdXAocG9wdXBfODk5NTYzN2I2OTNlNGM1YzliNzFkZDllM2U1Njc0MzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlMmE5OWJhMzllOTRjY2E4OTA5MDUxMjZhN2Q1M2NmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNS42NjY2NjY2NjY2Njk5OTksIC0wLjE2NjY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3NzE5ZTA1ZjVhNzRiZWM4ZDI2NDZkZmFhNWVjZDJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmNzVkMDZiN2JhNjQwYTRiYWQxMDBmNTAwZjEzNDBmID0gJChgPGRpdiBpZD0iaHRtbF8xZjc1ZDA2YjdiYTY0MGE0YmFkMTAwZjUwMGYxMzQwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R8OjPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNzcxOWUwNWY1YTc0YmVjOGQyNjQ2ZGZhYTVlY2QyZC5zZXRDb250ZW50KGh0bWxfMWY3NWQwNmI3YmE2NDBhNGJhZDEwMGY1MDBmMTM0MGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWUyYTk5YmEzOWU5NGNjYTg5MDkwNTEyNmE3ZDUzY2YuYmluZFBvcHVwKHBvcHVwX2I3NzE5ZTA1ZjVhNzRiZWM4ZDI2NDZkZmFhNWVjZDJkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MTJkY2JmNjg0NTI0NmY2YTc2Y2IyZmZiODI0NzIyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjAsIDcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhNDY3NjQzM2U1YjQ4ODM5ZWZhNzE1MDVmNzg3ODRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyYzA4OGU1YjdkZTQ2OTRhZjQwZTFiY2UwZTY4YjAwID0gJChgPGRpdiBpZD0iaHRtbF8zMmMwODhlNWI3ZGU0Njk0YWY0MGUxYmNlMGU2OGIwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhdXMxMjU3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhdXNhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhNDY3NjQzM2U1YjQ4ODM5ZWZhNzE1MDVmNzg3ODRiLnNldENvbnRlbnQoaHRtbF8zMmMwODhlNWI3ZGU0Njk0YWY0MGUxYmNlMGU2OGIwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MTJkY2JmNjg0NTI0NmY2YTc2Y2IyZmZiODI0NzIyZS5iaW5kUG9wdXAocG9wdXBfMGE0Njc2NDMzZTViNDg4MzllZmE3MTUwNWY3ODc4NGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdhYWJlNTJmYjVhNDQ4ZDdiN2MyZWQ1MzM0YzMwY2ExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDcuMCwgMjAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhOTBjNjMyYzZmOTQ0ZjE4OTViNzFlMDljZGE0NDc1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwODZmYmNmOGEzYzRkYWZiZGY0ZjkxZTVmYTdmNjJhID0gJChgPGRpdiBpZD0iaHRtbF9lMDg2ZmJjZjhhM2M0ZGFmYmRmNGY5MWU1ZmE3ZjYyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2h1bmcxMjc0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkh1bmdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTkwYzYzMmM2Zjk0NGYxODk1YjcxZTA5Y2RhNDQ3NS5zZXRDb250ZW50KGh0bWxfZTA4NmZiY2Y4YTNjNGRhZmJkZjRmOTFlNWZhN2Y2MmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2FhYmU1MmZiNWE0NDhkN2I3YzJlZDUzMzRjMzBjYTEuYmluZFBvcHVwKHBvcHVwX2RhOTBjNjMyYzZmOTQ0ZjE4OTViNzFlMDljZGE0NDc1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNjcwODEwZDRkZTU0ZmMyODY1MDNkYjIzODMwMDg5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjA4MzMzMzMzMzMsIC0xMjMuNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDQwOWFjMWY2MTM4NGRlYTg3MjUyMTQ4MWZhMTI0ZTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWI2ZDM2YmEwMzIyNGQwMGIxZjEwMTg5NjY4YjMzNjIgPSAkKGA8ZGl2IGlkPSJodG1sXzFiNmQzNmJhMDMyMjRkMDBiMWYxMDE4OTY2OGIzMzYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaHVwYTEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SHVwYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNDA5YWMxZjYxMzg0ZGVhODcyNTIxNDgxZmExMjRlNS5zZXRDb250ZW50KGh0bWxfMWI2ZDM2YmEwMzIyNGQwMGIxZjEwMTg5NjY4YjMzNjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTY3MDgxMGQ0ZGU1NGZjMjg2NTAzZGIyMzgzMDA4OWIuYmluZFBvcHVwKHBvcHVwXzA0MDlhYzFmNjEzODRkZWE4NzI1MjE0ODFmYTEyNGU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZjQ4ZTA1NzJjYWU0YThlYmMzZGI5ZjdkYzBjYTU0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuMCwgNy4zMzMzMzMzMzMzMzAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjVjMGIxY2JiMjU0MjgwYjc4NjRiZGRkMDYwNjFjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNWM2OTU3YTBiZWI0Zjc0YjIxNDUyOGU4MmEwNTdmMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDVjNjk1N2EwYmViNGY3NGIyMTQ1MjhlODJhMDU3ZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTQxNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JZ2JvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEyNWMwYjFjYmIyNTQyODBiNzg2NGJkZGQwNjA2MWMzLnNldENvbnRlbnQoaHRtbF8wNWM2OTU3YTBiZWI0Zjc0YjIxNDUyOGU4MmEwNTdmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZjQ4ZTA1NzJjYWU0YThlYmMzZGI5ZjdkYzBjYTU0NS5iaW5kUG9wdXAocG9wdXBfMTI1YzBiMWNiYjI1NDI4MGI3ODY0YmRkZDA2MDYxYzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y0Y2IxNjNmYmM4ZDQ5NWU5ZjVhMDBjZWJmMTJkMjY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMy43NSwgMzQuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcxMWU5MmNjYmE5YjQ0ZjRhYzU3YjVhNWExZDcxMGE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhYjI5YTFkZDYwMTQ2MjU4Nzg3YjQ0MjhlYWQ1OTliID0gJChgPGRpdiBpZD0iaHRtbF83YWIyOWExZGQ2MDE0NjI1ODc4N2I0NDI4ZWFkNTk5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2lra2sxMjQyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPklrPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxMWU5MmNjYmE5YjQ0ZjRhYzU3YjVhNWExZDcxMGE2LnNldENvbnRlbnQoaHRtbF83YWIyOWExZGQ2MDE0NjI1ODc4N2I0NDI4ZWFkNTk5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNGNiMTYzZmJjOGQ0OTVlOWY1YTAwY2ViZjEyZDI2NS5iaW5kUG9wdXAocG9wdXBfNzExZTkyY2NiYTliNDRmNGFjNTdiNWE1YTFkNzEwYTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiYTAxZjczZDY5NzRjZDE4NDAwZTA1M2I1NDYwZjFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQuMCwgMzUuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmMGU2YTFhNmE2MjRmMGU5NDJmMTNmNzdkOTZiYmQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhMTY4YWE3ZDU3ZDQ3NDRhNzU3M2M5NGVkZjI3NmIzID0gJChgPGRpdiBpZD0iaHRtbF82YTE2OGFhN2Q1N2Q0NzQ0YTc1NzNjOTRlZGYyNzZiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2lyYXExMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPklyYXF3PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmMGU2YTFhNmE2MjRmMGU5NDJmMTNmNzdkOTZiYmQwLnNldENvbnRlbnQoaHRtbF82YTE2OGFhN2Q1N2Q0NzQ0YTc1NzNjOTRlZGYyNzZiMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYmEwMWY3M2Q2OTc0Y2QxODQwMGUwNTNiNTQ2MGYxYy5iaW5kUG9wdXAocG9wdXBfN2YwZTZhMWE2YTYyNGYwZTk0MmYxM2Y3N2Q5NmJiZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyODhiYWJiOWZjMjQ5YzA5M2YyMGYzYmI4ZThlNzc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNS41LCA2LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjBlZjQzMjZhZjgxNDYyY2JkMzA0MDdiZWI5MzdhNmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWNjMzNhMDU5MzM5NDViNGFjYjNiZWZkY2RiY2Y3MTEgPSAkKGA8ZGl2IGlkPSJodG1sXzFjYzMzYTA1OTMzOTQ1YjRhY2IzYmVmZGNkYmNmNzExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXNvazEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXNva288L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjBlZjQzMjZhZjgxNDYyY2JkMzA0MDdiZWI5MzdhNmYuc2V0Q29udGVudChodG1sXzFjYzMzYTA1OTMzOTQ1YjRhY2IzYmVmZGNkYmNmNzExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyODhiYWJiOWZjMjQ5YzA5M2YyMGYzYmI4ZThlNzc4LmJpbmRQb3B1cChwb3B1cF82MGVmNDMyNmFmODE0NjJjYmQzMDQwN2JlYjkzN2E2ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGVkNGRhNTFjYzY5NGZiZTkzYWM5NjA3OTc1ODY1ODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Ny4wLCAxNTcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IzOTEzNjNiYTAzNDRlN2E5OTU2MmQzNzEwMWNhMjBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkYmQwYjdkYzVlZDQzMGI5NWQyYWFlN2JlOGEyMjhkID0gJChgPGRpdiBpZD0iaHRtbF9iZGJkMGI3ZGM1ZWQ0MzBiOTVkMmFhZTdiZThhMjI4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SXRlbG1lbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjM5MTM2M2JhMDM0NGU3YTk5NTYyZDM3MTAxY2EyMGIuc2V0Q29udGVudChodG1sX2JkYmQwYjdkYzVlZDQzMGI5NWQyYWFlN2JlOGEyMjhkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhlZDRkYTUxY2M2OTRmYmU5M2FjOTYwNzk3NTg2NTg5LmJpbmRQb3B1cChwb3B1cF9iMzkxMzYzYmEwMzQ0ZTdhOTk1NjJkMzcxMDFjYTIwYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDhlMTRhOWMxYmFiNDVjN2IzZjg3MWNlOTQ5ZWQ4OTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS42NjY2NjY2NjY3MDAwMDEsIC05MS42NjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjllYWQzYjVlOTRmNDM1OWIyM2Q0ZDdkZjA2M2E0NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTE2ZjczMTE0YzFiNDQyZjg4NzJlODM2ZWMzMDg2N2QgPSAkKGA8ZGl2IGlkPSJodG1sX2UxNmY3MzExNGMxYjQ0MmY4ODcyZTgzNmVjMzA4NjdkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KYWthbHRlazwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjllYWQzYjVlOTRmNDM1OWIyM2Q0ZDdkZjA2M2E0NGEuc2V0Q29udGVudChodG1sX2UxNmY3MzExNGMxYjQ0MmY4ODcyZTgzNmVjMzA4NjdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ4ZTE0YTljMWJhYjQ1YzdiM2Y4NzFjZTk0OWVkODk2LmJpbmRQb3B1cChwb3B1cF8yOWVhZDNiNWU5NGY0MzU5YjIzZDRkN2RmMDYzYTQ0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDYzOGI4MmExOTdlNGE3MmI2MzM5NjNhYTJiZTU3MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC4wLCA3Ni4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZkZWMxZDVlZmM3NDE5YzlmMGVjMzgyY2U5MTY4ZWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNjYzEzN2ZmMDI4NDVjMjk1YzljMWZhMGY0M2E2ZGUgPSAkKGA8ZGl2IGlkPSJodG1sXzkzY2MxMzdmZjAyODQ1YzI5NWM5YzFmYTBmNDNhNmRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FubmFkYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZmRlYzFkNWVmYzc0MTljOWYwZWMzODJjZTkxNjhlZC5zZXRDb250ZW50KGh0bWxfOTNjYzEzN2ZmMDI4NDVjMjk1YzljMWZhMGY0M2E2ZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDYzOGI4MmExOTdlNGE3MmI2MzM5NjNhYTJiZTU3MGEuYmluZFBvcHVwKHBvcHVwX2FmZGVjMWQ1ZWZjNzQxOWM5ZjBlYzM4MmNlOTE2OGVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNjVlNjYyYTBkMjA0OGZkOTAyNzgwOWY1ZmMwODJlNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4LjAsIDk3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NmRlZTU2MDdmOWE0YTdiYTczY2MyMGNiZTQ1NzgzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjM5Mjc2MzQwMzI0ZjU3YWVmOWRkNTQxNTYzMjE5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2IzOTI3NjM0MDMyNGY1N2FlZjlkZDU0MTU2MzIxOTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkthcmVuIChTZ2F3KTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTZkZWU1NjA3ZjlhNGE3YmE3M2NjMjBjYmU0NTc4MzEuc2V0Q29udGVudChodG1sX2NiMzkyNzYzNDAzMjRmNTdhZWY5ZGQ1NDE1NjMyMTk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA2NWU2NjJhMGQyMDQ4ZmQ5MDI3ODA5ZjVmYzA4MmU0LmJpbmRQb3B1cChwb3B1cF81NmRlZTU2MDdmOWE0YTdiYTczY2MyMGNiZTQ1NzgzMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjE3ODQyOTFiMTFhNDhhZjk1Nzc5MjQ1OWVmMjJkN2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wLCA3Ni4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWIwNGMxNTQ0MTAyNDY4NDllZmRkMDhmNWMzODI1NWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTVmMmViZjRkOWU2NDk5NGE0MTc5NjczZDkwMDAwNzggPSAkKGA8ZGl2IGlkPSJodG1sXzE1ZjJlYmY0ZDllNjQ5OTRhNDE3OTY3M2Q5MDAwMDc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FzaDEyNzciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FzaG1pcmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWIwNGMxNTQ0MTAyNDY4NDllZmRkMDhmNWMzODI1NWMuc2V0Q29udGVudChodG1sXzE1ZjJlYmY0ZDllNjQ5OTRhNDE3OTY3M2Q5MDAwMDc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYxNzg0MjkxYjExYTQ4YWY5NTc3OTI0NTllZjIyZDdmLmJpbmRQb3B1cChwb3B1cF8xYjA0YzE1NDQxMDI0Njg0OWVmZGQwOGY1YzM4MjU1YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjM1ZTZlYzFjOTk5NDgyNjk2MzQ3MmY0M2VkNmNiODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi41LCA4NC4zMzMzMzMzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWY1NjdmMDk3N2ExNGU4M2FlNmJmNjM2NDU0NmQwYTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGQzNzA1ODUzN2JkNGNlMmJiMzlhM2UyYjJmZWE3ODYgPSAkKGA8ZGl2IGlkPSJodG1sX2RkMzcwNTg1MzdiZDRjZTJiYjM5YTNlMmIyZmVhNzg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2hhcjEyODciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2hhcmlhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmNTY3ZjA5NzdhMTRlODNhZTZiZjYzNjQ1NDZkMGEzLnNldENvbnRlbnQoaHRtbF9kZDM3MDU4NTM3YmQ0Y2UyYmIzOWEzZTJiMmZlYTc4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MzVlNmVjMWM5OTk0ODI2OTYzNDcyZjQzZWQ2Y2I4NS5iaW5kUG9wdXAocG9wdXBfYWY1NjdmMDk3N2ExNGU4M2FlNmJmNjM2NDU0NmQwYTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwMDQ3Y2Q3ZjM0MTQ4N2JiMGEwZGY2OTgwNTQ4NGQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI1LjUsIDE4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNjZlY2UzOWQ5NDY0ZjNiYTA5OWJkN2E5NzdkMTg0NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNDEzNzE5MjgwNDE0ZmUzYTNlNDRjMmQzOTM1ZDk0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjQxMzcxOTI4MDQxNGZlM2EzZTQ0YzJkMzkzNWQ5NDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raG9lMTI0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaG9la2hvZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjZlY2UzOWQ5NDY0ZjNiYTA5OWJkN2E5NzdkMTg0NS5zZXRDb250ZW50KGh0bWxfMjQxMzcxOTI4MDQxNGZlM2EzZTQ0YzJkMzkzNWQ5NDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODAwNDdjZDdmMzQxNDg3YmIwYTBkZjY5ODA1NDg0ZDguYmluZFBvcHVwKHBvcHVwXzM2NmVjZTM5ZDk0NjRmM2JhMDk5YmQ3YTk3N2QxODQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMDAxYTJiNWUwOTg0NDY3YjM4NzI1NTAyNTVmYTlmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjUsIC0xMjEuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhZjVhNjIyYTRlZjQxMWNiM2U2MDZjN2QwYjE5MGE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2YzFkZTk2NzI0NDRkM2VhY2I5MmM4Zjg0MTQ4MDc3ID0gJChgPGRpdiBpZD0iaHRtbF9mNmMxZGU5NjcyNDQ0ZDNlYWNiOTJjOGY4NDE0ODA3NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2xhbWF0aDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWFmNWE2MjJhNGVmNDExY2IzZTYwNmM3ZDBiMTkwYTguc2V0Q29udGVudChodG1sX2Y2YzFkZTk2NzI0NDRkM2VhY2I5MmM4Zjg0MTQ4MDc3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QwMDFhMmI1ZTA5ODQ0NjdiMzg3MjU1MDI1NWZhOWY4LmJpbmRQb3B1cChwb3B1cF8xYWY1YTYyMmE0ZWY0MTFjYjNlNjA2YzdkMGIxOTBhOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjUxZGVhNTBiNDA3NDFhNGJhNTk0MzFlNDAwMDYxYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjAsIDguMTE2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iN2IxNWY0ZGQ3YWY0OGQ0YjZlZDIyMTE3M2Y4MmRiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZGI3YTI4MzcyYWI0MDhlOGEwNGVjYTk1ZWY1ODAxNCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGRiN2EyODM3MmFiNDA4ZThhMDRlY2E5NWVmNTgwMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb2h1MTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb2h1bW9ubzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iN2IxNWY0ZGQ3YWY0OGQ0YjZlZDIyMTE3M2Y4MmRiYS5zZXRDb250ZW50KGh0bWxfZGRiN2EyODM3MmFiNDA4ZThhMDRlY2E5NWVmNTgwMTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjUxZGVhNTBiNDA3NDFhNGJhNTk0MzFlNDAwMDYxYjQuYmluZFBvcHVwKHBvcHVwX2I3YjE1ZjRkZDdhZjQ4ZDRiNmVkMjIxMTczZjgyZGJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OTEwOTVlZGI0Yjc0NDI5YTYzMjE4NTdkNDk5YTI4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY1LjAsIDU1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZGJkMTlhODJhZmQ0ZGQ2OWIyNTE2YWU3ZTJiYjg4MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGRjMTUwZTliMzU0YmE3YTI4ODUwNmVjZDE4MjBiYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjhkYzE1MGU5YjM1NGJhN2EyODg1MDZlY2QxODIwYmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb21pMTI2OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb21pLVp5cmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZGJkMTlhODJhZmQ0ZGQ2OWIyNTE2YWU3ZTJiYjg4My5zZXRDb250ZW50KGh0bWxfNjhkYzE1MGU5YjM1NGJhN2EyODg1MDZlY2QxODIwYmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjkxMDk1ZWRiNGI3NDQyOWE2MzIxODU3ZDQ5OWEyODcuYmluZFBvcHVwKHBvcHVwXzRkYmQxOWE4MmFmZDRkZDY5YjI1MTZhZTdlMmJiODgzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZWJiMzZlMGRmZmY0MzBhYjllYmU1NDMyOWNhZjliNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjMzMzMzMzMzMzI5OTk5OSwgMTUuMzMzMzMzMzMzMjk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGQ3NDMyM2YxY2JkNGZkNGIxMjNkYjc1ZDVkMDU3NDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjEzYjgzNmIwYzM1NDNmYmIxNjYwODRkZTI3YjdkZDAgPSAkKGA8ZGl2IGlkPSJodG1sXzIxM2I4MzZiMGMzNTQzZmJiMTY2MDg0ZGUyN2I3ZGQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Lb3Rva288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkNzQzMjNmMWNiZDRmZDRiMTIzZGI3NWQ1ZDA1NzQ1LnNldENvbnRlbnQoaHRtbF8yMTNiODM2YjBjMzU0M2ZiYjE2NjA4NGRlMjdiN2RkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZWJiMzZlMGRmZmY0MzBhYjllYmU1NDMyOWNhZjliNy5iaW5kUG9wdXAocG9wdXBfZGQ3NDMyM2YxY2JkNGZkNGIxMjNkYjc1ZDVkMDU3NDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxZTViZTEwZmJjNTRhNGI4YWQ0YTA2ZmZhY2RmNTYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMCwgNDQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE4ZGE4Njc1ZDFiMzRkM2ViMjI3MjJhMmIyN2Q5ZTk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwY2JlZTI2ODQ1NjQ1Njk5Nzg1ZWEwZDUyMWNkMzgzID0gJChgPGRpdiBpZD0iaHRtbF85MGNiZWUyNjg0NTY0NTY5OTc4NWVhMGQ1MjFjZDM4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S3VyZGlzaCAoQ2VudHJhbCk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4ZGE4Njc1ZDFiMzRkM2ViMjI3MjJhMmIyN2Q5ZTk2LnNldENvbnRlbnQoaHRtbF85MGNiZWUyNjg0NTY0NTY5OTc4NWVhMGQ1MjFjZDM4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MWU1YmUxMGZiYzU0YTRiOGFkNGEwNmZmYWNkZjU2MS5iaW5kUG9wdXAocG9wdXBfMThkYTg2NzVkMWIzNGQzZWIyMjcyMmEyYjI3ZDllOTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5NzNiMWU3Yzk0ZDRhNTBhNDI0OTZjYWNiNTlhMmQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNSwgLTExNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmU0ZGM2NWRiM2NkNDFkZjk3MWMzYjI1NDNlZmVhNzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGFhYzRiOTQ4OWNmNGY1OWI4NDJkZjRkZDRiZWFiM2IgPSAkKGA8ZGl2IGlkPSJodG1sXzhhYWM0Yjk0ODljZjRmNTliODQyZGY0ZGQ0YmVhYjNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva3V0ZTEyNDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S3V0ZW5haTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZTRkYzY1ZGIzY2Q0MWRmOTcxYzNiMjU0M2VmZWE3OC5zZXRDb250ZW50KGh0bWxfOGFhYzRiOTQ4OWNmNGY1OWI4NDJkZjRkZDRiZWFiM2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDk3M2IxZTdjOTRkNGE1MGE0MjQ5NmNhY2I1OWEyZDkuYmluZFBvcHVwKHBvcHVwX2JlNGRjNjVkYjNjZDQxZGY5NzFjM2IyNTQzZWZlYTc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZDRhYjBjODUyMWU0Yzg1YTVjYTUwYzY4Nzg3NjRhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAsIDc4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mN2Y0YWUxNDUzODM0NTg2YmE1YjBkZDRiMTkzNTQwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNzIxNjRhMGY5YTM0N2U5YWFmNjVhMTMyMDRjYzA2ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjcyMTY0YTBmOWEzNDdlOWFhZjY1YTEzMjA0Y2MwNmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhZGFraGk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y3ZjRhZTE0NTM4MzQ1ODZiYTViMGRkNGIxOTM1NDA0LnNldENvbnRlbnQoaHRtbF9mNzIxNjRhMGY5YTM0N2U5YWFmNjVhMTMyMDRjYzA2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZDRhYjBjODUyMWU0Yzg1YTVjYTUwYzY4Nzg3NjRhMy5iaW5kUG9wdXAocG9wdXBfZjdmNGFlMTQ1MzgzNDU4NmJhNWIwZGQ0YjE5MzU0MDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkZTNkOTk1OGJlZDQ1MjFiODNhYjIzNmU5MDI3MjIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjAuMCwgOTguMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA1OTAxYTg0NDk5YzRhNjJhNWZkZjIxZGUwODhmMGVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3MTU3MjRmMDA1MTQ1Mzc5NWRiOGVkYWRhNGI4MjFmID0gJChgPGRpdiBpZD0iaHRtbF9mNzE1NzI0ZjAwNTE0NTM3OTVkYjhlZGFkYTRiODIxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xhaHUxMjUzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxhaHU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDU5MDFhODQ0OTljNGE2MmE1ZmRmMjFkZTA4OGYwZWEuc2V0Q29udGVudChodG1sX2Y3MTU3MjRmMDA1MTQ1Mzc5NWRiOGVkYWRhNGI4MjFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkZTNkOTk1OGJlZDQ1MjFiODNhYjIzNmU5MDI3MjIzLmJpbmRQb3B1cChwb3B1cF8wNTkwMWE4NDQ5OWM0YTYyYTVmZGYyMWRlMDg4ZjBlYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjdkODRiYTZhOGNhNDRjOTg0Zjk1NTljN2IwOWM5MzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC4wODMzMzMzMzMzLCAxMTAuMTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzk1NWUwZWEyZmM3NDMwZDk0Njk5ZjdhZmUzY2NiYzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU5NjZkNDg5MDRkNGYzNWI2NTg1NzZlYmQ0NzY2ZmEgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1OTY2ZDQ4OTA0ZDRmMzViNjU4NTc2ZWJkNDc2NmZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrazEyMzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFra2lhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5NTVlMGVhMmZjNzQzMGQ5NDY5OWY3YWZlM2NjYmMxLnNldENvbnRlbnQoaHRtbF9kNTk2NmQ0ODkwNGQ0ZjM1YjY1ODU3NmViZDQ3NjZmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mN2Q4NGJhNmE4Y2E0NGM5ODRmOTU1OWM3YjA5YzkzNy5iaW5kUG9wdXAocG9wdXBfMzk1NWUwZWEyZmM3NDMwZDk0Njk5ZjdhZmUzY2NiYzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2NjIzZWYwNWM5NzRkNzNhMjk5N2U5OTMzNDg0OGNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4wLCAxNC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTM5MmU1ZWZkZGE4NDkyZGI1OGQwNjM0YTg0ZTBkMWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDJiZmM5MTAwYzI3NDFlOGEyMGZiY2RhZDFmMmE3NTUgPSAkKGA8ZGl2IGlkPSJodG1sX2QyYmZjOTEwMGMyNzQxZThhMjBmYmNkYWQxZjJhNzU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFtZTEyNjgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFtw6k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTM5MmU1ZWZkZGE4NDkyZGI1OGQwNjM0YTg0ZTBkMWIuc2V0Q29udGVudChodG1sX2QyYmZjOTEwMGMyNzQxZThhMjBmYmNkYWQxZjJhNzU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q2NjIzZWYwNWM5NzRkNzNhMjk5N2U5OTMzNDg0OGNhLmJpbmRQb3B1cChwb3B1cF8xMzkyZTVlZmRkYTg0OTJkYjU4ZDA2MzRhODRlMGQxYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTUxMTk0Mzc0OGY0NDM1NGEyYjlmMTMyMzRhYzA2MWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Ny4wLCAyNC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2E0ZTEzNTFmNWFmNDhlNmEyZTFmODNkNzljMzI2MTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQ3ZjVlODRlMTFhNDM3NGJkZjBhZTRhODQ4NWMzODYgPSAkKGA8ZGl2IGlkPSJodG1sXzRkN2Y1ZTg0ZTExYTQzNzRiZGYwYWU0YTg0ODVjMzg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGF0djEyNDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGF0dmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YTRlMTM1MWY1YWY0OGU2YTJlMWY4M2Q3OWMzMjYxMC5zZXRDb250ZW50KGh0bWxfNGQ3ZjVlODRlMTFhNDM3NGJkZjBhZTRhODQ4NWMzODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTUxMTk0Mzc0OGY0NDM1NGEyYjlmMTMyMzRhYzA2MWIuYmluZFBvcHVwKHBvcHVwXzdhNGUxMzUxZjVhZjQ4ZTZhMmUxZjgzZDc5YzMyNjEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOTE2MjIyNjE0Njk0MjI3YjU5OGFmNjUzMTg3ZmY0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI3LjE2NjY2NjY2NjcsIDg4LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OGY5NmQ3NzczOGU0ZjY1YmMxYjNhY2U3N2Q5NThhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTk5NWIwOThjNmU0YTkxOTFlNDlhOWEyOWYwM2RlYSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjU5OTViMDk4YzZlNGE5MTkxZTQ5YTlhMjlmMDNkZWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sZXBjMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MZXBjaGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzhmOTZkNzc3MzhlNGY2NWJjMWIzYWNlNzdkOTU4YWMuc2V0Q29udGVudChodG1sX2I1OTk1YjA5OGM2ZTRhOTE5MWU0OWE5YTI5ZjAzZGVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM5MTYyMjI2MTQ2OTQyMjdiNTk4YWY2NTMxODdmZjQyLmJpbmRQb3B1cChwb3B1cF83OGY5NmQ3NzczOGU0ZjY1YmMxYjNhY2U3N2Q5NThhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmJhZTgyZTY1YzgyNDZkNWI1ZjkwMTNhOWRiYjU1NmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjA4MzMzMzMzMzMzLCAzMC45MTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWZhNTg1Mjk0NmM5NGViYjg4NTZmOWE2YjFkM2Q4NGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzI0MTE2OGFkMjUxNGM5M2E4ZWNjZmIwNDhmNjcyY2IgPSAkKGA8ZGl2IGlkPSJodG1sXzcyNDExNjhhZDI1MTRjOTNhOGVjY2ZiMDQ4ZjY3MmNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbHVnYjEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+THVnYmFyYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZmE1ODUyOTQ2Yzk0ZWJiODg1NmY5YTZiMWQzZDg0ZS5zZXRDb250ZW50KGh0bWxfNzI0MTE2OGFkMjUxNGM5M2E4ZWNjZmIwNDhmNjcyY2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmJhZTgyZTY1YzgyNDZkNWI1ZjkwMTNhOWRiYjU1NmMuYmluZFBvcHVwKHBvcHVwX2VmYTU4NTI5NDZjOTRlYmI4ODU2ZjlhNmIxZDNkODRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mM2I5OGNiZjc0NTk0YjQ1YTg4ODU0NzdlNGRhYmNkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjUsIDM0Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzRiZGE2NzViNTZjNDUwY2FmZTBjYTcyZjU4NDEyY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ5NGQxMzBhMjZkNDEyMWI2OGIwM2IxMDUwN2NiYjEgPSAkKGA8ZGl2IGlkPSJodG1sXzM0OTRkMTMwYTI2ZDQxMjFiNjhiMDNiMTA1MDdjYmIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MdW88L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0YmRhNjc1YjU2YzQ1MGNhZmUwY2E3MmY1ODQxMmNhLnNldENvbnRlbnQoaHRtbF8zNDk0ZDEzMGEyNmQ0MTIxYjY4YjAzYjEwNTA3Y2JiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mM2I5OGNiZjc0NTk0YjQ1YTg4ODU0NzdlNGRhYmNkMy5iaW5kUG9wdXAocG9wdXBfYzRiZGE2NzViNTZjNDUwY2FmZTBjYTcyZjU4NDEyY2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkNzI2NzdkZWFlYzRkMDFiNTVhNmNjZDYxMjlhZDcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjAsIDQ3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMzk1ZDZmZGNlYzc0MTc5OWQ5YzgyMTUyNjNiNTA0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMjE4NjFiMzk5ZDQ0NGI4OTdhMWJjYmYyYjllNDBhOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjIxODYxYjM5OWQ0NDRiODk3YTFiY2JmMmI5ZTQwYTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hbGFnYXN5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMzk1ZDZmZGNlYzc0MTc5OWQ5YzgyMTUyNjNiNTA0Yy5zZXRDb250ZW50KGh0bWxfZjIxODYxYjM5OWQ0NDRiODk3YTFiY2JmMmI5ZTQwYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWQ3MjY3N2RlYWVjNGQwMWI1NWE2Y2NkNjEyOWFkNzIuYmluZFBvcHVwKHBvcHVwXzMzOTVkNmZkY2VjNzQxNzk5ZDljODIxNTI2M2I1MDRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NWIyNTQ5ZTVhZDc0YjcwODk0MDBhOWFlOGY1MzY2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjAsIDEzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OTNhYTcwOWQ3OTk0NGU5ODAxMzIxYWJiOGJjZDE0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YmNlYWRjNWQ5ZmI0NGU3OGI3NGNiZDJmYmI4ZjczMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNmJjZWFkYzVkOWZiNDRlNzhiNzRjYmQyZmJiOGY3MzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcmdpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OTNhYTcwOWQ3OTk0NGU5ODAxMzIxYWJiOGJjZDE0MC5zZXRDb250ZW50KGh0bWxfNmJjZWFkYzVkOWZiNDRlNzhiNzRjYmQyZmJiOGY3MzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTViMjU0OWU1YWQ3NGI3MDg5NDAwYTlhZThmNTM2NmQuYmluZFBvcHVwKHBvcHVwXzY5M2FhNzA5ZDc5OTQ0ZTk4MDEzMjFhYmI4YmNkMTQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjM2MzBiZjE0Y2E0ZmI1YjUwYjViODEyZTc4MTIzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI1LjAsIDExMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTFhMWM1ZTUwMmVjNGFlYWFlNDU3NDVmODVlZTI5YjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDIxNWVhMTAwZGNiNDgyNDhkMDYyYzUzYTY1ZTQ5YjYgPSAkKGA8ZGl2IGlkPSJodG1sX2QyMTVlYTEwMGRjYjQ4MjQ4ZDA2MmM1M2E2NWU0OWI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWVuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMWExYzVlNTAyZWM0YWVhYWU0NTc0NWY4NWVlMjliNy5zZXRDb250ZW50KGh0bWxfZDIxNWVhMTAwZGNiNDgyNDhkMDYyYzUzYTY1ZTQ5YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWIzNjMwYmYxNGNhNGZiNWI1MGI1YjgxMmU3ODEyM2QuYmluZFBvcHVwKHBvcHVwXzExYTFjNWU1MDJlYzRhZWFhZTQ1NzQ1Zjg1ZWUyOWI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMWE0MTU4ZTZiZjE0MTNmODhjN2ExNTU5MmRmOWNiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIzLjAsIDg0LjY2NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YmNkNTVjNTI0NmM0NmM0YTJjNzkyNDI1ZGZmOGMxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODgzYmZkZmY2YjM0ZDZmYjVjMDcwY2E5ZWZmMDliMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzg4M2JmZGZmNmIzNGQ2ZmI1YzA3MGNhOWVmZjA5YjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tdW5kMTMyMCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NdW5kYXJpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiY2Q1NWM1MjQ2YzQ2YzRhMmM3OTI0MjVkZmY4YzE5LnNldENvbnRlbnQoaHRtbF9jODgzYmZkZmY2YjM0ZDZmYjVjMDcwY2E5ZWZmMDliMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMWE0MTU4ZTZiZjE0MTNmODhjN2ExNTU5MmRmOWNiYy5iaW5kUG9wdXAocG9wdXBfOGJjZDU1YzUyNDZjNDZjNGEyYzc5MjQyNWRmZjhjMTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5ZjY3NWFlNDdmYzRjN2FiMTM0ZmU1OTlhZDU1NDY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEwLjc4MzMzMzMzMzMsIDE2NS44NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NjUyNDJjOTI3MWM0YTA1YmMyYTYyZTcxMzZmMTAxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOWI4OWViOTAwMGM0NDE0ODRhZDZkNmRiZDAxZTBjYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTliODllYjkwMDBjNDQxNDg0YWQ2ZDZkYmQwMWUwY2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uYXR1MTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OYXTDvGd1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2NTI0MmM5MjcxYzRhMDViYzJhNjJlNzEzNmYxMDEzLnNldENvbnRlbnQoaHRtbF9lOWI4OWViOTAwMGM0NDE0ODRhZDZkNmRiZDAxZTBjYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOWY2NzVhZTQ3ZmM0YzdhYjEzNGZlNTk5YWQ1NTQ2NS5iaW5kUG9wdXAocG9wdXBfNDY1MjQyYzkyNzFjNGEwNWJjMmE2MmU3MTM2ZjEwMTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiN2FjMWYzNTQ3NDQ2ZTRiYjM2MTQ5ZDBjODU1MjJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMTY2NjY2NjY2NywgLTEwOC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGE5MzU0NDRjNjYzNDI5ZDg3MzM4YjIzNDliNDcyZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjdjNWVhOWIxMGNhNDk0NmExNjJjNWNkOGMyOGZlNWQgPSAkKGA8ZGl2IGlkPSJodG1sXzY3YzVlYTliMTBjYTQ5NDZhMTYyYzVjZDhjMjhmZTVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbmF2YTEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TmF2YWpvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhOTM1NDQ0YzY2MzQyOWQ4NzMzOGIyMzQ5YjQ3MmUwLnNldENvbnRlbnQoaHRtbF82N2M1ZWE5YjEwY2E0OTQ2YTE2MmM1Y2Q4YzI4ZmU1ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYjdhYzFmMzU0NzQ0NmU0YmIzNjE0OWQwYzg1NTIyYy5iaW5kUG9wdXAocG9wdXBfMGE5MzU0NDRjNjYzNDI5ZDg3MzM4YjIzNDliNDcyZTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiNjhiOGM3Njg2YjQxZDdhNTg5OWM0YzRkMjE1NTU1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuOTE2NjY2NjY2NzAwMDAxLCAtMTYuOTE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1MGJhYjc1MGJmMTRlZjc5ZjhmM2FjOThkYjgyODQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5MjYyMjQzNzQ3OTQ3ODZhNWY1ODBkN2RhZmI4YWIyID0gJChgPGRpdiBpZD0iaHRtbF8wOTI2MjI0Mzc0Nzk0Nzg2YTVmNTgwZDdkYWZiOGFiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25kdXQxMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5kdXQ8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDUwYmFiNzUwYmYxNGVmNzlmOGYzYWM5OGRiODI4NDMuc2V0Q29udGVudChodG1sXzA5MjYyMjQzNzQ3OTQ3ODZhNWY1ODBkN2RhZmI4YWIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZiNjhiOGM3Njg2YjQxZDdhNTg5OWM0YzRkMjE1NTU1LmJpbmRQb3B1cChwb3B1cF80NTBiYWI3NTBiZjE0ZWY3OWY4ZjNhYzk4ZGI4Mjg0MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmQ2MjhlZGFhNzA5NGIwNWIxYjkwNjI3Mjc4MTMzMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2OS4wLCA3Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGM3OTIyMWViNDJkNDU0MGEwMTJiOTVlNzU1MTMxNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTMzNmI0YWQyMjZmNGMyNThhYTgzNzYyMTdmZDlmNDMgPSAkKGA8ZGl2IGlkPSJodG1sXzEzMzZiNGFkMjI2ZjRjMjU4YWE4Mzc2MjE3ZmQ5ZjQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbmVuZTEyNTEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TmVuZXRzPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjNzkyMjFlYjQyZDQ1NDBhMDEyYjk1ZTc1NTEzMTY4LnNldENvbnRlbnQoaHRtbF8xMzM2YjRhZDIyNmY0YzI1OGFhODM3NjIxN2ZkOWY0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZDYyOGVkYWE3MDk0YjA1YjFiOTA2MjcyNzgxMzMwZS5iaW5kUG9wdXAocG9wdXBfZGM3OTIyMWViNDJkNDU0MGEwMTJiOTVlNzU1MTMxNjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4MDZjNjNiNmRhYTRhMTM4OTc1OTg5ODYyNDRhNWQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjguMCwgODUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxYjQzNmIyYWNjNDQ1ZjdiZTE3YjM5N2NjZmRiNmQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0ZGQ2OTMxNTNjZDQ4Yzc5MTFmZWJlOTFiYzNhNTgwID0gJChgPGRpdiBpZD0iaHRtbF9jNGRkNjkzMTUzY2Q0OGM3OTExZmViZTkxYmMzYTU4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25lcGExMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5lcGFsaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMWI0MzZiMmFjYzQ0NWY3YmUxN2IzOTdjY2ZkYjZkMy5zZXRDb250ZW50KGh0bWxfYzRkZDY5MzE1M2NkNDhjNzkxMWZlYmU5MWJjM2E1ODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjgwNmM2M2I2ZGFhNGExMzg5NzU5ODk4NjI0NGE1ZDEuYmluZFBvcHVwKHBvcHVwX2MxYjQzNmIyYWNjNDQ1ZjdiZTE3YjM5N2NjZmRiNmQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTMwMzM4Y2M5NGY0YTFhOWEwYjcxZjkxZjdjOTM4OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjAsIC0xMTYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlZDhmZWNlNmY4MDQzZDVhMjY2NDZmODAzMzBiMWRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkZDk4NGFlMDZiZTQxZTk4NmY2MzUxYTdmZjhmNDBhID0gJChgPGRpdiBpZD0iaHRtbF81ZGQ5ODRhZTA2YmU0MWU5ODZmNjM1MWE3ZmY4ZjQwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25lenAxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5leiBQZXJjZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZWQ4ZmVjZTZmODA0M2Q1YTI2NjQ2ZjgwMzMwYjFkZS5zZXRDb250ZW50KGh0bWxfNWRkOTg0YWUwNmJlNDFlOTg2ZjYzNTFhN2ZmOGY0MGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzUzMDMzOGNjOTRmNGExYTlhMGI3MWY5MWY3YzkzODkuYmluZFBvcHVwKHBvcHVwXzFlZDhmZWNlNmY4MDQzZDVhMjY2NDZmODAzMzBiMWRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MGZlOWIxNTQ3NjQ0NGYzYTJkYjc5NWU3NGVjMjViNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjMzMzMzMzMzMzMsIDE0Mi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDliMTIzZWQxMjIwNGYyYWEyNDk1MTgwODczNThkODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2NmNGI3ZTM5ZTMyNGRjMjk5ODk4ZDAxMDQzMjIyYzUgPSAkKGA8ZGl2IGlkPSJodG1sX2NjZjRiN2UzOWUzMjRkYzI5OTg5OGQwMTA0MzIyMmM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZ2lseTEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tml2a2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDliMTIzZWQxMjIwNGYyYWEyNDk1MTgwODczNThkODkuc2V0Q29udGVudChodG1sX2NjZjRiN2UzOWUzMjRkYzI5OTg5OGQwMTA0MzIyMmM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwZmU5YjE1NDc2NDQ0ZjNhMmRiNzk1ZTc0ZWMyNWI0LmJpbmRQb3B1cChwb3B1cF8wOWIxMjNlZDEyMjA0ZjJhYTI0OTUxODA4NzM1OGQ4OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGIxZDMwZTI5MzNkNGU0ZDlmOTBiMzQ3YjE1Mzc2OGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS42NjY2NjY2NjY3MDAwMDEsIDEwMS42NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzA2N2U4ZGY0OTc0ZGIyYjg0OGUyM2Y5ZjE3MGM0NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjA0NjM5ZmU1MDM0ODdhODA2MjBjYmI1ZTIwMDM2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzIwNDYzOWZlNTAzNDg3YTgwNjIwY2JiNWUyMDAzNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk55YWggS3VyIChUaGEgUG9uZyk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzMDY3ZThkZjQ5NzRkYjJiODQ4ZTIzZjlmMTcwYzQ0LnNldENvbnRlbnQoaHRtbF83MjA0NjM5ZmU1MDM0ODdhODA2MjBjYmI1ZTIwMDM2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YjFkMzBlMjkzM2Q0ZTRkOWY5MGIzNDdiMTUzNzY4Yy5iaW5kUG9wdXAocG9wdXBfMjMwNjdlOGRmNDk3NGRiMmI4NDhlMjNmOWYxNzBjNDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5ZmYyZDJiODg0NTQ3NTBhZGMwZTIwZjk0YmE1ZmJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuNzUsIC03MS43NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiNDUwZTBkZDBiNjQ5MjE5NGE0NDUwY2E1MGMzMzNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjYWU2MWY1MzQzNzRmNjg5ZjZhZjQ3MTQyYTg4MTNlID0gJChgPGRpdiBpZD0iaHRtbF8zY2FlNjFmNTM0Mzc0ZjY4OWY2YWY0NzE0MmE4ODEzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL29jYWkxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk9jYWluYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjQ1MGUwZGQwYjY0OTIxOTRhNDQ1MGNhNTBjMzMzZC5zZXRDb250ZW50KGh0bWxfM2NhZTYxZjUzNDM3NGY2ODlmNmFmNDcxNDJhODgxM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDlmZjJkMmI4ODQ1NDc1MGFkYzBlMjBmOTRiYTVmYmIuYmluZFBvcHVwKHBvcHVwX2JiNDUwZTBkZDBiNjQ5MjE5NGE0NDUwY2E1MGMzMzNkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDQwZTRmNDVjZjY0NjQ0ODA5YTI1ZjU1MjA1ZTUxZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuMCwgNDIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmOTAyYWUwYTkwZjQwMmU5YzFlZTNiMzlhNTFlNWRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5NjcyOTg2YmM0MDQ2OGNhZWNkNTc0MzE3OTNiYzgxID0gJChgPGRpdiBpZD0iaHRtbF9lOTY3Mjk4NmJjNDA0NjhjYWVjZDU3NDMxNzkzYmM4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T3JvbW8gKEhhcmFyKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGY5MDJhZTBhOTBmNDAyZTljMWVlM2IzOWE1MWU1ZGMuc2V0Q29udGVudChodG1sX2U5NjcyOTg2YmM0MDQ2OGNhZWNkNTc0MzE3OTNiYzgxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBkNDBlNGY0NWNmNjQ2NDQ4MDlhMjVmNTUyMDVlNTFlLmJpbmRQb3B1cChwb3B1cF8wZjkwMmFlMGE5MGY0MDJlOWMxZWUzYjM5YTUxZTVkYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTNhMmQ0ZGI1ZWQxNGYwZmE0OTRjMjQ4NDBiZmUwYmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy4wLCA2Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzVjZmMwNDcyM2U4NDlhNTlhODdkZmEyOGIzMDQzYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjM2YmNmNzNiYzY0NDQ0NmIyOTc5OWVhOTE4NDU1YzMgPSAkKGA8ZGl2IGlkPSJodG1sXzIzNmJjZjczYmM2NDQ0NDZiMjk3OTllYTkxODQ1NWMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGFzaDEyNjkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGFzaHRvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1Y2ZjMDQ3MjNlODQ5YTU5YTg3ZGZhMjhiMzA0M2M0LnNldENvbnRlbnQoaHRtbF8yMzZiY2Y3M2JjNjQ0NDQ2YjI5Nzk5ZWE5MTg0NTVjMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85M2EyZDRkYjVlZDE0ZjBmYTQ5NGMyNDg0MGJmZTBiZC5iaW5kUG9wdXAocG9wdXBfYzVjZmMwNDcyM2U4NDlhNTlhODdkZmEyOGIzMDQzYzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0N2FjMjgxYmUyYzRkYjlhMThhMDU0NDE4MjI3MWE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMCwgLTEyMi41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzExOGEzZGU2NWRhNDJiZjhjMzVjMjdmYmJhNzdiMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTJhZjA1MjQxMjUxNGIxYWI4ZWFhY2RmNmY0ZjdmNDQgPSAkKGA8ZGl2IGlkPSJodG1sXzUyYWYwNTI0MTI1MTRiMWFiOGVhYWNkZjZmNGY3ZjQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qb21vIChTb3V0aGVhc3Rlcm4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MTE4YTNkZTY1ZGE0MmJmOGMzNWMyN2ZiYmE3N2IxMy5zZXRDb250ZW50KGh0bWxfNTJhZjA1MjQxMjUxNGIxYWI4ZWFhY2RmNmY0ZjdmNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjQ3YWMyODFiZTJjNGRiOWExOGEwNTQ0MTgyMjcxYTYuYmluZFBvcHVwKHBvcHVwXzcxMThhM2RlNjVkYTQyYmY4YzM1YzI3ZmJiYTc3YjEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTZhYzJjODc0OTI0YzA0YTNiNzUzNmZjZDRlNTIwZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE5LjUsIC0xMDEuNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWUwZDRhMGNkNTA5NDJhYjk4MWM4YzQ2ODA5YTQyNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWJmMzhhNGY0MDFmNGE1Y2ExYzBkZDg2NWQ1Zjc0ZWEgPSAkKGA8ZGl2IGlkPSJodG1sXzliZjM4YTRmNDAxZjRhNWNhMWMwZGQ4NjVkNWY3NGVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QdXLDqXBlY2hhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZTBkNGEwY2Q1MDk0MmFiOTgxYzhjNDY4MDlhNDI2ZC5zZXRDb250ZW50KGh0bWxfOWJmMzhhNGY0MDFmNGE1Y2ExYzBkZDg2NWQ1Zjc0ZWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmE2YWMyYzg3NDkyNGMwNGEzYjc1MzZmY2Q0ZTUyMGUuYmluZFBvcHVwKHBvcHVwXzFlMGQ0YTBjZDUwOTQyYWI5ODFjOGM0NjgwOWE0MjZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDI5ZGFkODYyMTA0MzRmYjdkMmZkOTYwMzNiNDA4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy41LCAtNjYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmMTBlMThkNjdhODQyZTU4MTRjMGFiOTVlMTg0MmQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkYjJjNzE4YWI5ODQyODg4YWExYzI2NjI5OTkzNjhmID0gJChgPGRpdiBpZD0iaHRtbF9jZGIyYzcxOGFiOTg0Mjg4OGFhMWMyNjYyOTk5MzY4ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UXVlY2h1YSAoQ29jaGFiYW1iYSk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmMTBlMThkNjdhODQyZTU4MTRjMGFiOTVlMTg0MmQ3LnNldENvbnRlbnQoaHRtbF9jZGIyYzcxOGFiOTg0Mjg4OGFhMWMyNjYyOTk5MzY4Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMDI5ZGFkODYyMTA0MzRmYjdkMmZkOTYwMzNiNDA4Ny5iaW5kUG9wdXAocG9wdXBfM2YxMGUxOGQ2N2E4NDJlNTgxNGMwYWI5NWUxODQyZDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyODczYzFhNzFhMTQxOTE5ZjI0MmQ1OWY5ZGQ3NzMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDcuOTE2NjY2NjY2NywgLTEyNC4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3YjYzN2YyZTFkODQ5MzE5OTcyOTQyODQ2N2UxZDZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JjNmExYTY1ZjhlZjQ0OGJhNDg0YzlhZTA2MDIxMzdhID0gJChgPGRpdiBpZD0iaHRtbF9iYzZhMWE2NWY4ZWY0NDhiYTQ4NGM5YWUwNjAyMTM3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3F1aWwxMjQwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlF1aWxldXRlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3YjYzN2YyZTFkODQ5MzE5OTcyOTQyODQ2N2UxZDZkLnNldENvbnRlbnQoaHRtbF9iYzZhMWE2NWY4ZWY0NDhiYTQ4NGM5YWUwNjAyMTM3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80Mjg3M2MxYTcxYTE0MTkxOWYyNDJkNTlmOWRkNzczMy5iaW5kUG9wdXAocG9wdXBfMzdiNjM3ZjJlMWQ4NDkzMTk5NzI5NDI4NDY3ZTFkNmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0NWZiM2ZlNjkxZjRkM2ZhMzgwZTgxMTRlMTdlNzFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuNDE2NjY2NjY2NjcsIC03MS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzRhNTk4NTQ0YmUyNDk3ZDk3NjliMmQ2OGFjYTg3NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzZiZWE3YjkyOTUzNDhlNWI2ZjJhMzYzZDE1NWYwZTMgPSAkKGA8ZGl2IGlkPSJodG1sX2M2YmVhN2I5Mjk1MzQ4ZTViNmYyYTM2M2QxNTVmMGUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcmVzaTEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UmVzw61nYXJvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0YTU5ODU0NGJlMjQ5N2Q5NzY5YjJkNjhhY2E4NzRhLnNldENvbnRlbnQoaHRtbF9jNmJlYTdiOTI5NTM0OGU1YjZmMmEzNjNkMTU1ZjBlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNDVmYjNmZTY5MWY0ZDNmYTM4MGU4MTE0ZTE3ZTcxYy5iaW5kUG9wdXAocG9wdXBfNzRhNTk4NTQ0YmUyNDk3ZDk3NjliMmQ2OGFjYTg3NGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzMmE1YWIwOWRhMTQ1ZWRhODZmYzE1OTNkMTJhNmJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTYuMCwgMzguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiNWFlOTlhZjBiNjRkY2JiMThiNTUyNmE4YWI3NDEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmYTIxZmJlZTc5YzQyOTNiODNkOTgwYzIyODM4NzA3ID0gJChgPGRpdiBpZD0iaHRtbF9hZmEyMWZiZWU3OWM0MjkzYjgzZDk4MGMyMjgzODcwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3J1c3MxMjYzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJ1c3NpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI1YWU5OWFmMGI2NGRjYmIxOGI1NTI2YThhYjc0MTIuc2V0Q29udGVudChodG1sX2FmYTIxZmJlZTc5YzQyOTNiODNkOTgwYzIyODM4NzA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzMmE1YWIwOWRhMTQ1ZWRhODZmYzE1OTNkMTJhNmJmLmJpbmRQb3B1cChwb3B1cF8xYjVhZTk5YWYwYjY0ZGNiYjE4YjU1MjZhOGFiNzQxMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjU2Mjc0YThkMDkyNGUwNTk2NjExNTUwNDhiNWU2MTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjAsIDE4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YTIzYmUzNjAzMGY0NWE4OTM0ZjRiMTNmNmQ0MmQ5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYjQ4ZDlmZDMwNjM0MTAzYTg2NjhhMzE5MWQwNzE5ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMGI0OGQ5ZmQzMDYzNDEwM2E4NjY4YTMxOTFkMDcxOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zYW5nMTMyOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TYW5nbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTIzYmUzNjAzMGY0NWE4OTM0ZjRiMTNmNmQ0MmQ5MS5zZXRDb250ZW50KGh0bWxfMGI0OGQ5ZmQzMDYzNDEwM2E4NjY4YTMxOTFkMDcxOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjU2Mjc0YThkMDkyNGUwNTk2NjExNTUwNDhiNWU2MTYuYmluZFBvcHVwKHBvcHVwXzZhMjNiZTM2MDMwZjQ1YTg5MzRmNGIxM2Y2ZDQyZDkxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjU5MWYyODFhNjA0Y2UwOWUwOTdmNWU2NGU4MDViOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMuMCwgMTAzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMmM2MWZhNjIwNjM0YjMxYjRmZWZmMjg3YzNkYWMxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOWFlODMwNWVhOWM0NWRmYjdiMDE2MWQwYWMyZDBlOSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjlhZTgzMDVlYTljNDVkZmI3YjAxNjFkMGFjMmQwZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zZW1lMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TZW1lbGFpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIyYzYxZmE2MjA2MzRiMzFiNGZlZmYyODdjM2RhYzE1LnNldENvbnRlbnQoaHRtbF8yOWFlODMwNWVhOWM0NWRmYjdiMDE2MWQwYWMyZDBlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYjU5MWYyODFhNjA0Y2UwOWUwOTdmNWU2NGU4MDViOC5iaW5kUG9wdXAocG9wdXBfMjJjNjFmYTYyMDYzNGIzMWI0ZmVmZjI4N2MzZGFjMTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiZjhjOGM1NzU2MDRkOWE5NGQ2ZTMyMmNiZjUyYmJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjcuMCwgLTEyNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2JkNjhlYmU2YWUzNDczM2FjN2U1MjQ0MzJjZjdiZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2RlOGQyNjNhMmM2NDQ5NzlmODRkZmVhNzg3OTQwZTIgPSAkKGA8ZGl2IGlkPSJodG1sXzNkZThkMjYzYTJjNjQ0OTc5Zjg0ZGZlYTc4Nzk0MGUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2xhdjEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2xhdmU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2JkNjhlYmU2YWUzNDczM2FjN2U1MjQ0MzJjZjdiZDIuc2V0Q29udGVudChodG1sXzNkZThkMjYzYTJjNjQ0OTc5Zjg0ZGZlYTc4Nzk0MGUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FiZjhjOGM1NzU2MDRkOWE5NGQ2ZTMyMmNiZjUyYmJiLmJpbmRQb3B1cChwb3B1cF83YmQ2OGViZTZhZTM0NzMzYWM3ZTUyNDQzMmNmN2JkMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWQ2YzhhZDM4ODc1NGZlNDg4YTFjOWQ1ODJlMmRhYTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi41LCA1NC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzhjMzE4MjE5NzdlNDJhOTg0ODE2NTljNjU0ZjFlZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2JmNjA2Y2M4OGU1NDE3NjhjMjZiNjIxODY0ZjQ5MjUgPSAkKGA8ZGl2IGlkPSJodG1sX2NiZjYwNmNjODhlNTQxNzY4YzI2YjYyMTg2NGY0OTI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc29xbzEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U29xb3RyaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOGMzMTgyMTk3N2U0MmE5ODQ4MTY1OWM2NTRmMWVmNS5zZXRDb250ZW50KGh0bWxfY2JmNjA2Y2M4OGU1NDE3NjhjMjZiNjIxODY0ZjQ5MjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWQ2YzhhZDM4ODc1NGZlNDg4YTFjOWQ1ODJlMmRhYTguYmluZFBvcHVwKHBvcHVwX2M4YzMxODIxOTc3ZTQyYTk4NDgxNjU5YzY1NGYxZWY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Njk0ZTRjMTg0Mzg0NGE5YThkODY5MDZkOTM1M2JiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjUsIDEwOC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTI3ZGY3NzI0ZjdkNDI2YWFkMzEwYmIyYTY4ZWZmNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2RmMGQ0NjhlMmQ4NGYwZmE2ZDc0NTdmNTBkNDZkOWMgPSAkKGA8ZGl2IGlkPSJodG1sXzNkZjBkNDY4ZTJkODRmMGZhNmQ3NDU3ZjUwZDQ2ZDljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3JlZTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3JlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyN2RmNzcyNGY3ZDQyNmFhZDMxMGJiMmE2OGVmZjU5LnNldENvbnRlbnQoaHRtbF8zZGYwZDQ2OGUyZDg0ZjBmYTZkNzQ1N2Y1MGQ0NmQ5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85Njk0ZTRjMTg0Mzg0NGE5YThkODY5MDZkOTM1M2JiNy5iaW5kUG9wdXAocG9wdXBfNTI3ZGY3NzI0ZjdkNDI2YWFkMzEwYmIyYTY4ZWZmNTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwZWQ4YmI4MmE0ZjQ0YmRhZDNlOWJmOTllZjZlMTk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuNSwgMzkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlMmVhYWVmMWExNTRlYjNiYjA1OGIwOTQ5YjUwMTAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4MzAzOWJhMTQ5ZTQ0YjQ4MjZmMmYzODRkMTQyNzI0ID0gJChgPGRpdiBpZD0iaHRtbF83ODMwMzliYTE0OWU0NGI0ODI2ZjJmMzg0ZDE0MjcyNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N3YWgxMjUzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlN3YWhpbGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWUyZWFhZWYxYTE1NGViM2JiMDU4YjA5NDliNTAxMDIuc2V0Q29udGVudChodG1sXzc4MzAzOWJhMTQ5ZTQ0YjQ4MjZmMmYzODRkMTQyNzI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwZWQ4YmI4MmE0ZjQ0YmRhZDNlOWJmOTllZjZlMTk4LmJpbmRQb3B1cChwb3B1cF9hZTJlYWFlZjFhMTU0ZWIzYmIwNThiMDk0OWI1MDEwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWJjZjliMjJjN2E1NGNiNWEwM2E1YTI0NzVhNzcwN2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjAsIDEwLjA4MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zM2ZjYWQyZTE0ZjI0NWIzOTE5MDkyZWY5NTdiNGUzMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOGQzOTRlMGY1ZWE0NTc2OTVmZmY5YzkwOGIxYjM2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjhkMzk0ZTBmNWVhNDU3Njk1ZmZmOWM5MDhiMWIzNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90YXJvMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UYXJvazwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zM2ZjYWQyZTE0ZjI0NWIzOTE5MDkyZWY5NTdiNGUzMC5zZXRDb250ZW50KGh0bWxfZjhkMzk0ZTBmNWVhNDU3Njk1ZmZmOWM5MDhiMWIzNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWJjZjliMjJjN2E1NGNiNWEwM2E1YTI0NzVhNzcwN2IuYmluZFBvcHVwKHBvcHVwXzMzZmNhZDJlMTRmMjQ1YjM5MTkwOTJlZjk1N2I0ZTMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZTk1OTgzMGZlNWQ0MmQwYTA1OGU5YTAwYjBiOTljMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00OC4wLCAtNjguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4YzNjNTMwMTUxNjRhYmJhOWZmNmY2NDk1M2NjMTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkNDAxNmI4MWI4NTQxYzE5NmQxNjQ0NmJiZmZhZGI4ID0gJChgPGRpdiBpZD0iaHRtbF83ZDQwMTZiODFiODU0MWMxOTZkMTY0NDZiYmZmYWRiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RlaHUxMjQyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRlaHVlbGNoZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOGMzYzUzMDE1MTY0YWJiYTlmZjZmNjQ5NTNjYzE3Mi5zZXRDb250ZW50KGh0bWxfN2Q0MDE2YjgxYjg1NDFjMTk2ZDE2NDQ2YmJmZmFkYjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmU5NTk4MzBmZTVkNDJkMGEwNThlOWEwMGIwYjk5YzAuYmluZFBvcHVwKHBvcHVwX2Q4YzNjNTMwMTUxNjRhYmJhOWZmNmY2NDk1M2NjMTcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OGY5NzQ2ODhmMzM0Nzg2OTk2ODgzYWZlNGE4YTBkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjAsIDc5LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OTk5MTFhODE2MDE0ZjIyOWE1MTQyOTgyZjE4ZjQwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZTAwNGI4ODhjYWI0MzQyYjgwZmE1MmQwNjIxYjAxYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmUwMDRiODg4Y2FiNDM0MmI4MGZhNTJkMDYyMWIwMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90ZWx1MTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UZWx1Z3U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjk5OTExYTgxNjAxNGYyMjlhNTE0Mjk4MmYxOGY0MGQuc2V0Q29udGVudChodG1sX2ZlMDA0Yjg4OGNhYjQzNDJiODBmYTUyZDA2MjFiMDFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU4Zjk3NDY4OGYzMzQ3ODY5OTY4ODNhZmU0YThhMGQxLmJpbmRQb3B1cChwb3B1cF82OTk5MTFhODE2MDE0ZjIyOWE1MTQyOTgyZjE4ZjQwZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGZjMDAxMWUyZTkzNDNhMTk0ODQyMmUwYzViMjg1NjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi41LCAzOC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmE1OGNhYmNjMmU4NGU3NThiODgwZWIzNzkyZTI3OGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDE5ZTE0YTVmMGMzNGU2ZWJlODJhMGZmODczMmMyNTQgPSAkKGA8ZGl2IGlkPSJodG1sXzAxOWUxNGE1ZjBjMzRlNmViZTgyYTBmZjg3MzJjMjU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaWdyw6k8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhNThjYWJjYzJlODRlNzU4Yjg4MGViMzc5MmUyNzhjLnNldENvbnRlbnQoaHRtbF8wMTllMTRhNWYwYzM0ZTZlYmU4MmEwZmY4NzMyYzI1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZmMwMDExZTJlOTM0M2ExOTQ4NDIyZTBjNWIyODU2Mi5iaW5kUG9wdXAocG9wdXBfNmE1OGNhYmNjMmU4NGU3NThiODgwZWIzNzkyZTI3OGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzNDZkM2I3YWNjYTQxMzJiM2IwMjcxZjRhMGE5MmYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuNSwgLTEwNS41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDVhMWQ0ZTdkYjcxNDcxYThiODEzMjQ1OWQyM2Q1NDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDEyMjk5M2UyNDZhNDAwZDk2NDA1NDUzMWNlMzI2MzkgPSAkKGA8ZGl2IGlkPSJodG1sXzQxMjI5OTNlMjQ2YTQwMGQ5NjQwNTQ1MzFjZTMyNjM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaXdhIChOb3J0aGVybik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1YTFkNGU3ZGI3MTQ3MWE4YjgxMzI0NTlkMjNkNTQ1LnNldENvbnRlbnQoaHRtbF80MTIyOTkzZTI0NmE0MDBkOTY0MDU0NTMxY2UzMjYzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MzQ2ZDNiN2FjY2E0MTMyYjNiMDI3MWY0YTBhOTJmMi5iaW5kUG9wdXAocG9wdXBfZDVhMWQ0ZTdkYjcxNDcxYThiODEzMjQ1OWQyM2Q1NDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkMjQ2NDQzMWQwNzRkZDNhNjM0NDlkZjBlYjQyY2ZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNSwgLTEyMi41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDM4OTMyODllMDM0NDcwNThkMWRmMzkyYTMyZWNlMDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGRiYzA3N2U3NmY1NGRiNWI4NTFmZTk3N2I5ZTg2YzUgPSAkKGA8ZGl2IGlkPSJodG1sX2RkYmMwNzdlNzZmNTRkYjViODUxZmU5NzdiOWU4NmM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvd2FwcDEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V2FwcG88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDM4OTMyODllMDM0NDcwNThkMWRmMzkyYTMyZWNlMDcuc2V0Q29udGVudChodG1sX2RkYmMwNzdlNzZmNTRkYjViODUxZmU5NzdiOWU4NmM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkMjQ2NDQzMWQwNzRkZDNhNjM0NDlkZjBlYjQyY2ZlLmJpbmRQb3B1cChwb3B1cF9kMzg5MzI4OWUwMzQ0NzA1OGQxZGYzOTJhMzJlY2UwNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTcyOTY2ZDcxMTcwNGE4Mjk4MGE4OTdjYTAwNDhjMGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS4wLCAtMTIyLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80N2YyNzI3YjgzOGY0ZTA2YTE0MDM5MTQ0ZWFjNTYwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZDZhZmFlOTc0N2Y0NjYyODU0YTI0MDU1MTU0N2Q5ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWQ2YWZhZTk3NDdmNDY2Mjg1NGEyNDA1NTE1NDdkOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93aW50MTI1OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XaW50dTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80N2YyNzI3YjgzOGY0ZTA2YTE0MDM5MTQ0ZWFjNTYwOS5zZXRDb250ZW50KGh0bWxfZWQ2YWZhZTk3NDdmNDY2Mjg1NGEyNDA1NTE1NDdkOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTcyOTY2ZDcxMTcwNGE4Mjk4MGE4OTdjYTAwNDhjMGMuYmluZFBvcHVwKHBvcHVwXzQ3ZjI3MjdiODM4ZjRlMDZhMTQwMzkxNDRlYWM1NjA5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTQzMGFhMzEyYWU0Y2RjYWUyZTBiZGYzZGZlNGYwYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjI1LCAtMTYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhZWUzOTE2YzYwMjRiMTNhYWQyZDU4ODE4NDkyMDQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2YmE3MTg1ZDk1OTQ1NzliNTA1ODNiM2FjM2VhNjc1ID0gJChgPGRpdiBpZD0iaHRtbF9kNmJhNzE4NWQ5NTk0NTc5YjUwNTgzYjNhYzNlYTY3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldvbG9mPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhZWUzOTE2YzYwMjRiMTNhYWQyZDU4ODE4NDkyMDQ4LnNldENvbnRlbnQoaHRtbF9kNmJhNzE4NWQ5NTk0NTc5YjUwNTgzYjNhYzNlYTY3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYTQzMGFhMzEyYWU0Y2RjYWUyZTBiZGYzZGZlNGYwYy5iaW5kUG9wdXAocG9wdXBfYWFlZTM5MTZjNjAyNGIxM2FhZDJkNTg4MTg0OTIwNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5NDg0OTIwZmM4NzQ0NDk4OTg2NGM4NmI1NDcwYWVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE2LjQxNjY2NjY2NjcsIDEzNy4xNjY2NjY2NjcwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2ZDE4NDc2YzcyZTRlMjdhY2MzMzMwMzI0MGViY2ZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhOTU1MTY2ZDg1YTRiNzA4YjQ2YjM4Y2IxNzY3YTgzID0gJChgPGRpdiBpZD0iaHRtbF8zYTk1NTE2NmQ4NWE0YjcwOGI0NmIzOGNiMTc2N2E4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3lhbnkxMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPllhbnl1d2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTZkMTg0NzZjNzJlNGUyN2FjYzMzMzAzMjQwZWJjZmQuc2V0Q29udGVudChodG1sXzNhOTU1MTY2ZDg1YTRiNzA4YjQ2YjM4Y2IxNzY3YTgzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg5NDg0OTIwZmM4NzQ0NDk4OTg2NGM4NmI1NDcwYWVhLmJpbmRQb3B1cChwb3B1cF85NmQxODQ3NmM3MmU0ZTI3YWNjMzMzMDMyNDBlYmNmZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmY4N2Q2NjhkYTc1NDkxZmE1M2RmMmVjZDU4MTRkMjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NS4wLCAtMTczLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyOGEwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZTliYmYwOTE1Y2U0NjFhOWVjMDJmNDJmMTNjNmQ2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTk0ODY5NjdiN2I0MWMxYWE3MGViNGNjYzVjODA5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDE5NDg2OTY3YjdiNDFjMWFhNzBlYjRjY2M1YzgwOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPll1cGlrIChTaWJlcmlhbik8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlOWJiZjA5MTVjZTQ2MWE5ZWMwMmY0MmYxM2M2ZDY1LnNldENvbnRlbnQoaHRtbF80MTk0ODY5NjdiN2I0MWMxYWE3MGViNGNjYzVjODA5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZjg3ZDY2OGRhNzU0OTFmYTUzZGYyZWNkNTgxNGQyNy5iaW5kUG9wdXAocG9wdXBfN2U5YmJmMDkxNWNlNDYxYTllYzAyZjQyZjEzYzZkNjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiN2NmYWZiNjNiMjQ0ODVhYzYxNzViYmY4Y2FmYjMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMzMzMzMzMzMzMywgLTEyNC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjhhMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTU0NTYwODc4MWQ5NDAxNDllNTg0MjdjODhjYzE5NDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzk4NDM0OGQzMmU4NDExYjgwOWFkZWUyYzM4N2Y2ZWQgPSAkKGA8ZGl2IGlkPSJodG1sXzc5ODQzNDhkMzJlODQxMWI4MDlhZGVlMmMzODdmNmVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVybzEyNDgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVyb2s8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTU0NTYwODc4MWQ5NDAxNDllNTg0MjdjODhjYzE5NDUuc2V0Q29udGVudChodG1sXzc5ODQzNDhkMzJlODQxMWI4MDlhZGVlMmMzODdmNmVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRiN2NmYWZiNjNiMjQ0ODVhYzYxNzViYmY4Y2FmYjMzLmJpbmRQb3B1cChwb3B1cF85NTQ1NjA4NzgxZDk0MDE0OWU1ODQyN2M4OGNjMTk0NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWQwMWNhN2VhMWIzNDc2MGE2OWYwNTJlZjMzNTJkM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzAuMCwgMzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzI4YTAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3Y2ZmMjM1OGE2ZTQ1MTJhN2I3ZDJhMzNjODdlMDdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhY2MxNmI4ZTRiMzRkOWU5OWFlYjg5ZGQ0OTk1ODJjID0gJChgPGRpdiBpZD0iaHRtbF9lYWNjMTZiOGU0YjM0ZDllOTlhZWI4OWRkNDk5NTgyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3p1bHUxMjQ4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlp1bHU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzdjZmYyMzU4YTZlNDUxMmE3YjdkMmEzM2M4N2UwN2Yuc2V0Q29udGVudChodG1sX2VhY2MxNmI4ZTRiMzRkOWU5OWFlYjg5ZGQ0OTk1ODJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VkMDFjYTdlYTFiMzQ3NjBhNjlmMDUyZWYzMzUyZDNkLmJpbmRQb3B1cChwb3B1cF8zN2NmZjIzNThhNmU0NTEyYTdiN2QyYTMzYzg3ZTA3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjA1MWUzMGFjZDQ4NGU3OWJiZmI3NTNiOWFkMjg2NDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjQuMCwgMjEuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4ZDNhMDExYzcwZDQ3ZGViZjE0NGVhYmIzOWI5NjJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4OGU3OTJkMGNmOTQ4MjI5M2ZhY2I4YTI0MDUwNjg2ID0gJChgPGRpdiBpZD0iaHRtbF9kODhlNzkyZDBjZjk0ODIyOTNmYWNiOGEyNDA1MDY4NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+IVjDs8O1PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOGQzYTAxMWM3MGQ0N2RlYmYxNDRlYWJiMzliOTYyYS5zZXRDb250ZW50KGh0bWxfZDg4ZTc5MmQwY2Y5NDgyMjkzZmFjYjhhMjQwNTA2ODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjA1MWUzMGFjZDQ4NGU3OWJiZmI3NTNiOWFkMjg2NDYuYmluZFBvcHVwKHBvcHVwXzI4ZDNhMDExYzcwZDQ3ZGViZjE0NGVhYmIzOWI5NjJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZjI5Y2RkZThiNmY0ZDAwYjMyZjdkZDFmZDFhMDYxNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOC45MTY2NjY2NjY3LCAyMS45MTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGUwZDlkODQ1ODNkNDllY2EyYTc3ODhlNDc5YmYwY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWYyZDljMmJjMTgyNDdhYWI0ZTAzMzlmZDc5YTdkYmUgPSAkKGA8ZGl2IGlkPSJodG1sXzVmMmQ5YzJiYzE4MjQ3YWFiNGUwMzM5ZmQ3OWE3ZGJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYW5paTEyNDYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Ly9Bbmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGUwZDlkODQ1ODNkNDllY2EyYTc3ODhlNDc5YmYwY2Euc2V0Q29udGVudChodG1sXzVmMmQ5YzJiYzE4MjQ3YWFiNGUwMzM5ZmQ3OWE3ZGJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmMjljZGRlOGI2ZjRkMDBiMzJmN2RkMWZkMWEwNjE1LmJpbmRQb3B1cChwb3B1cF9kZTBkOWQ4NDU4M2Q0OWVjYTJhNzc4OGU0NzliZjBjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzk5NDY2MGMzZmIzNGMxOWFjYmVlYmU2MzVkZjhlZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wODMzMzMzMzMzLCA0MS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWMxMzdjMzhjNzdkNDQxYmI4NjhiNTQ2ZjdkNGVmMWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWM3ZjM5ZmQ2Mzg4NDNmNGFmODQ3ZDNmNWRhN2JiNTEgPSAkKGA8ZGl2IGlkPSJodG1sX2VjN2YzOWZkNjM4ODQzZjRhZjg0N2QzZjVkYTdiYjUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BYmtoYXo8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjMTM3YzM4Yzc3ZDQ0MWJiODY4YjU0NmY3ZDRlZjFjLnNldENvbnRlbnQoaHRtbF9lYzdmMzlmZDYzODg0M2Y0YWY4NDdkM2Y1ZGE3YmI1MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOTk0NjYwYzNmYjM0YzE5YWNiZWViZTYzNWRmOGVkYy5iaW5kUG9wdXAocG9wdXBfZWMxMzdjMzhjNzdkNDQxYmI4NjhiNTQ2ZjdkNGVmMWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2MzE4ODAzMzI4ODQ0Njg5NDA3NTBkNmZiNWRhMDQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuOTE2NjY2NjY2NywgLTEwNy41ODMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MWM2OGQ4NGQ5Nzk0OWY0YjliYjcxZjYyNzNlNTA0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hY2IxOGY3NWY1YWY0YzU4OGZhNGI5MmE1Y2I0NDJjOCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWNiMThmNzVmNWFmNGM1ODhmYTRiOTJhNWNiNDQyYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hY29tMTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BY29tYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MWM2OGQ4NGQ5Nzk0OWY0YjliYjcxZjYyNzNlNTA0YS5zZXRDb250ZW50KGh0bWxfYWNiMThmNzVmNWFmNGM1ODhmYTRiOTJhNWNiNDQyYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTYzMTg4MDMzMjg4NDQ2ODk0MDc1MGQ2ZmI1ZGEwNDIuYmluZFBvcHVwKHBvcHVwXzgxYzY4ZDg0ZDk3OTQ5ZjRiOWJiNzFmNjI3M2U1MDRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOTE5MzBmMTAxODY0MDQ5OGYyODA5OTNhYTFhZTEzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjAsIDQ2LjgzMzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wODk5MDc5MWFjYmY0MGM2OGY2Y2IyODRiOGY3NWFkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjFmNDdlZjdjYmE0YjZhODRjZTViZDNmMThhMGZjNCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGYxZjQ3ZWY3Y2JhNGI2YTg0Y2U1YmQzZjE4YTBmYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hcmNoMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BcmNoaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wODk5MDc5MWFjYmY0MGM2OGY2Y2IyODRiOGY3NWFkYy5zZXRDb250ZW50KGh0bWxfZGYxZjQ3ZWY3Y2JhNGI2YTg0Y2U1YmQzZjE4YTBmYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzkxOTMwZjEwMTg2NDA0OThmMjgwOTkzYWExYWUxM2QuYmluZFBvcHVwKHBvcHVwXzA4OTkwNzkxYWNiZjQwYzY4ZjZjYjI4NGI4Zjc1YWRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mM2MwOWI5NGE0NjE0YzdmOTVjNTkyNWM3ZDBhNjUxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yNC4wLCAxMzYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkNjg0MDFhNWE2YjQxY2JhMTU4OGIwM2UzZmVhYTk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2YWJhZDVjNTNmMDQ0NjZhOGQwOTI2YjJmNzFhNmIzID0gJChgPGRpdiBpZD0iaHRtbF8wNmFiYWQ1YzUzZjA0NDY2YThkMDkyNmIyZjcxYTZiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJyZXJudGUgKE1wYXJudHdlKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmQ2ODQwMWE1YTZiNDFjYmExNTg4YjAzZTNmZWFhOTkuc2V0Q29udGVudChodG1sXzA2YWJhZDVjNTNmMDQ0NjZhOGQwOTI2YjJmNzFhNmIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YzYzA5Yjk0YTQ2MTRjN2Y5NWM1OTI1YzdkMGE2NTE4LmJpbmRQb3B1cChwb3B1cF82ZDY4NDAxYTVhNmI0MWNiYTE1ODhiMDNlM2ZlYWE5OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODk3ZGNlZTcyMjIxNGNhMjg3MTI3ZjZiZjAwMWQ2ZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi41LCA0Ni41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWVhNDhjMDVhMWZmNDYwOWE3NGY3ZTQ1ZGMxZjY4OGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTQ3NzBhMWRkZGFlNGNjMzgxYWQ5N2UwZWY1MjIxODIgPSAkKGA8ZGl2IGlkPSJodG1sXzk0NzcwYTFkZGRhZTRjYzM4MWFkOTdlMGVmNTIyMTgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYXZhcjEyNTYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QXZhcjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZWE0OGMwNWExZmY0NjA5YTc0ZjdlNDVkYzFmNjg4Zi5zZXRDb250ZW50KGh0bWxfOTQ3NzBhMWRkZGFlNGNjMzgxYWQ5N2UwZWY1MjIxODIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODk3ZGNlZTcyMjIxNGNhMjg3MTI3ZjZiZjAwMWQ2ZDcuYmluZFBvcHVwKHBvcHVwXzFlYTQ4YzA1YTFmZjQ2MDlhNzRmN2U0NWRjMWY2ODhmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YWM2ZDlhNGY1YTk0ZmQyOTgyOGRkZDZjZmEyMzljYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjUsIDc0LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYzgzODEyZjNkMzQ0Mzk5OTU4MTg2YWNlMmQwYjhjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MWE4ZGYxM2FhYTY0MzA2Yjg1MjNlNzUzOTNhMmFhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDFhOGRmMTNhYWE2NDMwNmI4NTIzZTc1MzkzYTJhYTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9idXJ1MTI5NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CdXJ1c2hhc2tpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjODM4MTJmM2QzNDQzOTk5NTgxODZhY2UyZDBiOGM0LnNldENvbnRlbnQoaHRtbF80MWE4ZGYxM2FhYTY0MzA2Yjg1MjNlNzUzOTNhMmFhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YWM2ZDlhNGY1YTk0ZmQyOTgyOGRkZDZjZmEyMzljYS5iaW5kUG9wdXAocG9wdXBfZGM4MzgxMmYzZDM0NDM5OTk1ODE4NmFjZTJkMGI4YzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5NzkwOWE0ZmI3NjQ3N2Y4NGZjNzViZjliYWVjYTgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgLTEwNi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjRlNGE4NjFkODMyNDcyODhhMTkzODg5YTE2YWRjYzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmViYmY3OTg0YWY2NDkzMThlNDE4Mjk2NjI0MTE5NDEgPSAkKGA8ZGl2IGlkPSJodG1sXzJlYmJmNzk4NGFmNjQ5MzE4ZTQxODI5NjYyNDExOTQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2hpcDEyNjEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2hpcGV3eWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0ZTRhODYxZDgzMjQ3Mjg4YTE5Mzg4OWExNmFkY2MyLnNldENvbnRlbnQoaHRtbF8yZWJiZjc5ODRhZjY0OTMxOGU0MTgyOTY2MjQxMTk0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOTc5MDlhNGZiNzY0NzdmODRmYzc1YmY5YmFlY2E4Mi5iaW5kUG9wdXAocG9wdXBfNjRlNGE4NjFkODMyNDcyODhhMTkzODg5YTE2YWRjYzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2OTY2YmQ4NjQ1YzQ0OTJhN2NhYjFhMmFmNzRlM2VjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNSwgLTEyNC4xNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZDUxYTgwNjgwZGE0MzM1YjU2YWM2Mzc1ZjljZTAwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MDdkMzlmYTI1NjE0NjNiOWM0ZGE0MjdjYmM1M2E1NSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDA3ZDM5ZmEyNTYxNDYzYjljNGRhNDI3Y2JjNTNhNTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvb3MgKEhhbmlzKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmQ1MWE4MDY4MGRhNDMzNWI1NmFjNjM3NWY5Y2UwMDguc2V0Q29udGVudChodG1sXzQwN2QzOWZhMjU2MTQ2M2I5YzRkYTQyN2NiYzUzYTU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc2OTY2YmQ4NjQ1YzQ0OTJhN2NhYjFhMmFmNzRlM2VjLmJpbmRQb3B1cChwb3B1cF8yZDUxYTgwNjgwZGE0MzM1YjU2YWM2Mzc1ZjljZTAwOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjEyMjY3NWMyYzA0NGMzOWExOTQ1ZTNjNmU4ZmIwZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi4zMzMzMzMzMzMzMywgNDAuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhOWYxNjMxYWZiNzRiMGE4NjJjMmRlNmY5ZTRiYThjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmZDJlOGY2ZDYyYjRmNjNiMWMxNDQwZjA2ZDVhODMyID0gJChgPGRpdiBpZD0iaHRtbF82ZmQyZThmNmQ2MmI0ZjYzYjFjMTQ0MGYwNmQ1YTgzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2RhaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkRhaGFsbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTlmMTYzMWFmYjc0YjBhODYyYzJkZTZmOWU0YmE4Yy5zZXRDb250ZW50KGh0bWxfNmZkMmU4ZjZkNjJiNGY2M2IxYzE0NDBmMDZkNWE4MzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjEyMjY3NWMyYzA0NGMzOWExOTQ1ZTNjNmU4ZmIwZWQuYmluZFBvcHVwKHBvcHVwXzRhOWYxNjMxYWZiNzRiMGE4NjJjMmRlNmY5ZTRiYThjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZjY3YWJiNTI3ZDA0MDliYWQ1OWYwZTFlMTBhNTU0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC41LCAyNC41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2FhMDZjMDQwNjJlNGUzYTljOWIwNDgyNDVjNGQ1NjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODJmMGExMGEwZDU2NGFmNGE4Mzg1ZDBiYzE5M2E2ZTAgPSAkKGA8ZGl2IGlkPSJodG1sXzgyZjBhMTBhMGQ1NjRhZjRhODM4NWQwYmMxOTNhNmUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZGV0aTEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RGV0aTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYWEwNmMwNDA2MmU0ZTNhOWM5YjA0ODI0NWM0ZDU2My5zZXRDb250ZW50KGh0bWxfODJmMGExMGEwZDU2NGFmNGE4Mzg1ZDBiYzE5M2E2ZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmY2N2FiYjUyN2QwNDA5YmFkNTlmMGUxZTEwYTU1NDYuYmluZFBvcHVwKHBvcHVwX2NhYTA2YzA0MDYyZTRlM2E5YzliMDQ4MjQ1YzRkNTYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZTc4MGJjNDNhNTQ0ZDE1OTFlY2QyZjJjYmZiY2Y1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuNTgzMzMzMzMzMzMwMDAxLCA5LjMzMzMzMzMzMzMzMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiMDE4Y2Y0OTdlYTRiMDZiMzY4MTc0M2NhNGY5NzE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4NjcyZmY0MmM1ODRmM2U5YjYzZmE4OGQ5ZTViY2MwID0gJChgPGRpdiBpZD0iaHRtbF9mODY3MmZmNDJjNTg0ZjNlOWI2M2ZhODhkOWU1YmNjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnllbTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWIwMThjZjQ5N2VhNGIwNmIzNjgxNzQzY2E0Zjk3MTYuc2V0Q29udGVudChodG1sX2Y4NjcyZmY0MmM1ODRmM2U5YjYzZmE4OGQ5ZTViY2MwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlNzgwYmM0M2E1NDRkMTU5MWVjZDJmMmNiZmJjZjU1LmJpbmRQb3B1cChwb3B1cF8xYjAxOGNmNDk3ZWE0YjA2YjM2ODE3NDNjYTRmOTcxNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODgwMjgxNTM5ZjcyNDRhOGJjMDZjNjJmMGVmNDU2MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy43NSwgMzUuMTY2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2NGM3YjY5YjM2OTQ2Yzk4MDNlYWI5NGUyNjNiZjFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllYzMyODcyMjk0MTQ0NjhiNjdkOTIxNzA4ZjViMjZkID0gJChgPGRpdiBpZD0iaHRtbF85ZWMzMjg3MjI5NDE0NDY4YjY3ZDkyMTcwOGY1YjI2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhZHoxMjQwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhZHphPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2NGM3YjY5YjM2OTQ2Yzk4MDNlYWI5NGUyNjNiZjFmLnNldENvbnRlbnQoaHRtbF85ZWMzMjg3MjI5NDE0NDY4YjY3ZDkyMTcwOGY1YjI2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ODAyODE1MzlmNzI0NGE4YmMwNmM2MmYwZWY0NTYwYS5iaW5kUG9wdXAocG9wdXBfMTY0YzdiNjliMzY5NDZjOTgwM2VhYjk0ZTI2M2JmMWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UxM2YzMDkzYmEwNTQ5MjdiOTY4ZGRmZWRlZDAyYmFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEzMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmQ4OGVkZTM2MzczNDJlM2ExMWRmOGRhMzRmNWE2OWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDRjZDM3ZDE4OGQ4NGRmYTk5NTBiNzI4YTIxYmJjYzAgPSAkKGA8ZGl2IGlkPSJodG1sXzQ0Y2QzN2QxODhkODRkZmE5OTUwYjcyOGEyMWJiY2MwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaGFpZDEyNDgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SGFpZGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQ4OGVkZTM2MzczNDJlM2ExMWRmOGRhMzRmNWE2OWUuc2V0Q29udGVudChodG1sXzQ0Y2QzN2QxODhkODRkZmE5OTUwYjcyOGEyMWJiY2MwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UxM2YzMDkzYmEwNTQ5MjdiOTY4ZGRmZWRlZDAyYmFlLmJpbmRQb3B1cChwb3B1cF9mZDg4ZWRlMzYzNzM0MmUzYTExZGY4ZGEzNGY1YTY5ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDBjNTU4NjYzZWFiNGEyZTg2Mjk3ZDA0ODQyYmFhZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS4wLCA3Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODk3Mjk2ODJiZmQxNDgwNGI1ZGU0YTkwZTY0ZmExNDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjBkMDAxYjI3Y2VjNDQxMzkyZjE4YWM0NjAxYWQ5NzUgPSAkKGA8ZGl2IGlkPSJodG1sX2IwZDAwMWIyN2NlYzQ0MTM5MmYxOGFjNDYwMWFkOTc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaGluZDEyNjkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SGluZGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODk3Mjk2ODJiZmQxNDgwNGI1ZGU0YTkwZTY0ZmExNDguc2V0Q29udGVudChodG1sX2IwZDAwMWIyN2NlYzQ0MTM5MmYxOGFjNDYwMWFkOTc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwYzU1ODY2M2VhYjRhMmU4NjI5N2QwNDg0MmJhYWY1LmJpbmRQb3B1cChwb3B1cF84OTcyOTY4MmJmZDE0ODA0YjVkZTRhOTBlNjRmYTE0OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzBhYThlYjQ0OWJiNDdlNTg4ZjkyNjczNzQ4MjA2ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyOC4wLCAxMDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2YWYwOWNiNGJlODQ5ZGE5ODZiYzc1ZTBmNTRhN2I0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhMjY3Njc5NDljMTQ5MDJhY2VlMTIzMDRkZWRkYzVlID0gJChgPGRpdiBpZD0iaHRtbF9jYTI2NzY3OTQ5YzE0OTAyYWNlZTEyMzA0ZGVkZGM1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2htb24xMjY0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhtb25nIE5qdWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzZhZjA5Y2I0YmU4NDlkYTk4NmJjNzVlMGY1NGE3YjQuc2V0Q29udGVudChodG1sX2NhMjY3Njc5NDljMTQ5MDJhY2VlMTIzMDRkZWRkYzVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwYWE4ZWI0NDliYjQ3ZTU4OGY5MjY3Mzc0ODIwNmUyLmJpbmRQb3B1cChwb3B1cF8zNmFmMDljYjRiZTg0OWRhOTg2YmM3NWUwZjU0YTdiNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjYwNWE2NzgzNDA2NGMzMjk2NDE5ZjE1ZjU4ZWE5ZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4xNjY2NjY2NjY3LCA0Ni4yNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVkMzFkODU2NjRkNjQ4NjU5MGQzYjE3OTMwYzlkNzQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczYTViZTFkOGFlNTQ4Y2JhYjVkMWQ2OTMyNGQyOGJjID0gJChgPGRpdiBpZD0iaHRtbF83M2E1YmUxZDhhZTU0OGNiYWI1ZDFkNjkzMjRkMjhiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2h1bnoxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkh1bnppYjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDMxZDg1NjY0ZDY0ODY1OTBkM2IxNzkzMGM5ZDc0Ni5zZXRDb250ZW50KGh0bWxfNzNhNWJlMWQ4YWU1NDhjYmFiNWQxZDY5MzI0ZDI4YmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjYwNWE2NzgzNDA2NGMzMjk2NDE5ZjE1ZjU4ZWE5ZjAuYmluZFBvcHVwKHBvcHVwXzVkMzFkODU2NjRkNjQ4NjU5MGQzYjE3OTMwYzlkNzQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjVjMzVlYWUwNTY0OTFmOWM3OGI4YWYwOTE0OGUyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC40MTY2NjY2NjY3LCAxNjYuNTgzMzMzMzMyOTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjQyY2E3MTE4NWE0MmM5OTExMjQzOGJkZDM1ZWI2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZDJhZDM3YTU0MTA0NzM3YjQ0ODQyOWRiMGZlYjM2MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmQyYWQzN2E1NDEwNDczN2I0NDg0MjlkYjBmZWIzNjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pYWFpMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JYWFpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyNDJjYTcxMTg1YTQyYzk5MTEyNDM4YmRkMzVlYjZlLnNldENvbnRlbnQoaHRtbF9mZDJhZDM3YTU0MTA0NzM3YjQ0ODQyOWRiMGZlYjM2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YjVjMzVlYWUwNTY0OTFmOWM3OGI4YWYwOTE0OGUyOS5iaW5kUG9wdXAocG9wdXBfYzI0MmNhNzExODVhNDJjOTkxMTI0MzhiZGQzNWViNmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkOGExOGYwYjZiOTQ1OGM5MGJiMTJjODhhYzQxNDUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMTY2NjY2NjY2NywgNDUuMDgzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0MGQ4YzAxYWU5NjRhYjZhMjE4MDQ3NzM2YjIyOWIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlOTFmMmU0Y2Y4NzQ4MTg4ZjZhZmQ1MWZjOGEyYzQxID0gJChgPGRpdiBpZD0iaHRtbF82ZTkxZjJlNGNmODc0ODE4OGY2YWZkNTFmYzhhMmM0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2luZ3UxMjQwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkluZ3VzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDBkOGMwMWFlOTY0YWI2YTIxODA0NzczNmIyMjliMS5zZXRDb250ZW50KGh0bWxfNmU5MWYyZTRjZjg3NDgxODhmNmFmZDUxZmM4YTJjNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmQ4YTE4ZjBiNmI5NDU4YzkwYmIxMmM4OGFjNDE0NTEuYmluZFBvcHVwKHBvcHVwX2Y0MGQ4YzAxYWU5NjRhYjZhMjE4MDQ3NzM2YjIyOWIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MzFjZGMwMGEzZWM0MGUxODU0NjAzMWVjZDJmNTRmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU1LjAsIC04LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzQzOGE4NTczZTY0NGMyODY4NTE2NTA4OGFhY2EzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2QyMTliN2UwNTg0NDJhYTE0ZTdiYWU2NDQ4ZDhiNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDdkMjE5YjdlMDU4NDQyYWExNGU3YmFlNjQ0OGQ4YjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklyaXNoIChEb25lZ2FsKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzc0MzhhODU3M2U2NDRjMjg2ODUxNjUwODhhYWNhMzkuc2V0Q29udGVudChodG1sXzA3ZDIxOWI3ZTA1ODQ0MmFhMTRlN2JhZTY0NDhkOGI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzMWNkYzAwYTNlYzQwZTE4NTQ2MDMxZWNkMmY1NGYxLmJpbmRQb3B1cChwb3B1cF9jNzQzOGE4NTczZTY0NGMyODY4NTE2NTA4OGFhY2EzOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmM5ZGY1ZDA5MDliNDg1M2JjYThkZTVkOWExOGYxMWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuMCwgLTc2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODI2NzhlOTYyNDQ0OTM0OGE5OTUwZDZhMWY4MTQwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MzhjZmNlZjU3OGQ0MmFkODRjYmExZTRhYzA2YjgxOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzM4Y2ZjZWY1NzhkNDJhZDg0Y2JhMWU0YWMwNmI4MTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9qYXFhMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KYXFhcnU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzgyNjc4ZTk2MjQ0NDkzNDhhOTk1MGQ2YTFmODE0MDMuc2V0Q29udGVudChodG1sXzczOGNmY2VmNTc4ZDQyYWQ4NGNiYTFlNGFjMDZiODE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZjOWRmNWQwOTA5YjQ4NTNiY2E4ZGU1ZDlhMThmMTFhLmJpbmRQb3B1cChwb3B1cF83ODI2NzhlOTYyNDQ0OTM0OGE5OTUwZDZhMWY4MTQwMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjE4YzcyMjdmOTdhNDQyNTkzODQ5MjdmNmFiOTFjOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4xNjY2NjY2NjY3MDAwMDEsIDEwNy44MzMzMzMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YzYxMjE1NTA3OTY0ODI3OWFkYzRlMzUxZGRjZDQyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YTg0NTk2MjQ3OWY0MTViYmY3NTM5MzhmM2Y0YmUwNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGE4NDU5NjI0NzlmNDE1YmJmNzUzOTM4ZjNmNGJlMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9qZWhoMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KZWg8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM2MTIxNTUwNzk2NDgyNzlhZGM0ZTM1MWRkY2Q0MjIuc2V0Q29udGVudChodG1sXzRhODQ1OTYyNDc5ZjQxNWJiZjc1MzkzOGYzZjRiZTA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IxOGM3MjI3Zjk3YTQ0MjU5Mzg0OTI3ZjZhYjkxYzhlLmJpbmRQb3B1cChwb3B1cF85YzYxMjE1NTA3OTY0ODI3OWFkYzRlMzUxZGRjZDQyMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWEzNjgxYjc4MDUyNDY1MThiMzJkOWQ5NmQxYTZmODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuMCwgMjEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzOTA4NGZjOWY2YTRjYjQ5NDY0NTY2N2I5NjE4NzJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmMjkyZDA5ZjA0OTRmYTA5NWI0ZGU1MGMyMjA3YmQ0ID0gJChgPGRpdiBpZD0iaHRtbF84ZjI5MmQwOWYwNDk0ZmEwOTViNGRlNTBjMjIwN2JkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SnV8J2hvYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzOTA4NGZjOWY2YTRjYjQ5NDY0NTY2N2I5NjE4NzJlLnNldENvbnRlbnQoaHRtbF84ZjI5MmQwOWYwNDk0ZmEwOTViNGRlNTBjMjIwN2JkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YTM2ODFiNzgwNTI0NjUxOGIzMmQ5ZDk2ZDFhNmY4Ni5iaW5kUG9wdXAocG9wdXBfNjM5MDg0ZmM5ZjZhNGNiNDk0NjQ1NjY3Yjk2MTg3MmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlYWFiOTI5NGFkZjRhNDRhYmI3M2Q5ZDA1YTFkNzU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNSwgNDMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5ZDA2MWU2ZDE0NjQyODE4MzQ4ZWU1ZWY5Y2I3ZjZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmMzgxY2Y5YzQ4ODQ1Njg5NTA0OTA2NGQ0YjRmNzU1ID0gJChgPGRpdiBpZD0iaHRtbF9mZjM4MWNmOWM0ODg0NTY4OTUwNDkwNjRkNGI0Zjc1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOWQwNjFlNmQxNDY0MjgxODM0OGVlNWVmOWNiN2Y2ZC5zZXRDb250ZW50KGh0bWxfZmYzODFjZjljNDg4NDU2ODk1MDQ5MDY0ZDRiNGY3NTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2VhYWI5Mjk0YWRmNGE0NGFiYjczZDlkMDVhMWQ3NTkuYmluZFBvcHVwKHBvcHVwXzA5ZDA2MWU2ZDE0NjQyODE4MzQ4ZWU1ZWY5Y2I3ZjZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNDYxZTQ4MTZiNDc0MzNkYTc0ZDQ5MDJjZGY3ZmU0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjUsIDcyLjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NTE1YTg0YTVmODY0ODFmYjUzN2FjOWI4YTAxMGE0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZDg0NTQ5OTdlZDA0ZmM4ODQ1YjJiYWVhMDBlZjQ2NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGQ4NDU0OTk3ZWQwNGZjODg0NWIyYmFlYTAwZWY0NjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWxhMTM3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWxhbWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTUxNWE4NGE1Zjg2NDgxZmI1MzdhYzliOGEwMTBhNDMuc2V0Q29udGVudChodG1sX2RkODQ1NDk5N2VkMDRmYzg4NDViMmJhZWEwMGVmNDY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA0NjFlNDgxNmI0NzQzM2RhNzRkNDkwMmNkZjdmZTQ1LmJpbmRQb3B1cChwb3B1cF85NTE1YTg0YTVmODY0ODFmYjUzN2FjOWI4YTAxMGE0MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTg0Yzc3N2E1NmVkNDA1MjgzMjFiMGU3NjJlNDY1YmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS4wLCAtMTI3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OTBmZmE2YzYzMzM0ODY1YWEyZmExNzU1YTAxYWRmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjA4YzlhYTc1YzE0ODFiYWZjNWY4OTA4N2U0NjgxMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTYwOGM5YWE3NWMxNDgxYmFmYzVmODkwODdlNDY4MTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkt3YWt3J2FsYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzkwZmZhNmM2MzMzNDg2NWFhMmZhMTc1NWEwMWFkZjEuc2V0Q29udGVudChodG1sX2U2MDhjOWFhNzVjMTQ4MWJhZmM1Zjg5MDg3ZTQ2ODEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU4NGM3NzdhNTZlZDQwNTI4MzIxYjBlNzYyZTQ2NWJmLmJpbmRQb3B1cChwb3B1cF83OTBmZmE2YzYzMzM0ODY1YWEyZmExNzU1YTAxYWRmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTc1YmE5ODZmNjM2NDhmNGJlMzA5N2JmNjRmMTBlOGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4xNjY2NjY2NjY3LCA0Ny4xNjY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDI3YmJhNWZhYmE3NGEyODljNzZiYTZhZTZlMTFiODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTUwYzExZTkzNGZhNGEwMDhjYTQ3ODJjMjdlMTEyMTcgPSAkKGA8ZGl2IGlkPSJodG1sX2U1MGMxMWU5MzRmYTRhMDA4Y2E0NzgyYzI3ZTExMjE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrazEyNTIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyN2JiYTVmYWJhNzRhMjg5Yzc2YmE2YWU2ZTExYjgxLnNldENvbnRlbnQoaHRtbF9lNTBjMTFlOTM0ZmE0YTAwOGNhNDc4MmMyN2UxMTIxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NzViYTk4NmY2MzY0OGY0YmUzMDk3YmY2NGYxMGU4Yi5iaW5kUG9wdXAocG9wdXBfMDI3YmJhNWZhYmE3NGEyODljNzZiYTZhZTZlMTFiODEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkyMGNiNGNjY2FiNDQyMzliNmEzMGYyNTdmODVjYjBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNjY2NjY2NjY2NywgNDcuODMzMzMzMzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjZjgyM2ZlMWQyNDQ2YmRiMWJjNzBmMzUxNTE0YmZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhNzA3NWI3M2IxYjQxMTc4NDg2Y2YzYTVmOGQ1Y2MwID0gJChgPGRpdiBpZD0iaHRtbF80YTcwNzViNzNiMWI0MTE3ODQ4NmNmM2E1ZjhkNWNjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xlemcxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxlemdpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmNmODIzZmUxZDI0NDZiZGIxYmM3MGYzNTE1MTRiZmMuc2V0Q29udGVudChodG1sXzRhNzA3NWI3M2IxYjQxMTc4NDg2Y2YzYTVmOGQ1Y2MwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyMGNiNGNjY2FiNDQyMzliNmEzMGYyNTdmODVjYjBiLmJpbmRQb3B1cChwb3B1cF82Y2Y4MjNmZTFkMjQ0NmJkYjFiYzcwZjM1MTUxNGJmYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmY1YTI3MmIxNmQ4NDQxNDhkYWQ4NzIwNWQzMjgyOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1NS4wLCAyNC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjE3NjA3N2E1OGEyNDRhYjkxMTUwNzk3OWEyZWQxZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI3YzI5NTY1OGVkNDYxMDkxMzVmNGYzN2IxNjJhYmYgPSAkKGA8ZGl2IGlkPSJodG1sXzkyN2MyOTU2NThlZDQ2MTA5MTM1ZjRmMzdiMTYyYWJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGl0aDEyNTEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGl0aHVhbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTc2MDc3YTU4YTI0NGFiOTExNTA3OTc5YTJlZDFkMi5zZXRDb250ZW50KGh0bWxfOTI3YzI5NTY1OGVkNDYxMDkxMzVmNGYzN2IxNjJhYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmY1YTI3MmIxNmQ4NDQxNDhkYWQ4NzIwNWQzMjgyOTkuYmluZFBvcHVwKHBvcHVwXzYxNzYwNzdhNThhMjQ0YWI5MTE1MDc5NzlhMmVkMWQyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzkzMTU2Njc3MzI0MDUxOTVhNDBmNzczYTY2ZjA3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjAsIC0xMjIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdhOTgyYjIyOWY2YzQ0ZTBiNDJlMDA1YmI2NTkzNmYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmMzA4NDBlY2Q4MDQ2YzFiYjY4MTk0NmJiMWEyNmEzID0gJChgPGRpdiBpZD0iaHRtbF81ZjMwODQwZWNkODA0NmMxYmI2ODE5NDZiYjFhMjZhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+THVzaG9vdHNlZWQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhOTgyYjIyOWY2YzQ0ZTBiNDJlMDA1YmI2NTkzNmYwLnNldENvbnRlbnQoaHRtbF81ZjMwODQwZWNkODA0NmMxYmI2ODE5NDZiYjFhMjZhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNzkzMTU2Njc3MzI0MDUxOTVhNDBmNzczYTY2ZjA3Ni5iaW5kUG9wdXAocG9wdXBfN2E5ODJiMjI5ZjZjNDRlMGI0MmUwMDViYjY1OTM2ZjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0MzUyMzA3YTQ5MzQxNGRhNTczZmQ0N2Y4MjBiZjRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNDE2NjY2NjY2NywgLTk5LjkxNjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZjUwY2U4MTIzMGU0ZTk4OGRkZDk2NzQ5MTlkNTdmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZDA1Zjg0MDVhMjc0NzFkOWM1ZTFjYzM4MmQ4ZTJjOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGQwNWY4NDA1YTI3NDcxZDljNWUxY2MzODJkOGUyYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXphMTI5MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXphaHVhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmNTBjZTgxMjMwZTRlOTg4ZGRkOTY3NDkxOWQ1N2Y1LnNldENvbnRlbnQoaHRtbF9kZDA1Zjg0MDVhMjc0NzFkOWM1ZTFjYzM4MmQ4ZTJjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NDM1MjMwN2E0OTM0MTRkYTU3M2ZkNDdmODIwYmY0Yy5iaW5kUG9wdXAocG9wdXBfOWY1MGNlODEyMzBlNGU5ODhkZGQ5Njc0OTE5ZDU3ZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2MGI2Y2YzMjA3YjQzYWNiOGM3YzNjNGI4YWI1MWQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjcuNSwgMTAwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjgxN2VkNmMwN2Q0MDJlYjBhNTg0NWE1NjkzZWZiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDM5MmVkOTU5YzQ0Zjk3YjgzZjA3MWJjY2I0NDQxMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDQzOTJlZDk1OWM0NGY5N2I4M2YwNzFiY2NiNDQ0MTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uYXhpMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OYXhpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2ODE3ZWQ2YzA3ZDQwMmViMGE1ODQ1YTU2OTNlZmJlLnNldENvbnRlbnQoaHRtbF8wNDM5MmVkOTU5YzQ0Zjk3YjgzZjA3MWJjY2I0NDQxMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NjBiNmNmMzIwN2I0M2FjYjhjN2MzYzRiOGFiNTFkOS5iaW5kUG9wdXAocG9wdXBfMTY4MTdlZDZjMDdkNDAyZWIwYTU4NDVhNTY5M2VmYmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5MTU4OWFiZjkxODQwMTQ5ZTEwZDIwN2MxNTVhYjMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMS4zMzMzMzMzMzMzMywgMzAuMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjMwMzRkYmNhNmU0YWNkODBkOTg3N2E5NjQ1NDNmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGU2MWJiNmY5NGE0N2YzYjU5MTNiYjlkMWEyNzhlMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjhlNjFiYjZmOTRhNDdmM2I1OTEzYmI5ZDFhMjc4ZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uZ2l0MTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OZ2l0aTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjMwMzRkYmNhNmU0YWNkODBkOTg3N2E5NjQ1NDNmNi5zZXRDb250ZW50KGh0bWxfNjhlNjFiYjZmOTRhNDdmM2I1OTEzYmI5ZDFhMjc4ZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjkxNTg5YWJmOTE4NDAxNDllMTBkMjA3YzE1NWFiMzMuYmluZFBvcHVwKHBvcHVwXzBiMzAzNGRiY2E2ZTRhY2Q4MGQ5ODc3YTk2NDU0M2Y2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xN2Y2NDZmYzhjOTY0MWIyYTJkOGI1OWJkMWZjZmUyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjA4MzMzMzMzMzI5OTk5OSwgMTAuOTE2NjY2NjY2NzAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2M3MGExNTRiNTY3NDdhZDllOWVjYTY3Y2NkZWM1ZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGIwYzVjMGM1Nzk3NGJlOTllYmNmN2NhZmZjMmI2ODUgPSAkKGA8ZGl2IGlkPSJodG1sXzBiMGM1YzBjNTc5NzRiZTk5ZWJjZjdjYWZmYzJiNjg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbmdpejEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TmdpemltPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjNzBhMTU0YjU2NzQ3YWQ5ZTllY2E2N2NjZGVjNWZhLnNldENvbnRlbnQoaHRtbF8wYjBjNWMwYzU3OTc0YmU5OWViY2Y3Y2FmZmMyYjY4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xN2Y2NDZmYzhjOTY0MWIyYTJkOGI1OWJkMWZjZmUyMC5iaW5kUG9wdXAocG9wdXBfY2M3MGExNTRiNTY3NDdhZDllOWVjYTY3Y2NkZWM1ZmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjMTkxY2I4OGRmYzQxYTFiZTAxYTJhMzM3YzNhNDMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNjY2NjY2NjY2NywgLTEyNi42NjY2NjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNWI2ODg1OTMxNzI0Nzg4ODg4YmRiNDNiZTFjNzZjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTkwMDI3YmZlNjc0Y2VkODgzMWRlYzlhYTM1NmRlYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNWU5MDAyN2JmZTY3NGNlZDg4MzFkZWM5YWEzNTZkZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk51dWNoYWhudWx0aDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzViNjg4NTkzMTcyNDc4ODg4OGJkYjQzYmUxYzc2YzUuc2V0Q29udGVudChodG1sXzVlOTAwMjdiZmU2NzRjZWQ4ODMxZGVjOWFhMzU2ZGVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVjMTkxY2I4OGRmYzQxYTFiZTAxYTJhMzM3YzNhNDMzLmJpbmRQb3B1cChwb3B1cF9jNWI2ODg1OTMxNzI0Nzg4ODg4YmRiNDNiZTFjNzZjNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTVkMzhkZDEwZWIwNGMxNzlmODdiNjI2NzljODdkMTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMy4yNSwgOTkuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VmNjgwMmU1ZjUzZjQzM2Y4MDg0ODlkMGJjMTQ1MjRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllYzFhOTQ0NWZmZjQ1ZTc5NDVjOTU0YmM3NjMxZWViID0gJChgPGRpdiBpZD0iaHRtbF85ZWMxYTk0NDVmZmY0NWU3OTQ1Yzk1NGJjNzYzMWVlYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFyYXVrPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjY4MDJlNWY1M2Y0MzNmODA4NDg5ZDBiYzE0NTI0ZS5zZXRDb250ZW50KGh0bWxfOWVjMWE5NDQ1ZmZmNDVlNzk0NWM5NTRiYzc2MzFlZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTVkMzhkZDEwZWIwNGMxNzlmODdiNjI2NzljODdkMTAuYmluZFBvcHVwKHBvcHVwX2VmNjgwMmU1ZjUzZjQzM2Y4MDg0ODlkMGJjMTQ1MjRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzA2NmIwNDczYzI0OGI3OTYwYjFjOWE2MGYxNWU0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjAsIDIwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYTkyZTMyZTEzMTA0MWFlYmYxMTE0NWZjMTUzZTRmZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTNhMTE5NDdlMWM0Yjk1Yjc5Mjk2NWQ5MmZlZDBmNCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2UzYTExOTQ3ZTFjNGI5NWI3OTI5NjVkOTJmZWQwZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmE5MmUzMmUxMzEwNDFhZWJmMTExNDVmYzE1M2U0ZmUuc2V0Q29udGVudChodG1sXzdlM2ExMTk0N2UxYzRiOTViNzkyOTY1ZDkyZmVkMGY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y3MDY2YjA0NzNjMjQ4Yjc5NjBiMWM5YTYwZjE1ZTQ0LmJpbmRQb3B1cChwb3B1cF9iYTkyZTMyZTEzMTA0MWFlYmYxMTE0NWZjMTUzZTRmZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzIxNThlODVjZDJjNGNkYzhjMDNkODNlOWY3MTA1ZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjY2NjY2NjY2NjY3LCAtNzYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5OTk1Nzc0ZWMzZTQyZjVhOTI5MGYyODY1MzZhOGQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhZDQxMmYzZDc1YjQxZjU4NDgyMTkzYTJiMWZhMzI3ID0gJChgPGRpdiBpZD0iaHRtbF85YWQ0MTJmM2Q3NWI0MWY1ODQ4MjE5M2EyYjFmYTMyNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BhZXoxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlDDoWV6PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5OTk1Nzc0ZWMzZTQyZjVhOTI5MGYyODY1MzZhOGQwLnNldENvbnRlbnQoaHRtbF85YWQ0MTJmM2Q3NWI0MWY1ODQ4MjE5M2EyYjFmYTMyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMjE1OGU4NWNkMmM0Y2RjOGMwM2Q4M2U5ZjcxMDVkOS5iaW5kUG9wdXAocG9wdXBfMzk5OTU3NzRlYzNlNDJmNWE5MjkwZjI4NjUzNmE4ZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkNTVkMGU2MmM2MjQ3ZThhOTg0ODhjMmZjNWQ3OTVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNSwgNDcuNDE2NjY2NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5NTBjMmFiMmMyYjQzY2E4YTBjZmNmZDk1ODViNTA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjMWRlMjQxMWQwNjQ5YTU4Y2VkOWY1Yzg2ZjZjNDViID0gJChgPGRpdiBpZD0iaHRtbF8zYzFkZTI0MTFkMDY0OWE1OGNlZDlmNWM4NmY2YzQ1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3J1dHUxMjQwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJ1dHVsPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5NTBjMmFiMmMyYjQzY2E4YTBjZmNmZDk1ODViNTA0LnNldENvbnRlbnQoaHRtbF8zYzFkZTI0MTFkMDY0OWE1OGNlZDlmNWM4NmY2YzQ1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZDU1ZDBlNjJjNjI0N2U4YTk4NDg4YzJmYzVkNzk1Yy5iaW5kUG9wdXAocG9wdXBfMjk1MGMyYWIyYzJiNDNjYThhMGNmY2ZkOTU4NWI1MDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0Mjc4MDMzZjQ4YjQzYzk5NGVlMTg1ZjI4NGY3ZTg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjQuNjY2NjY2NjY2NywgMTYuNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NzllYjYyMGRmODk0NzMwOTYzMmM2NmE0Zjk4M2ViMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lY2JkOWVhNWFlM2Y0ODAzOTI4NTcyNWYyMTcyYjBmYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWNiZDllYTVhZTNmNDgwMzkyODU3MjVmMjE3MmIwZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNhYW1pIChDZW50cmFsLVNvdXRoKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTc5ZWI2MjBkZjg5NDczMDk2MzJjNjZhNGY5ODNlYjMuc2V0Q29udGVudChodG1sX2VjYmQ5ZWE1YWUzZjQ4MDM5Mjg1NzI1ZjIxNzJiMGZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0Mjc4MDMzZjQ4YjQzYzk5NGVlMTg1ZjI4NGY3ZTg1LmJpbmRQb3B1cChwb3B1cF85NzllYjYyMGRmODk0NzMwOTYzMmM2NmE0Zjk4M2ViMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTcxMmQzZTk2Zjg3NGIzYzk2ODhmYzlhZTc0ZDRkNDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4wLCAzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZkM2I0ZTg4OGU4NDA0MDkyNWM1NGM2ZTc4NTVlMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjhlNzdkOTQ1OGYzNGQwZWI1OTRmOWMzOTZjNGNiMDQgPSAkKGA8ZGl2IGlkPSJodG1sX2I4ZTc3ZDk0NThmMzRkMGViNTk0ZjljMzk2YzRjYjA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FuZDEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FuZGF3ZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZmQzYjRlODg4ZTg0MDQwOTI1YzU0YzZlNzg1NWUxZi5zZXRDb250ZW50KGh0bWxfYjhlNzdkOTQ1OGYzNGQwZWI1OTRmOWMzOTZjNGNiMDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTcxMmQzZTk2Zjg3NGIzYzk2ODhmYzlhZTc0ZDRkNDkuYmluZFBvcHVwKHBvcHVwX2FmZDNiNGU4ODhlODQwNDA5MjVjNTRjNmU3ODU1ZTFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOWJlN2FmMzA5OGM0NzkzYjcyMTkwYjY0OTYxNjZiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjgzMzMzMzMzMzI5OTk5OSwgMTA4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MjFjYjE3ODJiODU0NWY5YWE2MGFmOWM4ODMyZDYxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzc4ZWQ5MjFjNTQ0MzkzOWY3ZGY5YzAyZTJiYzhhNiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzc3OGVkOTIxYzU0NDM5MzlmN2RmOWMwMmUyYmM4YTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zZWRhMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TZWRhbmc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTIxY2IxNzgyYjg1NDVmOWFhNjBhZjljODgzMmQ2MTUuc2V0Q29udGVudChodG1sX2M3NzhlZDkyMWM1NDQzOTM5ZjdkZjljMDJlMmJjOGE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE5YmU3YWYzMDk4YzQ3OTNiNzIxOTBiNjQ5NjE2NmIxLmJpbmRQb3B1cChwb3B1cF85MjFjYjE3ODJiODU0NWY5YWE2MGFmOWM4ODMyZDYxNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODJkMzA3MTA2YjRmNGYwZWI3Y2JhNTFkY2RkY2ZhNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4wLCAtMTIwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZWUxMmNjMzYzZWI0MzlkYWNmZWU0Yjc3YzUxZjBhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMzQyM2RjMDgzZDY0ZDIxOTA0MWFlMmI2ODUxOTYxOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDM0MjNkYzA4M2Q2NGQyMTkwNDFhZTJiNjg1MTk2MTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zaHVzMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TaHVzd2FwPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlZTEyY2MzNjNlYjQzOWRhY2ZlZTRiNzdjNTFmMGEwLnNldENvbnRlbnQoaHRtbF9kMzQyM2RjMDgzZDY0ZDIxOTA0MWFlMmI2ODUxOTYxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MmQzMDcxMDZiNGY0ZjBlYjdjYmE1MWRjZGRjZmE2MC5iaW5kUG9wdXAocG9wdXBfYWVlMTJjYzM2M2ViNDM5ZGFjZmVlNGI3N2M1MWYwYTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZiNjBiZTVjYTBhZjQwY2FiY2ZiMWFhYWI3OGVhOTY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuMCwgNjkuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjZDI1MmU5MjY5ODQ1ZTRiODVlYWM5NzFiMGM0MTVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0YTRhMDkwN2MzODRkYzU4MTc2NDMwZDYyYmYxYTgwID0gJChgPGRpdiBpZD0iaHRtbF81NGE0YTA5MDdjMzg0ZGM1ODE3NjQzMGQ2MmJmMWE4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NpbmQxMjcyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNpbmRoaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82Y2QyNTJlOTI2OTg0NWU0Yjg1ZWFjOTcxYjBjNDE1ZC5zZXRDb250ZW50KGh0bWxfNTRhNGEwOTA3YzM4NGRjNTgxNzY0MzBkNjJiZjFhODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmI2MGJlNWNhMGFmNDBjYWJjZmIxYWFhYjc4ZWE5NjUuYmluZFBvcHVwKHBvcHVwXzZjZDI1MmU5MjY5ODQ1ZTRiODVlYWM5NzFiMGM0MTVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YTg1NzM4MjZkYzY0YWViYTM3NTlmOGY5MzczZjZkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjY2NjY2NjY2NjcsIC0xMjMuMTY2NjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTk4NWJkZWJkYmNlNGY1ZTliYzk5ZmQwYzVlOWVmOGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGUwYTE2NTRiMzNjNDI5NDlkODdhZThmMDA2YzhhMDAgPSAkKGA8ZGl2IGlkPSJodG1sXzhlMGExNjU0YjMzYzQyOTQ5ZDg3YWU4ZjAwNmM4YTAwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3F1YTEyNDgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3F1YW1pc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTk4NWJkZWJkYmNlNGY1ZTliYzk5ZmQwYzVlOWVmOGEuc2V0Q29udGVudChodG1sXzhlMGExNjU0YjMzYzQyOTQ5ZDg3YWU4ZjAwNmM4YTAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhhODU3MzgyNmRjNjRhZWJhMzc1OWY4ZjkzNzNmNmQzLmJpbmRQb3B1cChwb3B1cF9lOTg1YmRlYmRiY2U0ZjVlOWJjOTlmZDBjNWU5ZWY4YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDliOWIzMmZlMzgyNDFjZGJhYzI1Y2NiNTA1Y2FmZTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNi4wLCAxMDcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYxOThmNDI5OTE3MTQ2MmM5MjAxOGQzMWE2NzkwNDNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmOThhOGJmZGMzZDRkZDI5OWIxNjIyZTVkNTlhNmM0ID0gJChgPGRpdiBpZD0iaHRtbF8zZjk4YThiZmRjM2Q0ZGQyOTliMTYyMmU1ZDU5YTZjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N1aWkxMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlN1aTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTk4ZjQyOTkxNzE0NjJjOTIwMThkMzFhNjc5MDQzYS5zZXRDb250ZW50KGh0bWxfM2Y5OGE4YmZkYzNkNGRkMjk5YjE2MjJlNWQ1OWE2YzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDliOWIzMmZlMzgyNDFjZGJhYzI1Y2NiNTA1Y2FmZTMuYmluZFBvcHVwKHBvcHVwXzYxOThmNDI5OTE3MTQ2MmM5MjAxOGQzMWE2NzkwNDNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZjY3OTlhYjRkODY0ZjRmYWE0MWM5ZWE2ZTc1NmZlYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjAsIDExLjgzMzMzMzMzMzI5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U2ZjE2YjYzNGI0YjQ1M2Q5ZmM3ZTVhNTQ4ZjFjZDM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MyZDE5YjcyZmJjMjRiZGVhNDI3NzI4ODZjZTY0ODUwID0gJChgPGRpdiBpZD0iaHRtbF9jMmQxOWI3MmZiYzI0YmRlYTQyNzcyODg2Y2U2NDg1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RlcmExMjUxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRlcmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTZmMTZiNjM0YjRiNDUzZDlmYzdlNWE1NDhmMWNkMzguc2V0Q29udGVudChodG1sX2MyZDE5YjcyZmJjMjRiZGVhNDI3NzI4ODZjZTY0ODUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFmNjc5OWFiNGQ4NjRmNGZhYTQxYzllYTZlNzU2ZmVhLmJpbmRQb3B1cChwb3B1cF9lNmYxNmI2MzRiNGI0NTNkOWZjN2U1YTU0OGYxY2QzOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzY1NWE2ZjE4YmFmNDU3MGJiOTI3ZWRjZjdhODhhMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMC4wLCA5MS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjIyYjI3YWVkMzJhNDI0OGE5NGVmNDBlZTg2YjVlOTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQ0ZTM4N2I4MzQzNDg3ZWFiYzU2ODRhM2Y0NGY2YjAgPSAkKGA8ZGl2IGlkPSJodG1sXzc0NGUzODdiODM0MzQ4N2VhYmM1Njg0YTNmNDRmNmIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaWJldGFuIChTdGFuZGFyZCBTcG9rZW4pPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMjJiMjdhZWQzMmE0MjQ4YTk0ZWY0MGVlODZiNWU5OC5zZXRDb250ZW50KGh0bWxfNzQ0ZTM4N2I4MzQzNDg3ZWFiYzU2ODRhM2Y0NGY2YjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzY1NWE2ZjE4YmFmNDU3MGJiOTI3ZWRjZjdhODhhMTYuYmluZFBvcHVwKHBvcHVwX2YyMmIyN2FlZDMyYTQyNDhhOTRlZjQwZWU4NmI1ZTk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjZiYzE2NzZjZTc0ZWY5YmU1ODU0MjcyYmIwZWU0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIC0xMzUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcxYzczNzZjMjY1MTQ5NWQ4ZmQ4MjA5ZjhhNGNmMzJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmZTZkOTA0ZTYwNDQ4NDRhMjIwMWI2Njk5NzBlOGViID0gJChgPGRpdiBpZD0iaHRtbF80ZmU2ZDkwNGU2MDQ0ODQ0YTIyMDFiNjY5OTcwZThlYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RsaW4xMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRsaW5naXQ8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzFjNzM3NmMyNjUxNDk1ZDhmZDgyMDlmOGE0Y2YzMmUuc2V0Q29udGVudChodG1sXzRmZTZkOTA0ZTYwNDQ4NDRhMjIwMWI2Njk5NzBlOGViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBiNmJjMTY3NmNlNzRlZjliZTU4NTQyNzJiYjBlZTQzLmJpbmRQb3B1cChwb3B1cF83MWM3Mzc2YzI2NTE0OTVkOGZkODIwOWY4YTRjZjMyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk4NGRlYTdlMDBlNGE3ZDgwN2IyOThjOTVmMDAwZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi41LCAtMTI5LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZjUzMzkwYzAyN2Y0NmI3ODFkMmM4YjhjNmExMTFjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMTJjMjk2MTMxMWQ0OTIwOTFmZDk4NDBjMzgzNGRkMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDEyYzI5NjEzMTFkNDkyMDkxZmQ5ODQwYzM4MzRkZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRzaW1zaGlhbiAoQ29hc3QpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZjUzMzkwYzAyN2Y0NmI3ODFkMmM4YjhjNmExMTFjNC5zZXRDb250ZW50KGh0bWxfZDEyYzI5NjEzMTFkNDkyMDkxZmQ5ODQwYzM4MzRkZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTk4NGRlYTdlMDBlNGE3ZDgwN2IyOThjOTVmMDAwZjUuYmluZFBvcHVwKHBvcHVwXzlmNTMzOTBjMDI3ZjQ2Yjc4MWQyYzhiOGM2YTExMWM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNjA2YzM5NDE5MmU0Y2M4OTVhMTc2Nzc3ODRhNThjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjUsIDQ1LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDgwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NTE2NTYzOTBmNGQ0NDM3Yjg2MTc1ZjI5Y2NlNzhkNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTI2MjQyNDVjNzQ0NzVhYjVjNTg5ODk2N2ExMzQwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNDM0M2I5ZDVjOGM0NDAyOTg4MDlkMGNhZjg1Mjc1MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDQzNDNiOWQ1YzhjNDQwMjk4ODA5ZDBjYWY4NTI3NTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRzb3ZhLVR1c2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhMjYyNDI0NWM3NDQ3NWFiNWM1ODk4OTY3YTEzNDAyLnNldENvbnRlbnQoaHRtbF9kNDM0M2I5ZDVjOGM0NDAyOTg4MDlkMGNhZjg1Mjc1Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNjA2YzM5NDE5MmU0Y2M4OTVhMTc2Nzc3ODRhNThjZi5iaW5kUG9wdXAocG9wdXBfZWEyNjI0MjQ1Yzc0NDc1YWI1YzU4OTg5NjdhMTM0MDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczODY5NWJhODBkODQ2MzVhODM1MzYwM2JiOGMzYjNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjM2NjY2NjY2NjcsIDE1NC4xNjY2NjY2NjcwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5NDQwMzA2Yjg0MjRkZjk4MzVhZWZlMjI3NWYwMmExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxYmEzOTcyNjNjZTRiYWI5MTNjNjI0MDlmYTViM2E0ID0gJChgPGRpdiBpZD0iaHRtbF9jMWJhMzk3MjYzY2U0YmFiOTEzYzYyNDA5ZmE1YjNhNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WWVsw64gRG55ZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjk0NDAzMDZiODQyNGRmOTgzNWFlZmUyMjc1ZjAyYTEuc2V0Q29udGVudChodG1sX2MxYmEzOTcyNjNjZTRiYWI5MTNjNjI0MDlmYTViM2E0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzczODY5NWJhODBkODQ2MzVhODM1MzYwM2JiOGMzYjNlLmJpbmRQb3B1cChwb3B1cF8yOTQ0MDMwNmI4NDI0ZGY5ODM1YWVmZTIyNzVmMDJhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI3M2MwMmFlOGQyNGM5MTkyYzhhYmQyZTVjMTY1YmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuMCwgMjMuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwODAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1MTY1NjM5MGY0ZDQ0MzdiODYxNzVmMjljY2U3OGQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5NjdiZjQ5OTRlYTQyYjI4ZGY2MDdlYzBhNzRmZTRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1ODQzZjgzNzA2YzQyODc5MGFiZDM4NjhjZTVlYTVhID0gJChgPGRpdiBpZD0iaHRtbF8wNTg0M2Y4MzcwNmM0Mjg3OTBhYmQzODY4Y2U1ZWE1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3lleWkxMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPllleWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzk2N2JmNDk5NGVhNDJiMjhkZjYwN2VjMGE3NGZlNGIuc2V0Q29udGVudChodG1sXzA1ODQzZjgzNzA2YzQyODc5MGFiZDM4NjhjZTVlYTVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyNzNjMDJhZThkMjRjOTE5MmM4YWJkMmU1YzE2NWJkLmJpbmRQb3B1cChwb3B1cF8zOTY3YmY0OTk0ZWE0MmIyOGRmNjA3ZWMwYTc0ZmU0YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzZlNjBjMjZhODFmNDE5OWI3YWZkY2EzOTU1NDE4MDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS43NSwgLTg2Ljc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTQ3MTVmNWZkMzgwNDQxNmJmYTZlZDc4NTRiNjcwNmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTgyMjQwZjc1NzFiNGZjZDgxODliOThlNjU3N2ViNjUgPSAkKGA8ZGl2IGlkPSJodG1sXzU4MjI0MGY3NTcxYjRmY2Q4MTg5Yjk4ZTY1NzdlYjY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjaDEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjaGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQ3MTVmNWZkMzgwNDQxNmJmYTZlZDc4NTRiNjcwNmMuc2V0Q29udGVudChodG1sXzU4MjI0MGY3NTcxYjRmY2Q4MTg5Yjk4ZTY1NzdlYjY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM2ZTYwYzI2YTgxZjQxOTliN2FmZGNhMzk1NTQxODA4LmJpbmRQb3B1cChwb3B1cF8xNDcxNWY1ZmQzODA0NDE2YmZhNmVkNzg1NGI2NzA2YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjllZGFmODQxMTM5NDM0Nzk4ZDM2Y2NkMjk2MTczMGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjUsIDI1LjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDA4MDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODUxNjU2MzkwZjRkNDQzN2I4NjE3NWYyOWNjZTc4ZDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY5MGY2ZmM3YTA3NGE2N2ExODEyNmZjZWUwMTYzZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDA1OWQwYzg4NTFjNGFjZDhmMTI5Yjk1Y2JmZTE0ZGMgPSAkKGA8ZGl2IGlkPSJodG1sXzQwNTlkMGM4ODUxYzRhY2Q4ZjEyOWI5NWNiZmUxNGRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVsdTEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVsdTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjkwZjZmYzdhMDc0YTY3YTE4MTI2ZmNlZTAxNjNkZS5zZXRDb250ZW50KGh0bWxfNDA1OWQwYzg4NTFjNGFjZDhmMTI5Yjk1Y2JmZTE0ZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjllZGFmODQxMTM5NDM0Nzk4ZDM2Y2NkMjk2MTczMGIuYmluZFBvcHVwKHBvcHVwX2ZmOTBmNmZjN2EwNzRhNjdhMTgxMjZmY2VlMDE2M2RlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7ff62a9fd0b8>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(wals_page.language)\n",
    "m.add_custom_coordinates(wals_page.coordinates)\n",
    "m.add_features(\n",
    "    wals_page._1A,\n",
    "    colors=lingtypology.gradient(5, 'yellow', 'green')\n",
    ")\n",
    "m.legend_title = 'Consonant Inventory'\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Autotyp <a name=\"autotyp\"></a>\n",
    "\n",
    "It is possible to access Autotyp data (online) using `lingtypology.datasets.Autotyp`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Unlike in Wals, each new tablename passed into `Autotyp` gives several additional columns:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bickel, Balthasar, Johanna Nichols, Taras Zakharko,\n",
      "Alena Witzlack-Makarevich, Kristine Hildebrandt, Michael Rießler,\n",
      "Lennart Bierkandt, Fernando Zúñiga & John B. Lowe.\n",
      "2017. The AUTOTYP typological databases.\n",
      "Version 0.1.0 https://github.com/autotyp/autotyp-data/tree/0.1.0\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>language</th>\n",
       "      <th>LID</th>\n",
       "      <th>Gender.n</th>\n",
       "      <th>Gender.binned4</th>\n",
       "      <th>Gender.Presence</th>\n",
       "      <th>VPolyagreement.Presence.v2</th>\n",
       "      <th>VPolyagreement.Presence.v1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Godoberi</td>\n",
       "      <td>1531</td>\n",
       "      <td>3</td>\n",
       "      <td>3 genders</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Bininj Kun-Wok</td>\n",
       "      <td>655</td>\n",
       "      <td>4</td>\n",
       "      <td>4 genders</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Luvale</td>\n",
       "      <td>553</td>\n",
       "      <td>10</td>\n",
       "      <td>more than 4 genders</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>North-Central Dargwa</td>\n",
       "      <td>2949</td>\n",
       "      <td>3</td>\n",
       "      <td>3 genders</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Gaagudju</td>\n",
       "      <td>82</td>\n",
       "      <td>4</td>\n",
       "      <td>4 genders</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               language   LID Gender.n       Gender.binned4 Gender.Presence  \\\n",
       "0              Godoberi  1531        3            3 genders            True   \n",
       "1        Bininj Kun-Wok   655        4            4 genders            True   \n",
       "2                Luvale   553       10  more than 4 genders            True   \n",
       "3  North-Central Dargwa  2949        3            3 genders            True   \n",
       "4              Gaagudju    82        4            4 genders            True   \n",
       "\n",
       "  VPolyagreement.Presence.v2 VPolyagreement.Presence.v1  \n",
       "0                      False                      False  \n",
       "1                       True                       True  \n",
       "2                       True                      False  \n",
       "3                       True                       True  \n",
       "4                       True                       True  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Autotyp_table = Autotyp('Gender', 'Agreement').get_df(strip_na=['Gender.binned4'])\n",
    "Autotyp_table.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can draw a map out of gender data from multiple languages."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2ZhNjM5MGYxZWUyMjQ2MTU4M2U4OTQ2Nzk3ZGY0ZjMyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9mYTYzOTBmMWVlMjI0NjE1ODNlODk0Njc5N2RmNGYzMiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5HZW5kZXJzPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmYwO29wYWNpdHk6MC43OyI+PC9zcGFuPjIgZ2VuZGVyczwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZhMDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj4zIGdlbmRlcnM8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNmNTA7b3BhY2l0eTowLjc7Ij48L3NwYW4+NCBnZW5kZXJzPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZjAwO29wYWNpdHk6MC43OyI+PC9zcGFuPm1vcmUgdGhhbiA0IGdlbmRlcnM8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9mYTYzOTBmMWVlMjI0NjE1ODNlODk0Njc5N2RmNGYzMiA9IEwubWFwKAogICAgICAgICdtYXBfZmE2MzkwZjFlZTIyNDYxNTgzZTg5NDY3OTdkZjRmMzInLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF9mYTYzOTBmMWVlMjI0NjE1ODNlODk0Njc5N2RmNGYzMik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl83MjY5NmRjNDA3ZjQ0OTNmYmU0ZmQ5YTkzYTIxYTdhNiA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfZmE2MzkwZjFlZTIyNDYxNTgzZTg5NDY3OTdkZjRmMzIpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9mYTYzOTBmMWVlMjI0NjE1ODNlODk0Njc5N2RmNGYzMik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjcyODU0NjY4Mjg3NDc3MzhjNDYyNDgxNDFlYmIwZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy4xLCA0NC4xXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YWQ3MDkxNTY3YmY0YWViOWFhNjZmYTdmODE3NjVhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjIxNjkyLCAtNjYuNzcxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzZmZGMwNWFlMTk4NGJlZWExMjBmMjUwZWNlZTI0NDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC45NzY5OTk5OTk5OTk5OTcsIDkxLjk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2NWZiZDAxODc3MTQzNjg4ZGY0NTFhNDYyYWFiNDc1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuNzUsIDQzLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzY2VkMTc1MThkYzQwMmJiMTU2MjFjYmZhYjU5YzVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC4wMjE5MywgLTcwLjgwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGI3MzRmM2Y4N2NkNDkzNWExNTg3ZDcyZmM1ZjExYzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi41ODAzLCAxNDAuMTc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNDNkMDFkYWNmNjU0NjljOWIxZDQ2ZTlhMzYyMGUyMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwMzNlNTU4NGQ4YTRkNjc4YTdiOGE1ZDI0ZGVmNGFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC43Nzg3MDQsIDQ1LjE1Mjg1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmE3ZTIzOTg1ZjMzNDUyZDhkOWEwYjM2NmMxMGJiZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMi43NDE1LCAtMi40MDg3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjgyOWYzNWU2Yzg0NDBmMjgyZmUwMDFjODk3YmI0ZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy4xNDE5LCAzNi40NTczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDExNGQ0YWMyZDQ0YTIyOTUzMzZkZTA1YzY0OTYwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjE1MTMsIDguNzgwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjRjNDdjMGNmOGI5NDg3N2IzYTAyOWFlMDRmYjZhMjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMC45ODg4LCAtOTIuNTQwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzk2ZmFmY2FlZWEzNGE4Mzk5OTlhYWI3NGI5ZDRhMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS41NDgzNiwgMTQ4Ljk5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGEyMDQ4YTg5NmFlNDNjOGI4YjJiYTUzYjczOWVmZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMS4zNjc5LCAxMzIuNTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTI0NDhlM2JkZjc0MTMzOTMwNDg4Nzg4NDMzN2Q0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjcwODE4MiwgMzkuNTQzNDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZDU3M2JlODg3NzE0ZGMxOWNjMjg4MzZiMDFkOGQ3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjY4NTAwOTk5OTk5OTk5OTcsIDE0MS4yNTc5OTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjY1NDI0MjliYjM2NDhiZmI4MjFkMDdlYWEzNWFlYTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS4wLCAzMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYTU5NTRmYjk0MWE0NjNmOGQ3NWFhNDE2OWU5YzBlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjQyNTcsIDQ3LjQzODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2ZGFlYjliZmY0NTQ0ZjNiZTg2NTdmZTFjNWRlZmJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMjQzNiwgMzYuNjY2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGJiOTllN2JkMGQ4NDcwMDhlZDk5ODcwODdiZGE3YTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjE0MDUsIDM1LjU3NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4MzlkNjYxOTExYjQ4ZGFiYWU5Y2IzYzViYWUyODc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMCwgMzUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI5ZDRlMDUwYTE0NDI4NWJmYTBiODRmYzliZWY5NTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuMDc2NTMsIDEzNC4zMjcyODk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmNkODBhYjc2ZmUxNDU4YTk0MDNkMGM2YTg2YTc1NDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy43ODAxLCAxNDMuMDU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YmEwYzJlNTgwNDQ0NWFhOGNmZGJlZGVjNGYwNmY2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjI0MzcsIC0xMTAuNDYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjA0YWY2OWU4ZTE0NjM0ODFjZTQyZGVjOTI1MjU1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjE4MzMsIDQ4LjIzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlNTAwNWY1MjIwMTRmMzRiZmJjNjY4MTZkZDc3Mzc0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuNTEwNDg5OTk5OTk5OTk5OSwgMTMxLjk4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRiMTlmNWYyOGZkNDAyMjgzODAwYjZkNzBjMjViYzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4wNzQ0NCwgMTQxLjczMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGIxYTdlZWIzOWRlNDEwNmJmYTRjMTFlNGE0YzkxN2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZDgzYzczNmU2MWY0NDI3ODc3NDI0YjczMzRmMTdhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZWZlYWM1ODAyZjE0YTRkYmU4ZThjZjIzMjJhYWY5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjMsIDQ1LjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4N2Y4ODRmNTE3NjQxNzFiYmY0M2FkMjI0MjFkNDQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNzg0MDMwMDAwMDAwMDAwNCwgLTY0LjI4MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1YjcwMTE4YTEyMzQyZTRiZDRlOWUzYTgzNDY4ZjI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNzg3MjQsIDE1NC44MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjYzkyN2Y0YTVjMTQwMWNhNDIyZWUzNzMyOWM5Y2RjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjUuMCwgNzcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2M1MzU5NTk4MTkyNDkxNDk4OTgyZWM5NDNhN2MwMmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy4zMTYyLCAtOTUuOTI2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWIxOTNiZTNmNDczNDY3ZGI4OTY4YzNmNzM5ZDA4YmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ny45MTA2LCAtMTI0LjYwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOThkNWFmZDRjODE3NDQwYTk1NGVhMzM5ZDg0MDAyMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS4wMzkxLCA4Ny4xNzkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZWFhMDZkNTUzMzM0MGU0OWM3ZTJhMmU5MGEwNmQ2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjc0MjgsIDQ2LjIyNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2MGYxZWVjOGEwNDRhMzc5NWY3YjJkYTk5MTIwNTI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNDI1NywgNDcuNDM4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZThhMmQxY2JiYzExNGRjZDlmMmYyY2QxYTczMjRmYTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuNzk4MiwgMTMzLjgwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDVlYTQ0ZjQ1MDE1NDYzMmI3MGJmNjE4ZWZiZTYwY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4xOTk0OCwgMzUuMjkzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzdjMDAwMzlmNjE0NDBkYWEyZGM1ZmU2N2FiNmFiMDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuMDk2NiwgMjIuOTA4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjkyZjZjYWUwODJkNGYyYThlOTljNDZkNzQzZTI5MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjIuMDkzOSwgMjAuNzQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM4Y2M0YWE2NzYyNDU0Nzg2MTgwN2IyNGFjYWMyYzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi40MjU3LCA0Ny40Mzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MzI4M2U2MDQyZjg0NTgwOTg4Y2YxNDY3M2U3NGVjMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjY0ODk5OTk5OTk5OTk5NCwgMTIuNDY3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2M1MjYwY2E2OGM1NGI4MDk0N2VlMzU5ZjQ3M2MwYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxLjAwNzQyLCAxMjcuNDkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZWIxYWYzNjE0MDk0OTQ0OTRiNGRmYTc0ZGUwNzJjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNjNWY5ZTE4NWRmMTRmOThhODdlMzVhZGFkYzkyYzRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI1LjA3NDcsIDE3Ljk3NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiMjA5YTM1ZGRkYjQ3Y2E4NTVkYzNlNWM5YTkwYjcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjMuNzU1MSwgODcuNTQ2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjdkZmE0ZDk3NDg0NDZjZDgwYzUxMGY0YTA5NjAyNWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi42NTAxLCA0Ni4zMTUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NTY1ZDgzOWZmNTE0YzdmODdiNDg2OTg5NjNiOWMyZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMyMjQsIDI0Ljg2OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExYThkNzgxNTBjZTQ2NWVhODNkMTUyZDlmN2U3YTVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuOTc1MDM5OTk5OTk5OTk5LCAxNDEuMzY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODk0ZDY2MjZlZjA0MmE5YTQxOTZkNzI4MWU5ZmNhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy05LjA1NTY5LCAxNTkuMTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MGIyY2JlODM0OTE0NTFkOTNmODRhZWE0NTdlZmFhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMC42OTk0OCwgLTY0LjU2MTUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZjAxNTBjODgwOTA0MDBiYjk0MjRmOWQ4ZDE1NzgxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuMTg4NTMsIDkyLjc2NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YwNDMwM2JjMWJlYjQ3OWFhZGU3MTFkNDRlNDFjYmQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTMuNTg3OCwgNzYuMTE5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGE0NWJhNDQ3OGVhNDdhYWI4MTZmOWI3MjhmNmY1YmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjE3OTg2LCA1LjUxNzAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYzY1ZDk3OGNkMjE0OWFiOTEzNzc4YmVjMGQ1MzcxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy4wOTQxLCAxMzEuMjM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNDIxZWRiOTFlNzk0Y2Q3YTlhMmM3OTUwZTk5OTYwZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy44MTE1LCAtNjUuNjM0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDgyZTBlNmJlYTA2NDg4MTgxYTQ4MTM4MzdlMDZjMWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNTQuMCwgLTY4LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkZWQ2OTVkNjlhYjRjYTFiZGJiNGIyYjVkNTI4ZjU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjMzOTgsIDEzMy4zNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwZTFmMzAxNDQ1NzQwM2Y5NWYzYTJiODk4MTRlMjZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjUxNzYsIDEzMi42NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRhZmU1ZGY4YjgwNDQwOWNhOTZmYWZlMzlkM2IxNjY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE3LjQ1MTYsIDE0NS41NDM5OTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTQ1ZmY1NzU5ODA3NDY4ZmEwNWRhYmRlZmI2YjQxNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjguMzQ1OCwgMTUyLjg1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWY3ZGVhZDNkM2Q1NDYwNDg0ZjlkNWFmMDgzODg2YTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuNDI5NCwgMTMxLjg0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjQzM2FhNTc4MTAwNDFmZGE5NTUzN2NkZjRhYjdmZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNi4yMTYxLCA3NC44MjM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMWQ1YjhlZjVlNjA0MjJjYjgxNWUzMDk1YTI1ODFlZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQzODc0MiwgLTc1LjcwODEwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2EyMjI3YjM4OGViNGNlZWJjMGI5ZTVlZDU5YThhNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4xMzI4LCA0Ny4wODA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZDA2MDI3MTMwZDY0OTAzYjIzOTE1N2Y1OWNkMmQzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjU5MTYsIDQ2Ljg4NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkMTY2MmI3ZDYwNDQ4NmQ5NjFmMTcwNmQ3NTA4YzEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzIzOSwgNDYuODI2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjUxZWZhY2VjNThjNDI1ZTk1NDIzNGYwNzhiMTRmMDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS4xODAxLCA0OC4wNTcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MGU3YzU4OTkxNDc0YjA2OWVjYjA5NTVkMDhhMzY1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy4xNjUsIDEzMy42NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QyZDE3NzVlNmQzNjRiODlhNTBlZTUwODAwNGI4YjNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjI5NzMsIDEzMC42MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwOGQ5OGI3NDM0ODQwYmM4NjRjM2Y2NDQ0ZmVmMjA4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjMzOTgsIDEzMy4zNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmNDBmYzcwMmZlMTQyYTU5ZWI5ZWM1NWJlZDk3ZDQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjUzODIsIDIyLjI5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkyNDExN2UxMDM5NjQ3ZmFiNmNhZjcyNjQ2NjAzNGI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNjMyLCAtNS44NzcwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM3ZGZiMGMzZThmNGMxZGJlODJmM2M1OWZmYzRhNGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjE0MDMyNiwgMTMuMDc3MzM4MDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDUwZWRjM2JjMjA0MmMzYWRjNWFjZmVkMGI4NDFlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjcxNzMwOTk5OTk5OTk5OTQsIDE0My41NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFhOTAxMjFmMjZkNjQzMWRiY2NkOGY4ZDEyYzU4ZTc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDI3OCwgLTEyMS41MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmZWQ3YzliMmZhZjQ0ZjBhMjgwYTRiYmI1ZjU2ZDViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMTEsIDQ1LjAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMWEzNzI1MDJkOWE0OTdiYjExMTkyMjQ5MmQ2MzAyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjY0MjksIDE1NS40NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhZmNjOWZkNjcxMzQzNDM4OTIyMmRhNDI4YjQyMzI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjI2MjMsIDEzNS43NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZhNGFmMDFjZTBjODQzOTk5M2E1YzA0ZTQ5NTAyZGVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuNDcxNjksIDE0My4xMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxMGVhMDU1MzRjYjRmOTc5OGVhNDY1NzJlMTBkZTQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE2LjQwMDYsIDEyNi40MzI5OTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmEyZmMyOGJkZDhhNGM2M2IxOGIyN2NmNzlkZGFmYTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjEuOTIsIDE4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1NWI1OThiNmMxYzQyNTlhYmQxZThkMjNjMjFhYzI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOC4zMjQ0OCwgLTEwLjMzNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxZjFjODY0MTJiMjRmYWViY2E2ZjlhYTA2MDJmOWQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuOTUyMywgMzEuMTExMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjI5OTJiODJmZjUxNDY2OTk5ZTY0NDZkNzQyZTQ0ODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4wODA4LCA0Ni4xMzY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZTQ3MGY4YjBkYTc0MGU2OWVmNjZjNDMwYjQ3YmMxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1Ljk2MTQ1OTk5OTk5OTk5NSwgLTk1LjAzOTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZmE2NzMwM2RkMmY0ZGI5YTY0YjA4ODhkNjQ5NGYzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNjY4ODQsIDMyLjE1MTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NWMzMDk5MGY3ZmY0MmJlYmY0MDNkNGY2MzRjOWE2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy44ODE4LCAxMzAuMjM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDc3NDBmNmM1ZWQ0ODUyYjEwZTJlNzg3Zjk3NjRiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS44MzkzLCAxMzMuMTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNmNiMTMzZGVkN2U0M2IxYmQxZTcwNzg0N2JjMmIwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNC4yOTk2LCAxMzUuNzA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMWQ2YjcxNjY3YjE0YjFjYTM3MDJkMDM1YjEzNmI0YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjEsIDQ0LjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iM2IxMmQ4MDRlYTE0Mjk5ODQzN2E1NWFmNjViZThiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNjMyYTIzNzk2M2Q0MWE3YmI0MDJlOTQ5YzNlNDc1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzYzMmEyMzc5NjNkNDFhN2JiNDAyZTk0OWMzZTQ3NWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ha2thMTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ba2thZGlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iM2IxMmQ4MDRlYTE0Mjk5ODQzN2E1NWFmNjViZThiNC5zZXRDb250ZW50KGh0bWxfMzYzMmEyMzc5NjNkNDFhN2JiNDAyZTk0OWMzZTQ3NWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDFkNmI3MTY2N2IxNGIxY2EzNzAyZDAzNWIxMzZiNGIuYmluZFBvcHVwKHBvcHVwX2IzYjEyZDgwNGVhMTQyOTk4NDM3YTU1YWY2NWJlOGI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMWI5YjMzNTcxN2I0MTc4ODI4ZWNkMzczN2UyYmFlOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjIxNjkyLCAtNjYuNzcxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyY2FkMTlkYmEzZDRiZTRhOTgyM2U2NjllYWQzOWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1Mzk2OTkwM2RiZTQ4NGFhM2UyOTRmODMxOGYyZjQ4ID0gJChgPGRpdiBpZD0iaHRtbF9jNTM5Njk5MDNkYmU0ODRhYTNlMjk0ZjgzMThmMmY0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FwdXIxMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFwdXJpbsOjPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EyY2FkMTlkYmEzZDRiZTRhOTgyM2U2NjllYWQzOWMyLnNldENvbnRlbnQoaHRtbF9jNTM5Njk5MDNkYmU0ODRhYTNlMjk0ZjgzMThmMmY0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMWI5YjMzNTcxN2I0MTc4ODI4ZWNkMzczN2UyYmFlOS5iaW5kUG9wdXAocG9wdXBfYTJjYWQxOWRiYTNkNGJlNGE5ODIzZTY2OWVhZDM5YzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE0MDdlMjU5ZmUyMTQ2MDA5N2Q5N2IwNGI3ZTJiMTU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjQuOTc2OTk5OTk5OTk5OTk3LCA5MS45OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTRkZGJlZjMzZjYzNGZlNmEzZDhlNmUxOTc5NGUyMDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDJmMWZjODgzYTllNDdlOGEwODcyYjI0NjE3ODA0MTEgPSAkKGA8ZGl2IGlkPSJodG1sXzAyZjFmYzg4M2E5ZTQ3ZThhMDg3MmIyNDYxNzgwNDExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2hhczEyNjkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2hhc2k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRkZGJlZjMzZjYzNGZlNmEzZDhlNmUxOTc5NGUyMDMuc2V0Q29udGVudChodG1sXzAyZjFmYzg4M2E5ZTQ3ZThhMDg3MmIyNDYxNzgwNDExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE0MDdlMjU5ZmUyMTQ2MDA5N2Q5N2IwNGI3ZTJiMTU4LmJpbmRQb3B1cChwb3B1cF8xNGRkYmVmMzNmNjM0ZmU2YTNkOGU2ZTE5Nzk0ZTIwMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTlhNWJmMWYxM2UyNDU4ZWExNTRkNTJiNTI5YTJkYTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNi43NSwgNDMuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhNjU0ZTA5YThlMDQyMzE4YzJiYmNkMDk1OTUxYzQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlNjMzOTU2NTkwNDQzZDM5YWUxM2RiNDRkNGIxYWYxID0gJChgPGRpdiBpZD0iaHRtbF82ZTYzMzk1NjU5MDQ0M2QzOWFlMTNkYjQ0ZDRiMWFmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Fzc3kxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFzc3lyaWFuIE5lby1BcmFtYWljPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhNjU0ZTA5YThlMDQyMzE4YzJiYmNkMDk1OTUxYzQ2LnNldENvbnRlbnQoaHRtbF82ZTYzMzk1NjU5MDQ0M2QzOWFlMTNkYjQ0ZDRiMWFmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOWE1YmYxZjEzZTI0NThlYTE1NGQ1MmI1MjlhMmRhMS5iaW5kUG9wdXAocG9wdXBfNGE2NTRlMDlhOGUwNDIzMThjMmJiY2QwOTU5NTFjNDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiNmQwNzVmMTk1NzQwNTM5MzE4ZTIyZTE3ODhiNDg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC4wMjE5MywgLTcwLjgwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0ZGFlMjUyNjM4NTRkMWFhZGNkNmUxOGViZGQxN2VhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3YzQxNTA1NDY2YTRkOTI4MjMzZjQ2NWE4YWYyMjk1ID0gJChgPGRpdiBpZD0iaHRtbF8wN2M0MTUwNTQ2NmE0ZDkyODIzM2Y0NjVhOGFmMjI5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2JhcmExMzgwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJhcmFzYW5hLUVkdXJpYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNGRhZTI1MjYzODU0ZDFhYWRjZDZlMThlYmRkMTdlYS5zZXRDb250ZW50KGh0bWxfMDdjNDE1MDU0NjZhNGQ5MjgyMzNmNDY1YThhZjIyOTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGI2ZDA3NWYxOTU3NDA1MzkzMThlMjJlMTc4OGI0ODkuYmluZFBvcHVwKHBvcHVwX2E0ZGFlMjUyNjM4NTRkMWFhZGNkNmUxOGViZGQxN2VhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGQ2MjBjMDk1ZTg0N2ExYWE3MDc3MzE5YjM2ODQ1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjU4MDMsIDE0MC4xNzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Y2I1NzNiYTRiYzk0MDgxOTNjNzY0Yzk0NmEwZWUyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNmMzNzEzZGE5OGU0ZDEyYTE2ZTYzY2RiNGYwNjdmMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDZjMzcxM2RhOThlNGQxMmExNmU2M2NkYjRmMDY3ZjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTYzMyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OaW1ib3JhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Y2I1NzNiYTRiYzk0MDgxOTNjNzY0Yzk0NmEwZWUyMy5zZXRDb250ZW50KGh0bWxfZDZjMzcxM2RhOThlNGQxMmExNmU2M2NkYjRmMDY3ZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMThkNjIwYzA5NWU4NDdhMWFhNzA3NzMxOWIzNjg0NTMuYmluZFBvcHVwKHBvcHVwXzljYjU3M2JhNGJjOTQwODE5M2M3NjRjOTQ2YTBlZTIzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NzQ5ZjcyNjdkMDM0M2IwYTk0NzM1OTA0MDhjMWE4MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83Yjk4ZTI0Mzg3Nzc0M2FlYjBlOThkNmE1ZDE4OTlmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTQ3MmJlOGE4NjY0Njc3YWZlNzU2YzI5N2E5ZGM2ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWU0NzJiZThhODY2NDY3N2FmZTc1NmMyOTdhOWRjNmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90aXdpMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UaXdpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiOThlMjQzODc3NzQzYWViMGU5OGQ2YTVkMTg5OWY3LnNldENvbnRlbnQoaHRtbF8xZTQ3MmJlOGE4NjY0Njc3YWZlNzU2YzI5N2E5ZGM2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NzQ5ZjcyNjdkMDM0M2IwYTk0NzM1OTA0MDhjMWE4My5iaW5kUG9wdXAocG9wdXBfN2I5OGUyNDM4Nzc3NDNhZWIwZTk4ZDZhNWQxODk5ZjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3M2RlODk0ZWJhODRmYzBiMjcxNzE0NWZiNWViNWUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC43Nzg3MDQsIDQ1LjE1Mjg1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2ZjE3NzY1Y2NlOTQyZmRiM2UwMDFhNmZkM2U1M2E3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E2YjI5M2JjNzNmZDRkMmFhMDgyY2JkYjNlN2MzMzcxID0gJChgPGRpdiBpZD0iaHRtbF9hNmIyOTNiYzczZmQ0ZDJhYTA4MmNiZGIzZTdjMzM3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NvbWExMjU1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNvbWFsaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNmYxNzc2NWNjZTk0MmZkYjNlMDAxYTZmZDNlNTNhNy5zZXRDb250ZW50KGh0bWxfYTZiMjkzYmM3M2ZkNGQyYWEwODJjYmRiM2U3YzMzNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDczZGU4OTRlYmE4NGZjMGIyNzE3MTQ1ZmI1ZWI1ZTAuYmluZFBvcHVwKHBvcHVwXzE2ZjE3NzY1Y2NlOTQyZmRiM2UwMDFhNmZkM2U1M2E3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMDJhYjk2MTQxMzI0NjZiOGQ2ZDMyZTY4ZjNkMDk4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjc0MTUsIC0yLjQwODcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2MzY2JhYjFjN2I1NDg1YTkwYjczOWIzOTM3NDAwNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDcyMzEyZjE3NDg4NDI5NGI0Y2JiZWZlOTc4NTM5MTEgPSAkKGA8ZGl2IGlkPSJodG1sXzA3MjMxMmYxNzQ4ODQyOTRiNGNiYmVmZTk3ODUzOTExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2VudDIxOTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2VudHJhbCBNb3JvY2NhbiBCZXJiZXI8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2MzY2JhYjFjN2I1NDg1YTkwYjczOWIzOTM3NDAwNjkuc2V0Q29udGVudChodG1sXzA3MjMxMmYxNzQ4ODQyOTRiNGNiYmVmZTk3ODUzOTExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMwMmFiOTYxNDEzMjQ2NmI4ZDZkMzJlNjhmM2QwOThmLmJpbmRQb3B1cChwb3B1cF9jYzNjYmFiMWM3YjU0ODVhOTBiNzM5YjM5Mzc0MDA2OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjU2MTE3Njk5YWIxNGU0OGE5NzBkMDk5YjJlMWU3MzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy4xNDE5LCAzNi40NTczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDQ4ZDU0YjA2YTlmNGMyOTk3M2Q3OTk5ZGFkNDM0MzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTNmODE0YmMwOTVhNDk2NDgwNDIyODU5NjgwNTA5YzYgPSAkKGA8ZGl2IGlkPSJodG1sX2EzZjgxNGJjMDk1YTQ5NjQ4MDQyMjg1OTY4MDUwOWM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFzYTEzMDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFzYWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQ4ZDU0YjA2YTlmNGMyOTk3M2Q3OTk5ZGFkNDM0MzYuc2V0Q29udGVudChodG1sX2EzZjgxNGJjMDk1YTQ5NjQ4MDQyMjg1OTY4MDUwOWM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1NjExNzY5OWFiMTRlNDhhOTcwZDA5OWIyZTFlNzMxLmJpbmRQb3B1cChwb3B1cF80NDhkNTRiMDZhOWY0YzI5OTczZDc5OTlkYWQ0MzQzNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWU4ZGI0MTIxMGQ0NGE0ZDhhNjI2ZDU1ZTc0ZWUwYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS4xNTEzLCA4Ljc4MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MGRjYzZhZGQ3MzQ0YmZhODMyNjg1NmRkZjNjNzgwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOTI0ZWE2ZjdjNGE0NDBjYjAyZWI2NzZiMWRlODU5ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDkyNGVhNmY3YzRhNDQwY2IwMmViNjc2YjFkZTg1OWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYXVzMTI1NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYXVzYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MGRjYzZhZGQ3MzQ0YmZhODMyNjg1NmRkZjNjNzgwNy5zZXRDb250ZW50KGh0bWxfZDkyNGVhNmY3YzRhNDQwY2IwMmViNjc2YjFkZTg1OWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWU4ZGI0MTIxMGQ0NGE0ZDhhNjI2ZDU1ZTc0ZWUwYzIuYmluZFBvcHVwKHBvcHVwXzYwZGNjNmFkZDczNDRiZmE4MzI2ODU2ZGRmM2M3ODA3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YzljYzM4NjhlN2M0M2Q4YTZhY2IwNWNlMjg4MmJmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjk4ODgsIC05Mi41NDAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzg5ZjBiMzY0YjRmNGQxMjkxMDg4NWQ0YjYxNWQ3OTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQxMTM4MTU1Y2FiNDE5YzhjMzEyNDIzNmJlYWE4ZjkgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0MTEzODE1NWNhYjQxOWM4YzMxMjQyMzZiZWFhOGY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHVuaTEyNTIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVuaWNhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4OWYwYjM2NGI0ZjRkMTI5MTA4ODVkNGI2MTVkNzk5LnNldENvbnRlbnQoaHRtbF9kNDExMzgxNTVjYWI0MTljOGMzMTI0MjM2YmVhYThmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YzljYzM4NjhlN2M0M2Q4YTZhY2IwNWNlMjg4MmJmMS5iaW5kUG9wdXAocG9wdXBfYzg5ZjBiMzY0YjRmNGQxMjkxMDg4NWQ0YjYxNWQ3OTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmYjc0ZjZiMjE2MDQwMDQ5MjI5ODM0OTQ3YmU0MWI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuNTQ4MzYsIDE0OC45OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZThkZGQ1Y2NiYmQ0ZGI5ODA0NmMxYzdjNGIyOTBjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTk0NjhlYzYxNTQ0N2E0OGQ4YjNjNGZkYTIyZDA1MCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDk5NDY4ZWM2MTU0NDdhNDhkOGIzYzRmZGEyMmQwNTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hbmVtMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BbmVtPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlOGRkZDVjY2JiZDRkYjk4MDQ2YzFjN2M0YjI5MGM2LnNldENvbnRlbnQoaHRtbF80OTk0NjhlYzYxNTQ0N2E0OGQ4YjNjNGZkYTIyZDA1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZmI3NGY2YjIxNjA0MDA0OTIyOTgzNDk0N2JlNDFiOS5iaW5kUG9wdXAocG9wdXBfYWU4ZGRkNWNjYmJkNGRiOTgwNDZjMWM3YzRiMjkwYzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0MGEwMGZmNjdlMDQwZmM4MmQ4ODEwYTA4MzA3M2UwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEuMzY3OSwgMTMyLjU5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JlYjRmOGUwMjIxODQ2NGJiZjA4ODUyOTM4MjE2NDIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyMzE0YzcxOWIxMjQxYzI4NzQ3ZjBmMGE0NTc0MmY4ID0gJChgPGRpdiBpZD0iaHRtbF8xMjMxNGM3MTliMTI0MWMyODc0N2YwZjBhNDU3NDJmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21haWIxMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1heWJyYXQtS2Fyb248L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmViNGY4ZTAyMjE4NDY0YmJmMDg4NTI5MzgyMTY0MjIuc2V0Q29udGVudChodG1sXzEyMzE0YzcxOWIxMjQxYzI4NzQ3ZjBmMGE0NTc0MmY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc0MGEwMGZmNjdlMDQwZmM4MmQ4ODEwYTA4MzA3M2UwLmJpbmRQb3B1cChwb3B1cF9iZWI0ZjhlMDIyMTg0NjRiYmYwODg1MjkzODIxNjQyMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTA4NWFmMmNhY2ZkNDI2ODliOTU1YzM5NDdkN2Y4NTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5MGJlNzlhNmZkNzQ0ZTM4YTUxZmJhYWRiY2FlYjI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjMDg5MzhiNmU5NDQ5ZDBiYjE2ZjFiMmI2NGJhNWY4ID0gJChgPGRpdiBpZD0iaHRtbF82YzA4OTM4YjZlOTQ0OWQwYmIxNmYxYjJiNjRiYTVmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FtaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtaGFyaWM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjkwYmU3OWE2ZmQ3NDRlMzhhNTFmYmFhZGJjYWViMjcuc2V0Q29udGVudChodG1sXzZjMDg5MzhiNmU5NDQ5ZDBiYjE2ZjFiMmI2NGJhNWY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwODVhZjJjYWNmZDQyNjg5Yjk1NWMzOTQ3ZDdmODUzLmJpbmRQb3B1cChwb3B1cF82OTBiZTc5YTZmZDc0NGUzOGE1MWZiYWFkYmNhZWIyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmJhMzQxMDk5YWQyNGRmNjkzYjdiNWM3YjBhNWQ1ODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi42ODUwMDk5OTk5OTk5OTk3LCAxNDEuMjU3OTk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNTAzZmQ4MTM1ZDM0YTU2YjRmYjQwMTFlNTNhOWUzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zM2VjZWZiYjIwOGU0YTlmOWYxM2FhMWE4YTIwZjg1MiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzNlY2VmYmIyMDhlNGE5ZjlmMTNhYTFhOGEyMGY4NTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC92YW5pMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5WYW5pbW88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjUwM2ZkODEzNWQzNGE1NmI0ZmI0MDExZTUzYTllM2Euc2V0Q29udGVudChodG1sXzMzZWNlZmJiMjA4ZTRhOWY5ZjEzYWExYThhMjBmODUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZiYTM0MTA5OWFkMjRkZjY5M2I3YjVjN2IwYTVkNTgxLmJpbmRQb3B1cChwb3B1cF8yNTAzZmQ4MTM1ZDM0YTU2YjRmYjQwMTFlNTNhOWUzYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzQzZThlOTk3MTAyNGZhNWFmY2ExNzJjYjVjYzg1NTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS4wLCAzMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzBmMDRjZTk5ZDdmNDZmOGE0YjY1M2U3MGQ0YTI5NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjM4NjNhODRkNTcxNDk3OWE3NjljYjNkZjVhMTk4OWMgPSAkKGA8ZGl2IGlkPSJodG1sX2YzODYzYTg0ZDU3MTQ5NzlhNzY5Y2IzZGY1YTE5ODljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZWd5cDEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RWd5cHRpYW4gQXJhYmljPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwZjA0Y2U5OWQ3ZjQ2ZjhhNGI2NTNlNzBkNGEyOTc4LnNldENvbnRlbnQoaHRtbF9mMzg2M2E4NGQ1NzE0OTc5YTc2OWNiM2RmNWExOTg5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNDNlOGU5OTcxMDI0ZmE1YWZjYTE3MmNiNWNjODU1NC5iaW5kUG9wdXAocG9wdXBfNzBmMDRjZTk5ZDdmNDZmOGE0YjY1M2U3MGQ0YTI5NzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkYzIwYjYzYWY5ZDQwOWViNTUyMGE4NGNjNDI0YTQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNDI1NywgNDcuNDM4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiNmQ0Mzk5N2FmMDRlNmQ4Mjg3NWU2MzQwYTcyMTdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4MzU1OTA2MDQ2ZDQxODJhMTg0YmM2NmNkZjMyNmNjID0gJChgPGRpdiBpZD0iaHRtbF9kODM1NTkwNjA0NmQ0MTgyYTE4NGJjNjZjZGYzMjZjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2RhcmcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcnRoLUNlbnRyYWwgRGFyZ3dhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiNmQ0Mzk5N2FmMDRlNmQ4Mjg3NWU2MzQwYTcyMTdjLnNldENvbnRlbnQoaHRtbF9kODM1NTkwNjA0NmQ0MTgyYTE4NGJjNjZjZGYzMjZjYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZGMyMGI2M2FmOWQ0MDllYjU1MjBhODRjYzQyNGE0OS5iaW5kUG9wdXAocG9wdXBfMGI2ZDQzOTk3YWYwNGU2ZDgyODc1ZTYzNDBhNzIxN2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkNTc4MjAwYjlhMTRhOGU5NWUwNmI1Yjk5NDVlNzMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMjQzNiwgMzYuNjY2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzMGMxZmJhNzcxZTRlZGFhYTMyNTU1YzRhYTc3YmUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiZGZhYTk0OGYwODQwNWM5YWRmNDc2YmY0NDM5NDEzID0gJChgPGRpdiBpZD0iaHRtbF9iYmRmYWE5NDhmMDg0MDVjOWFkZjQ3NmJmNDQzOTQxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2JlamExMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJlamE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTMwYzFmYmE3NzFlNGVkYWFhMzI1NTVjNGFhNzdiZTIuc2V0Q29udGVudChodG1sX2JiZGZhYTk0OGYwODQwNWM5YWRmNDc2YmY0NDM5NDEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkNTc4MjAwYjlhMTRhOGU5NWUwNmI1Yjk5NDVlNzMxLmJpbmRQb3B1cChwb3B1cF81MzBjMWZiYTc3MWU0ZWRhYWEzMjU1NWM0YWE3N2JlMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDhlNzQyYTE2ODM1NGYxYmFiM2FiMWNkZWQxZTc3MTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjE0MDUsIDM1LjU3NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNzYxZjU0MTliZDM0MWZjYTNhYjM1YTZlMzM2ZjcyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OGZlMWZiYmY1NmE0ZDU4OWVkZjY2ZWUyNzhhNjJjOSA9ICQoYDxkaXYgaWQ9Imh0bWxfOThmZTFmYmJmNTZhNGQ1ODllZGY2NmVlMjc4YTYyYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9kaXppMTIzNSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5EaXppbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNzYxZjU0MTliZDM0MWZjYTNhYjM1YTZlMzM2ZjcyNy5zZXRDb250ZW50KGh0bWxfOThmZTFmYmJmNTZhNGQ1ODllZGY2NmVlMjc4YTYyYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDhlNzQyYTE2ODM1NGYxYmFiM2FiMWNkZWQxZTc3MTUuYmluZFBvcHVwKHBvcHVwXzA3NjFmNTQxOWJkMzQxZmNhM2FiMzVhNmUzMzZmNzI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMzgwNzJiODYwZjU0MmIzYjc1ZDIyNTUzMGRiYTA0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjAsIDM1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjE4ZjdiZDQ1Njc0OGNjYmRjYmQ3MDM1MzQ5MzFkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTg3NTRlMWUzZWU0ZGJmYjhhOTViZjNiMzc4YjkyNCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTk4NzU0ZTFlM2VlNGRiZmI4YTk1YmYzYjM3OGI5MjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oaXR0MTI0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IaXR0aXRlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiMThmN2JkNDU2NzQ4Y2NiZGNiZDcwMzUzNDkzMWRkLnNldENvbnRlbnQoaHRtbF85OTg3NTRlMWUzZWU0ZGJmYjhhOTViZjNiMzc4YjkyNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMzgwNzJiODYwZjU0MmIzYjc1ZDIyNTUzMGRiYTA0OC5iaW5kUG9wdXAocG9wdXBfMGIxOGY3YmQ0NTY3NDhjY2JkY2JkNzAzNTM0OTMxZGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjYTFhNWMzNDE5NDQ0MTFhZDg4ZDNkMzk5ZjViNDgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjA3NjUzLCAxMzQuMzI3Mjg5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YzY4NmE1NmFiMTk0YTllYTk0NjUwMDUzYmRkYjc2OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDVjNTFmY2EwNzk0ODg1YWFmMmEwODgyZjdkZGU1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWQ1YzUxZmNhMDc5NDg4NWFhZjJhMDg4MmY3ZGRlNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uYWthMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OYWthcmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGM2ODZhNTZhYjE5NGE5ZWE5NDY1MDA1M2JkZGI3Njguc2V0Q29udGVudChodG1sXzlkNWM1MWZjYTA3OTQ4ODVhYWYyYTA4ODJmN2RkZTVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjYTFhNWMzNDE5NDQ0MTFhZDg4ZDNkMzk5ZjViNDgzLmJpbmRQb3B1cChwb3B1cF84YzY4NmE1NmFiMTk0YTllYTk0NjUwMDUzYmRkYjc2OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmUxZTI1NjZhNzY2NDYxNTg3ZWM5ZWJjMjg3M2U2YjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy43ODAxLCAxNDMuMDU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTA1YTE5NWYxNGI3NDJlNGIwZjRkNzg4NzcyM2FlOWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVlNTA5MTRmMjNiNGJhMDhhZjA1MGE2MWY2NDU5MTkgPSAkKGA8ZGl2IGlkPSJodG1sXzVlZTUwOTE0ZjIzYjRiYTA4YWYwNTBhNjFmNjQ1OTE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYW1idTEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QW1idWxhczwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDVhMTk1ZjE0Yjc0MmU0YjBmNGQ3ODg3NzIzYWU5Yi5zZXRDb250ZW50KGh0bWxfNWVlNTA5MTRmMjNiNGJhMDhhZjA1MGE2MWY2NDU5MTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmUxZTI1NjZhNzY2NDYxNTg3ZWM5ZWJjMjg3M2U2YjIuYmluZFBvcHVwKHBvcHVwX2UwNWExOTVmMTRiNzQyZTRiMGY0ZDc4ODc3MjNhZTliKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGQ5ZmFkZWFiMjk0YmI1YjE4MWUxZDZmMWNlOTE4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjI0MzcsIC0xMTAuNDYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWZmYjVlZDJmNTg4NDU2ZTg3Y2UwNmFhN2MzMDkyNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWZiMGQ1ZGEzZTU1NDkxZWE5NWYyZjdmNTZkZjQyZDcgPSAkKGA8ZGl2IGlkPSJodG1sX2VmYjBkNWRhM2U1NTQ5MWVhOTVmMmY3ZjU2ZGY0MmQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGxhaTEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGxhaW5zIENyZWU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWZmYjVlZDJmNTg4NDU2ZTg3Y2UwNmFhN2MzMDkyNmQuc2V0Q29udGVudChodG1sX2VmYjBkNWRhM2U1NTQ5MWVhOTVmMmY3ZjU2ZGY0MmQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q4ZDlmYWRlYWIyOTRiYjViMTgxZTFkNmYxY2U5MThjLmJpbmRQb3B1cChwb3B1cF85ZmZiNWVkMmY1ODg0NTZlODdjZTA2YWE3YzMwOTI2ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2RiNGZlMmUwZWExNGQzMDkxNDU3YzFhMmVjODY2ZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS4xODMzLCA0OC4yMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGIyOGI1OGU1YTBiNDZjMmE4YTA3YTg2M2EwMGFlNjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWUzYmRkZjA5YjRmNDc4MGEwNzI3MzViZjg5YzkwMGIgPSAkKGA8ZGl2IGlkPSJodG1sXzFlM2JkZGYwOWI0ZjQ3ODBhMDcyNzM1YmY4OWM5MDBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZWxhbTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RWxhbWl0ZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YjI4YjU4ZTVhMGI0NmMyYThhMDdhODYzYTAwYWU2NS5zZXRDb250ZW50KGh0bWxfMWUzYmRkZjA5YjRmNDc4MGEwNzI3MzViZjg5YzkwMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2RiNGZlMmUwZWExNGQzMDkxNDU3YzFhMmVjODY2ZTcuYmluZFBvcHVwKHBvcHVwXzhiMjhiNThlNWEwYjQ2YzJhOGEwN2E4NjNhMDBhZTY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTNlZDM1YTAyZmU0YTk5YWQ3ODA5MTc1MmQ2YmViOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xLjUxMDQ4OTk5OTk5OTk5OTksIDEzMS45ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWRmYzU2ZTRmMmI0NmI3OWFjOTNiMmRmYTU3ZjU4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZWJiOTA3ODRiYjQ0NGQyYWNiZjNlNzlhODBjMmI0MyA9ICQoYDxkaXYgaWQ9Imh0bWxfNWViYjkwNzg0YmI0NDRkMmFjYmYzZTc5YTgwYzJiNDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90ZWhpMTIzNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UZWhpdDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZWRmYzU2ZTRmMmI0NmI3OWFjOTNiMmRmYTU3ZjU4MC5zZXRDb250ZW50KGh0bWxfNWViYjkwNzg0YmI0NDRkMmFjYmYzZTc5YTgwYzJiNDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWUzZWQzNWEwMmZlNGE5OWFkNzgwOTE3NTJkNmJlYjkuYmluZFBvcHVwKHBvcHVwXzdlZGZjNTZlNGYyYjQ2Yjc5YWM5M2IyZGZhNTdmNTgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MmY1ZmRjNWM5MDM0NjI0YTVjOGEwMTk2NzkxZWQwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01LjA3NDQ0LCAxNDEuNzMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDk0MjEzZWI4NzI0NDQ2MWFmM2E4NmYwODc0NDRmNGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzI4ZmQ3MmIwYWUyNDlmZWI0MGY4YzcwYzAzZjY0ODQgPSAkKGA8ZGl2IGlkPSJodG1sXzcyOGZkNzJiMGFlMjQ5ZmViNDBmOGM3MGMwM2Y2NDg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGVsZTEyNTYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGVsZWZvbDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOTQyMTNlYjg3MjQ0NDYxYWYzYTg2ZjA4NzQ0NGY0Yy5zZXRDb250ZW50KGh0bWxfNzI4ZmQ3MmIwYWUyNDlmZWI0MGY4YzcwYzAzZjY0ODQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTJmNWZkYzVjOTAzNDYyNGE1YzhhMDE5Njc5MWVkMDQuYmluZFBvcHVwKHBvcHVwX2Q5NDIxM2ViODcyNDQ0NjFhZjNhODZmMDg3NDQ0ZjRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Y2U3YmEyMDY0Yjg0ZWM2YWQ0YThjZjY4MjEwMWFiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjIxODYsIC03LjYxNTA4OTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMmNlNWM1M2RmM2Y0MzUyYjY4NjA4YmE2OWZiNzMzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNzY4ZDUzZGE3NmY0MTRkYjdlMTZhNjBlMTI3M2M5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTc2OGQ1M2RhNzZmNDE0ZGI3ZTE2YTYwZTEyNzNjOTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pcmlzMTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JcmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMmNlNWM1M2RmM2Y0MzUyYjY4NjA4YmE2OWZiNzMzYS5zZXRDb250ZW50KGh0bWxfMTc2OGQ1M2RhNzZmNDE0ZGI3ZTE2YTYwZTEyNzNjOTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWNlN2JhMjA2NGI4NGVjNmFkNGE4Y2Y2ODIxMDFhYmMuYmluZFBvcHVwKHBvcHVwX2EyY2U1YzUzZGYzZjQzNTJiNjg2MDhiYTY5ZmI3MzNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yODk0OTVmNmYwMWE0ZjQ0OGJkZTY3NzAwYmEyODBlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmQwMWRjZTlkNjg4NDVjMWIzNDJiZTMwODdkODk5MWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQyZTcxODI0ZWNkNGExYWFjNGIxNzk0ZjIyNDMxNmUgPSAkKGA8ZGl2IGlkPSJodG1sXzVkMmU3MTgyNGVjZDRhMWFhYzRiMTc5NGYyMjQzMTZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyODgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3BhbmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZDAxZGNlOWQ2ODg0NWMxYjM0MmJlMzA4N2Q4OTkxYy5zZXRDb250ZW50KGh0bWxfNWQyZTcxODI0ZWNkNGExYWFjNGIxNzk0ZjIyNDMxNmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjg5NDk1ZjZmMDFhNGY0NDhiZGU2NzcwMGJhMjgwZTUuYmluZFBvcHVwKHBvcHVwXzJkMDFkY2U5ZDY4ODQ1YzFiMzQyYmUzMDg3ZDg5OTFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTIyYmEzM2MwYTE0MmQxYmNmMDgxNzBmYzBhM2NlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjMsIDQ1LjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YTYyZGI1ZTYwYzU0ZjRhYTBjYjNkZmU3NmQ2OWQ0NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZDQ3MDZkM2M3ZWI0YmRjYTRiZDJmMTZjNmQ4YzRkNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGQ0NzA2ZDNjN2ViNGJkY2E0YmQyZjE2YzZkOGM0ZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zdW1lMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TdW1lcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTYyZGI1ZTYwYzU0ZjRhYTBjYjNkZmU3NmQ2OWQ0NS5zZXRDb250ZW50KGh0bWxfNGQ0NzA2ZDNjN2ViNGJkY2E0YmQyZjE2YzZkOGM0ZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTUyMmJhMzNjMGExNDJkMWJjZjA4MTcwZmMwYTNjZTEuYmluZFBvcHVwKHBvcHVwXzZhNjJkYjVlNjBjNTRmNGFhMGNiM2RmZTc2ZDY5ZDQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZTk2MGI1ZmI4NDE0MTYyODgyYWE4NDZlMzUxMjBkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01Ljc4NDAzMDAwMDAwMDAwMDQsIC02NC4yODAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2ZhZjhlN2RlODUyNDUxNDhkZTY0OTUzMGY5MWRhYWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWEyZTUwNWJhMTM1NGNmOGEyMTQ1OGQ5MTM2ZjA3M2IgPSAkKGA8ZGl2IGlkPSJodG1sXzVhMmU1MDViYTEzNTRjZjhhMjE0NThkOTEzNmYwNzNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGF1bTEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGF1bWFyaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZmFmOGU3ZGU4NTI0NTE0OGRlNjQ5NTMwZjkxZGFhYS5zZXRDb250ZW50KGh0bWxfNWEyZTUwNWJhMTM1NGNmOGEyMTQ1OGQ5MTM2ZjA3M2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGU5NjBiNWZiODQxNDE2Mjg4MmFhODQ2ZTM1MTIwZGEuYmluZFBvcHVwKHBvcHVwXzdmYWY4ZTdkZTg1MjQ1MTQ4ZGU2NDk1MzBmOTFkYWFhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYTkwNmVkMmVkMTY0ZjA2YTkwNGMzOThlY2U4MmFhYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01Ljc4NzI0LCAxNTQuODM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjE1NzM1OGMzNmE0NDJlYWI4ZmFjODVhMzllODdmZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjY4NmI5Y2Q5Njk5NDFkZjljZmM4YTFiODBmYTA1YTUgPSAkKGA8ZGl2IGlkPSJodG1sXzI2ODZiOWNkOTY5OTQxZGY5Y2ZjOGExYjgwZmEwNWE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcmFwbzEyMzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UmFwb2lzaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTU3MzU4YzM2YTQ0MmVhYjhmYWM4NWEzOWU4N2ZmZS5zZXRDb250ZW50KGh0bWxfMjY4NmI5Y2Q5Njk5NDFkZjljZmM4YTFiODBmYTA1YTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWE5MDZlZDJlZDE2NGYwNmE5MDRjMzk4ZWNlODJhYWMuYmluZFBvcHVwKHBvcHVwX2IxNTczNThjMzZhNDQyZWFiOGZhYzg1YTM5ZTg3ZmZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNDgxYTI4OTJiZGE0ZjZlOWEwNTljZTVkZTRjMzVlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI1LjAsIDc3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYzJjNDhlMGRiMTc0YTZhYmUzNWY3N2EwZmVjMmU0NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZGY1YjMyOTE3ZTI0MmZmODZhN2Y5MWE4YWRlNzg2NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYmRmNWIzMjkxN2UyNDJmZjg2YTdmOTFhOGFkZTc4NjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oaW5kMTI2OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IaW5kaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYzJjNDhlMGRiMTc0YTZhYmUzNWY3N2EwZmVjMmU0NC5zZXRDb250ZW50KGh0bWxfYmRmNWIzMjkxN2UyNDJmZjg2YTdmOTFhOGFkZTc4NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjQ4MWEyODkyYmRhNGY2ZTlhMDU5Y2U1ZGU0YzM1ZTUuYmluZFBvcHVwKHBvcHVwX2NjMmM0OGUwZGIxNzRhNmFiZTM1Zjc3YTBmZWMyZTQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYzBhODFhMDBlM2E0ZTg1YTNhN2Y0MGM1ZTQ0ZWRiMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjMxNjIsIC05NS45MjY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDMyZDZiODM5NzcyNGJiNDgyOTc3N2NmN2NmYTI1Y2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmIxM2JmMzhhMDZlNGI4MDgzZjE3NDU5NjY5NGFhYzYgPSAkKGA8ZGl2IGlkPSJodG1sX2ZiMTNiZjM4YTA2ZTRiODA4M2YxNzQ1OTY2OTRhYWM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGVhbDEyMzUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGVhbGFvIENoaW5hbnRlYzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MzJkNmI4Mzk3NzI0YmI0ODI5Nzc3Y2Y3Y2ZhMjVjZi5zZXRDb250ZW50KGh0bWxfZmIxM2JmMzhhMDZlNGI4MDgzZjE3NDU5NjY5NGFhYzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGMwYTgxYTAwZTNhNGU4NWEzYTdmNDBjNWU0NGVkYjAuYmluZFBvcHVwKHBvcHVwXzQzMmQ2YjgzOTc3MjRiYjQ4Mjk3NzdjZjdjZmEyNWNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYjAyYWVjM2UzMDU0ZjgxYmJmYzc4MGFlOWYzZmI5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ3LjkxMDYsIC0xMjQuNjAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDJlZDA2ZTM1MzlkNDcwNDk0OTA4NmJmNmQ2MjcxODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTkxNWQ2NTBhZjc4NDFjNjgwNzZlZDE5M2YzM2UwMGIgPSAkKGA8ZGl2IGlkPSJodG1sXzk5MTVkNjUwYWY3ODQxYzY4MDc2ZWQxOTNmMzNlMDBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcXVpbDEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UXVpbGV1dGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDJlZDA2ZTM1MzlkNDcwNDk0OTA4NmJmNmQ2MjcxODMuc2V0Q29udGVudChodG1sXzk5MTVkNjUwYWY3ODQxYzY4MDc2ZWQxOTNmMzNlMDBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiMDJhZWMzZTMwNTRmODFiYmZjNzgwYWU5ZjNmYjkxLmJpbmRQb3B1cChwb3B1cF80MmVkMDZlMzUzOWQ0NzA0OTQ5MDg2YmY2ZDYyNzE4MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDYwZjJiMjFmMWIwNDZhY2I1ZWU5ZWEyMzIyODBkMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS4wMzkxLCA4Ny4xNzkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmYwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGU3YTM3Mjc3YWU5NDk3NGI2ODdkZjQ5OTQwOTdjMDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM2NjA1NjY3NDY5NGQ3OWI0Y2ZiNmNhMzU1M2FlZGYgPSAkKGA8ZGl2IGlkPSJodG1sX2IzNjYwNTY2NzQ2OTRkNzliNGNmYjZjYTM1NTNhZWRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbXVuZDEzMjAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TXVuZGFyaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZTdhMzcyNzdhZTk0OTc0YjY4N2RmNDk5NDA5N2MwOC5zZXRDb250ZW50KGh0bWxfYjM2NjA1NjY3NDY5NGQ3OWI0Y2ZiNmNhMzU1M2FlZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDYwZjJiMjFmMWIwNDZhY2I1ZWU5ZWEyMzIyODBkMDAuYmluZFBvcHVwKHBvcHVwXzRlN2EzNzI3N2FlOTQ5NzRiNjg3ZGY0OTk0MDk3YzA4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYzEwMTMzYmUwNjU0MTdiOWQzZmNjY2I5YzIzOGI0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjc0MjgsIDQ2LjIyNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNjBiYWFkMmI4NjI0NWFjOWEyYzQ2YzdmNWI2YzY5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjU2ZmIyNmY1ZjE0MTVmOTU0NmM4MzVmMjVjZGU1ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNWI1NmZiMjZmNWYxNDE1Zjk1NDZjODM1ZjI1Y2RlNWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9naG9kMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Hb2RvYmVyaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNjBiYWFkMmI4NjI0NWFjOWEyYzQ2YzdmNWI2YzY5ZS5zZXRDb250ZW50KGh0bWxfNWI1NmZiMjZmNWYxNDE1Zjk1NDZjODM1ZjI1Y2RlNWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGMxMDEzM2JlMDY1NDE3YjlkM2ZjY2NiOWMyMzhiNGEuYmluZFBvcHVwKHBvcHVwX2Q2MGJhYWQyYjg2MjQ1YWM5YTJjNDZjN2Y1YjZjNjllKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTg0MDM5MmI1MDg0NDNkYjhmZjEyMjA4YzZkNTkyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjQyNTcsIDQ3LjQzODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMzM1YzlkN2IxZDU0MmJjYTkyYjM3NmVmY2QyMTM4ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTYzMjc4ZmE2ODM0NTkxODg3ZGQ1NDg5ZDI4YjVmZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWE2MzI3OGZhNjgzNDU5MTg4N2RkNTQ4OWQyOGI1ZmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9kYXJnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ob3J0aC1DZW50cmFsIERhcmd3YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzM1YzlkN2IxZDU0MmJjYTkyYjM3NmVmY2QyMTM4ZS5zZXRDb250ZW50KGh0bWxfZWE2MzI3OGZhNjgzNDU5MTg4N2RkNTQ4OWQyOGI1ZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTU4NDAzOTJiNTA4NDQzZGI4ZmYxMjIwOGM2ZDU5MmEuYmluZFBvcHVwKHBvcHVwXzAzMzVjOWQ3YjFkNTQyYmNhOTJiMzc2ZWZjZDIxMzhlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNWEyMDU0OThmOGY0Mzc1ODIxZGM0YmY0NzUwOTUxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNC43OTgyLCAxMzMuODAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmEwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWVkOTA0ZWNjNzY2NDA3YTlmOWFlZjFhNjQ1OGVjNjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzgwOGZkOTgzNWZkNDQ3YjkyNmE2YTIzMTk5MTEzNWYgPSAkKGA8ZGl2IGlkPSJodG1sX2M4MDhmZDk4MzVmZDQ0N2I5MjZhNmEyMzE5OTExMzVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFuZzEzODEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFuZ2FycmF5aTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZWQ5MDRlY2M3NjY0MDdhOWY5YWVmMWE2NDU4ZWM2MS5zZXRDb250ZW50KGh0bWxfYzgwOGZkOTgzNWZkNDQ3YjkyNmE2YTIzMTk5MTEzNWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDVhMjA1NDk4ZjhmNDM3NTgyMWRjNGJmNDc1MDk1MTcuYmluZFBvcHVwKHBvcHVwXzFlZDkwNGVjYzc2NjQwN2E5ZjlhZWYxYTY0NThlYzYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZTk5MmE5MTllYzE0NzhlYTM3MmY4Njk4MTUzZmY1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjE5OTQ4LCAzNS4yOTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmEwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODZkNzFhNWZjZGM1NDMxMDk1YmRmOGYwNzUxNGRjZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDY5NGI4N2FiNGQ3NDhmN2E5ZDU3NGRjYTZhYjE2NGUgPSAkKGA8ZGl2IGlkPSJodG1sX2Q2OTRiODdhYjRkNzQ4ZjdhOWQ1NzRkY2E2YWIxNjRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXJhcTEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXJhcXc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODZkNzFhNWZjZGM1NDMxMDk1YmRmOGYwNzUxNGRjZWUuc2V0Q29udGVudChodG1sX2Q2OTRiODdhYjRkNzQ4ZjdhOWQ1NzRkY2E2YWIxNjRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzllOTkyYTkxOWVjMTQ3OGVhMzcyZjg2OTgxNTNmZjU5LmJpbmRQb3B1cChwb3B1cF84NmQ3MWE1ZmNkYzU0MzEwOTViZGY4ZjA3NTE0ZGNlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Y0Y2IxYjJlNTc3NDBjZjgxMGFmZDQ1MDc0YzY5ZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuMDk2NiwgMjIuOTA4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5MDcxZjkxZDgxMTQ4NTc4ZTU2ZTdhODIyNjNiY2YwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmNzJmMTk4MWU3MTRiZDk5NmFmNjNkNmU3ZWNlZTRhID0gJChgPGRpdiBpZD0iaHRtbF9kZjcyZjE5ODFlNzE0YmQ5OTZhZjYzZDZlN2VjZWU0YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FuaWkxMjQ2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPi8vQW5pPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5MDcxZjkxZDgxMTQ4NTc4ZTU2ZTdhODIyNjNiY2YwLnNldENvbnRlbnQoaHRtbF9kZjcyZjE5ODFlNzE0YmQ5OTZhZjYzZDZlN2VjZWU0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZjRjYjFiMmU1Nzc0MGNmODEwYWZkNDUwNzRjNjlkNi5iaW5kUG9wdXAocG9wdXBfZTkwNzFmOTFkODExNDg1NzhlNTZlN2E4MjI2M2JjZjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkNmEzMDVhOGFmNjQwMmVhNDQ3YTJhNzc1MGI0MWRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIyLjA5MzksIDIwLjc0NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODM5Zjg1MjQzZWY0NzgxYTJhN2MxOWVhMTg0NzliZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjkzNzg1ZDNkMmE0MmI3OWRmMzBmMjY2ODc5ZjBkMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjY5Mzc4NWQzZDJhNDJiNzlkZjMwZjI2Njg3OWYwZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uYXJvMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OYXJvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4MzlmODUyNDNlZjQ3ODFhMmE3YzE5ZWExODQ3OWJkLnNldENvbnRlbnQoaHRtbF9iNjkzNzg1ZDNkMmE0MmI3OWRmMzBmMjY2ODc5ZjBkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZDZhMzA1YThhZjY0MDJlYTQ0N2EyYTc3NTBiNDFkZS5iaW5kUG9wdXAocG9wdXBfNzgzOWY4NTI0M2VmNDc4MWEyYTdjMTllYTE4NDc5YmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NhM2Q1MDQzMGQ0YzQ4OWE4NjZmM2EzNjFlOTQxMmUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNDI1NywgNDcuNDM4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmYTdkMWFhY2EwYzRmNzJhN2I2OGViY2NlOGRmMDhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjYTNhYzVlYzE2ZTQ3MTE5OGRmYzlmOGRjOThmZDc4ID0gJChgPGRpdiBpZD0iaHRtbF9kY2EzYWM1ZWMxNmU0NzExOThkZmM5ZjhkYzk4ZmQ3OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2RhcmcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcnRoLUNlbnRyYWwgRGFyZ3dhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmYTdkMWFhY2EwYzRmNzJhN2I2OGViY2NlOGRmMDhjLnNldENvbnRlbnQoaHRtbF9kY2EzYWM1ZWMxNmU0NzExOThkZmM5ZjhkYzk4ZmQ3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYTNkNTA0MzBkNGM0ODlhODY2ZjNhMzYxZTk0MTJlMi5iaW5kUG9wdXAocG9wdXBfZGZhN2QxYWFjYTBjNGY3MmE3YjY4ZWJjY2U4ZGYwOGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjMWEyZDVmOGI0MjQyOWRhMTEyNTlhYmM0MTJkY2Y5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguNjQ4OTk5OTk5OTk5OTk0LCAxMi40Njc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmEwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmVhZDdmZGUyZDI4NDFjNDk0NDcxNTFjNDdkOTZlMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzgxOGI3NDg2YTVkNDA1ZGI0MjExNzEzODdhN2U1YjUgPSAkKGA8ZGl2IGlkPSJodG1sXzc4MThiNzQ4NmE1ZDQwNWRiNDIxMTcxMzg3YTdlNWI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2VybWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JlYWQ3ZmRlMmQyODQxYzQ5NDQ3MTUxYzQ3ZDk2ZTIzLnNldENvbnRlbnQoaHRtbF83ODE4Yjc0ODZhNWQ0MDVkYjQyMTE3MTM4N2E3ZTViNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYzFhMmQ1ZjhiNDI0MjlkYTExMjU5YWJjNDEyZGNmOS5iaW5kUG9wdXAocG9wdXBfYmVhZDdmZGUyZDI4NDFjNDk0NDcxNTFjNDdkOTZlMjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5ZDU4ZmZlZTQ2ODQzNmJhMmIyZTU1M2VhNjk1ZjQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMS4wMDc0MiwgMTI3LjQ5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViMmI5ZmUxMThjMTQyZTVhYzQ5ODFiYzI2MTEwZDM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4ZDkyMzVlMzlhNDRkYzJhYzBmOGMxYWJlYzAwOTRmID0gJChgPGRpdiBpZD0iaHRtbF82OGQ5MjM1ZTM5YTQ0ZGMyYWMwZjhjMWFiZWMwMDk0ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NhaHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNhaHU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWIyYjlmZTExOGMxNDJlNWFjNDk4MWJjMjYxMTBkMzkuc2V0Q29udGVudChodG1sXzY4ZDkyMzVlMzlhNDRkYzJhYzBmOGMxYWJlYzAwOTRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk5ZDU4ZmZlZTQ2ODQzNmJhMmIyZTU1M2VhNjk1ZjQxLmJpbmRQb3B1cChwb3B1cF9lYjJiOWZlMTE4YzE0MmU1YWM0OTgxYmMyNjExMGQzOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzY2MmRlZTMzOTZmNGZlMDhmMTUxOWRhM2JjNTIyZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmEwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDY0ZmEzOTdmNWQ3NGQ1YzlmOTg3NmQ2NDdjMzFhMjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGFlZmJiYTZhMzMxNDU0MmFhNWE1MmQ0MDFiNTE5ZmQgPSAkKGA8ZGl2IGlkPSJodG1sXzBhZWZiYmE2YTMzMTQ1NDJhYTVhNTJkNDAxYjUxOWZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcnVzczEyNjMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UnVzc2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNjRmYTM5N2Y1ZDc0ZDVjOWY5ODc2ZDY0N2MzMWEyMi5zZXRDb250ZW50KGh0bWxfMGFlZmJiYTZhMzMxNDU0MmFhNWE1MmQ0MDFiNTE5ZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzY2MmRlZTMzOTZmNGZlMDhmMTUxOWRhM2JjNTIyZjAuYmluZFBvcHVwKHBvcHVwX2Q2NGZhMzk3ZjVkNzRkNWM5Zjk4NzZkNjQ3YzMxYTIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MzRjYTc2NTM4YmE0N2E3YTZiYzRhMDdiMzJhZTExOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yNS4wNzQ3LCAxNy45NzY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmEwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGYyMzYzMDJhMWEzNDAyZTgzMTdjMGZhZWZmZjA4OWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjgzMzFhM2E5M2QxNGQ4YzliZTMzN2Q0ZDA0OWRiMmEgPSAkKGA8ZGl2IGlkPSJodG1sX2Y4MzMxYTNhOTNkMTRkOGM5YmUzMzdkNGQwNDlkYjJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbmFtYTEyNjQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TmFtYSAoTmFtaWJpYSk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGYyMzYzMDJhMWEzNDAyZTgzMTdjMGZhZWZmZjA4OWEuc2V0Q29udGVudChodG1sX2Y4MzMxYTNhOTNkMTRkOGM5YmUzMzdkNGQwNDlkYjJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzNGNhNzY1MzhiYTQ3YTdhNmJjNGEwN2IzMmFlMTE5LmJpbmRQb3B1cChwb3B1cF84ZjIzNjMwMmExYTM0MDJlODMxN2MwZmFlZmZmMDg5YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGFhOGRmOTQxNDM3NGJlZmEyNzQwMzc0ZThhOWY3ZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2My43NTUxLCA4Ny41NDY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmEwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2U0ZDllZDk1NDJhNDc1MmJhMTgzYjFkY2NiNmUwZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2ZhMjY5NGI0OGVkNGQxYjhiN2EzODQzNGQ2NjMzNjcgPSAkKGA8ZGl2IGlkPSJodG1sXzdmYTI2OTRiNDhlZDRkMWI4YjdhMzg0MzRkNjYzMzY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2V0dDEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2V0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlNGQ5ZWQ5NTQyYTQ3NTJiYTE4M2IxZGNjYjZlMGY3LnNldENvbnRlbnQoaHRtbF83ZmEyNjk0YjQ4ZWQ0ZDFiOGI3YTM4NDM0ZDY2MzM2Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YWE4ZGY5NDE0Mzc0YmVmYTI3NDAzNzRlOGE5ZjdmMS5iaW5kUG9wdXAocG9wdXBfM2U0ZDllZDk1NDJhNDc1MmJhMTgzYjFkY2NiNmUwZjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZjMmU5OWQwNDI5ZDQ2ZmRhNmMyN2YzYmQ2MWIxMTEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNjUwMSwgNDYuMzE1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0MDNiNmJhZmZmMjRhZjViNTZiYjRkMTc4YjRiZDZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4N2Y3NDQyMDM1ZTRlMmNhOGU0YjgyM2EwNzJiNzc1ID0gJChgPGRpdiBpZD0iaHRtbF9iODdmNzQ0MjAzNWU0ZTJjYThlNGI4MjNhMDcyYjc3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thcmExNDc0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthcmF0YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNDAzYjZiYWZmZjI0YWY1YjU2YmI0ZDE3OGI0YmQ2YS5zZXRDb250ZW50KGh0bWxfYjg3Zjc0NDIwMzVlNGUyY2E4ZTRiODIzYTA3MmI3NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmMyZTk5ZDA0MjlkNDZmZGE2YzI3ZjNiZDYxYjExMTAuYmluZFBvcHVwKHBvcHVwX2M0MDNiNmJhZmZmMjRhZjViNTZiYjRkMTc4YjRiZDZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjk2NDhhZjMwZTA0ZTBkYmIzNDMwZGM2Nzg2ZTAwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMyMjQsIDI0Ljg2OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODMwMjdkNTNjODc0NGE0OTFhNjdiMGFjZmVhYTJlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNjYxMTE2NjE0NGE0MWY3OTFlMjBmOTNhYjg3ZjllMyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzY2MTExNjYxNDRhNDFmNzkxZTIwZjkzYWI4N2Y5ZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tb2RlMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Nb2Rlcm4gR3JlZWs8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDgzMDI3ZDUzYzg3NDRhNDkxYTY3YjBhY2ZlYWEyZTEuc2V0Q29udGVudChodG1sX2M2NjExMTY2MTQ0YTQxZjc5MWUyMGY5M2FiODdmOWUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViOTY0OGFmMzBlMDRlMGRiYjM0MzBkYzY3ODZlMDBkLmJpbmRQb3B1cChwb3B1cF9kODMwMjdkNTNjODc0NGE0OTFhNjdiMGFjZmVhYTJlMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDVkYjYwMmQwOGZmNDEzNzllYTM2NGM2MjQyYTY2NzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi45NzUwMzk5OTk5OTk5OTksIDE0MS4zNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNDVhYmU3ZGYxZTM0MzU1OWQzMDIxY2UzNjA5YjlmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzM4MTBmMTIwOTk0OWRjYjc5ZTBkM2EyZjEzOGY3OSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2MzODEwZjEyMDk5NDlkY2I3OWUwZDNhMmYxMzhmNzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rdW5pMTI2NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LdW5pLUJvYXppPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0NWFiZTdkZjFlMzQzNTU5ZDMwMjFjZTM2MDliOWY5LnNldENvbnRlbnQoaHRtbF9jYzM4MTBmMTIwOTk0OWRjYjc5ZTBkM2EyZjEzOGY3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNWRiNjAyZDA4ZmY0MTM3OWVhMzY0YzYyNDJhNjY3My5iaW5kUG9wdXAocG9wdXBfYjQ1YWJlN2RmMWUzNDM1NTlkMzAyMWNlMzYwOWI5ZjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg2NjRhODQwN2Y4YTQ1NDRhOGUyYjEwMWE0NTI0MjZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTkuMDU1NjksIDE1OS4xMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTUyZjlhNThmN2Q0YTE5YjNmMWU4NzI2OTlmOTY3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZDQ5NzllNzg5ZjU0NWM2YmZkNzEzMzMyZTYxZGYwMCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2Q0OTc5ZTc4OWY1NDVjNmJmZDcxMzMzMmU2MWRmMDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sYXZ1MTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MYXZ1a2FsZXZlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhNTJmOWE1OGY3ZDRhMTliM2YxZTg3MjY5OWY5NjdjLnNldENvbnRlbnQoaHRtbF9jZDQ5NzllNzg5ZjU0NWM2YmZkNzEzMzMyZTYxZGYwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NjY0YTg0MDdmOGE0NTQ0YThlMmIxMDFhNDUyNDI2ZS5iaW5kUG9wdXAocG9wdXBfMmE1MmY5YTU4ZjdkNGExOWIzZjFlODcyNjk5Zjk2N2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiYjAzMjY2MDIwYTQ0ZmJhYzMzYjcwODcxYTcyYWNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEwLjY5OTQ4LCAtNjQuNTYxNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZTk0ZTcwMTFkNzE0Nzg3YTgxMWFhMTgwNjgyY2IxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWQ5ZjAzMzA1NzY0N2FhYmI4MmEyOGIyNTY4NjE2NCA9ICQoYDxkaXYgaWQ9Imh0bWxfNGFkOWYwMzMwNTc2NDdhYWJiODJhMjhiMjU2ODYxNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93YXJpMTI2OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XYXJpJzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZTk0ZTcwMTFkNzE0Nzg3YTgxMWFhMTgwNjgyY2IxNi5zZXRDb250ZW50KGh0bWxfNGFkOWYwMzMwNTc2NDdhYWJiODJhMjhiMjU2ODYxNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWJiMDMyNjYwMjBhNDRmYmFjMzNiNzA4NzFhNzJhY2YuYmluZFBvcHVwKHBvcHVwXzBlOTRlNzAxMWQ3MTQ3ODdhODExYWExODA2ODJjYjE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYzI1N2E0YzM0NmI0ZGQwOTFiMTM0NDYxZmYxNzgzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuMTg4NTMsIDkyLjc2NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83M2FmYjcyZTIyYjI0YjBkOGY0OThlZDczNzcyZmU2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMDA4ODIxMDllYzc0MGU2YTAxMmYwMDY1NTIyNjIwOSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTAwODgyMTA5ZWM3NDBlNmEwMTJmMDA2NTUyMjYyMDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jYXJuMTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DYXIgTmljb2JhcmVzZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83M2FmYjcyZTIyYjI0YjBkOGY0OThlZDczNzcyZmU2Ni5zZXRDb250ZW50KGh0bWxfMTAwODgyMTA5ZWM3NDBlNmEwMTJmMDA2NTUyMjYyMDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGMyNTdhNGMzNDZiNGRkMDkxYjEzNDQ2MWZmMTc4M2IuYmluZFBvcHVwKHBvcHVwXzczYWZiNzJlMjJiMjRiMGQ4ZjQ5OGVkNzM3NzJmZTY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDBhYzE4OTNlMjc0MzljOTc3ZGE4YjZlMzQzNWExOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjU4NzgsIDc2LjExOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OTZjZjc2MGRjMTA0ZTZjODcwZGQ5YmU1YzUyY2U1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMWFmZDhmMGY4ZTY0YjIwYmZmZmViMTllYWEyNmQzNSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTFhZmQ4ZjBmOGU2NGIyMGJmZmZlYjE5ZWFhMjZkMzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwNSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYW5uYWRhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5NmNmNzYwZGMxMDRlNmM4NzBkZDliZTVjNTJjZTUyLnNldENvbnRlbnQoaHRtbF9hMWFmZDhmMGY4ZTY0YjIwYmZmZmViMTllYWEyNmQzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDBhYzE4OTNlMjc0MzljOTc3ZGE4YjZlMzQzNWExOC5iaW5kUG9wdXAocG9wdXBfNzk2Y2Y3NjBkYzEwNGU2Yzg3MGRkOWJlNWM1MmNlNTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3M2E0ZDRmYmQzNjQ5ZDNiY2QzZWYzMDNlMTZkZWQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4xNzk4NiwgNS41MTcwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkMDBkMDJkNDFjMzQ1YmM4ZWY1YzY3MTg1MjcxODgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzOGQ1YTAyOTJhNDQyNTU5N2Y4YWFmMmM1MTkwOGM2ID0gJChgPGRpdiBpZD0iaHRtbF9iMzhkNWEwMjkyYTQ0MjU1OTdmOGFhZjJjNTE5MDhjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2l6b24xMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkl6b248L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGQwMGQwMmQ0MWMzNDViYzhlZjVjNjcxODUyNzE4ODIuc2V0Q29udGVudChodG1sX2IzOGQ1YTAyOTJhNDQyNTU5N2Y4YWFmMmM1MTkwOGM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ3M2E0ZDRmYmQzNjQ5ZDNiY2QzZWYzMDNlMTZkZWQyLmJpbmRQb3B1cChwb3B1cF80ZDAwZDAyZDQxYzM0NWJjOGVmNWM2NzE4NTI3MTg4MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjBhNDBkZTEwYTc5NDQ4ZTg3YTE4MmUwNzA3ODc3YWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuMDk0MSwgMTMxLjIzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E2ZWRlNDgxOWRkOTQxNmY5NzAxOGNmMGM5OTJjNzE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmM2EyZjgyY2YxZjRiOWViN2Q2Yjk5YmNkNGExZjIwID0gJChgPGRpdiBpZD0iaHRtbF9jZjNhMmY4MmNmMWY0YjllYjdkNmI5OWJjZDRhMWYyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dhcmExMjkwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldhcnJheTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNmVkZTQ4MTlkZDk0MTZmOTcwMThjZjBjOTkyYzcxNS5zZXRDb250ZW50KGh0bWxfY2YzYTJmODJjZjFmNGI5ZWI3ZDZiOTliY2Q0YTFmMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjBhNDBkZTEwYTc5NDQ4ZTg3YTE4MmUwNzA3ODc3YWQuYmluZFBvcHVwKHBvcHVwX2E2ZWRlNDgxOWRkOTQxNmY5NzAxOGNmMGM5OTJjNzE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NGY1M2MxMWUyNmI0ZGUyOTFhMjJjM2U5YzdlOGE4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy44MTE1LCAtNjUuNjM0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwMjczYmVmMDllNzRhMmI5OWNiYmEyZWUzNGRjOGYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlYzNkMDgzYjBiNDRlOGQ5NzAzNjhkMDM0MzQ1OTE0ID0gJChgPGRpdiBpZD0iaHRtbF83ZWMzZDA4M2IwYjQ0ZThkOTcwMzY4ZDAzNDM0NTkxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21vdmkxMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1vdmltYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMDI3M2JlZjA5ZTc0YTJiOTljYmJhMmVlMzRkYzhmMi5zZXRDb250ZW50KGh0bWxfN2VjM2QwODNiMGI0NGU4ZDk3MDM2OGQwMzQzNDU5MTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTRmNTNjMTFlMjZiNGRlMjkxYTIyYzNlOWM3ZThhOGEuYmluZFBvcHVwKHBvcHVwX2QwMjczYmVmMDllNzRhMmI5OWNiYmEyZWUzNGRjOGYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzE1NjhlMDAyZTE0OTBmYTM0MzFkZDYwMDVkOWEyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01NC4wLCAtNjguNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZlMjliYjY4OTMxZjQwYmRhNGYzNDIzZjUwNWUyYWNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjMmU1MWRjZDBkOTQ0NGNhYjcyODY0NWM1NGVkNDAwID0gJChgPGRpdiBpZD0iaHRtbF82YzJlNTFkY2QwZDk0NDRjYWI3Mjg2NDVjNTRlZDQwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL29uYWExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNlbGsnbmFtPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlMjliYjY4OTMxZjQwYmRhNGYzNDIzZjUwNWUyYWNjLnNldENvbnRlbnQoaHRtbF82YzJlNTFkY2QwZDk0NDRjYWI3Mjg2NDVjNTRlZDQwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMzE1NjhlMDAyZTE0OTBmYTM0MzFkZDYwMDVkOWEyNi5iaW5kUG9wdXAocG9wdXBfZmUyOWJiNjg5MzFmNDBiZGE0ZjM0MjNmNTA1ZTJhY2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0Nzg0YzE4YzY1YjQzMzViNWM0OGRjMjZmN2ZjZDA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjMzOTgsIDEzMy4zNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOTYzMTBlNWNjNTc0OTg2OTY4YzhjYmFlMGE1MTg3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTYwNGMzZDUzZDc0YWFiOWY2ZWRjZTE0ZDJiY2NhZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGU2MDRjM2Q1M2Q3NGFhYjlmNmVkY2UxNGQyYmNjYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ndW53MTI1MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CaW5pbmogS3VuLVdvazwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOTYzMTBlNWNjNTc0OTg2OTY4YzhjYmFlMGE1MTg3ZS5zZXRDb250ZW50KGh0bWxfZGU2MDRjM2Q1M2Q3NGFhYjlmNmVkY2UxNGQyYmNjYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTQ3ODRjMThjNjViNDMzNWI1YzQ4ZGMyNmY3ZmNkMDYuYmluZFBvcHVwKHBvcHVwXzI5NjMxMGU1Y2M1NzQ5ODY5NjhjOGNiYWUwYTUxODdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYWVmOGUwMTMwNDg0MGNiODMxNDM0MTVlNzk0ZWMxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi41MTc2LCAxMzIuNjQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNlOGNlY2MzMTRiNDhjNmI5N2EzMjY5ZTVmZjRjZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDAzNmRlYzU3NjQ5NDQwNTg3ZGFlZGI0MjYwNWUxYzkgPSAkKGA8ZGl2IGlkPSJodG1sXzAwMzZkZWM1NzY0OTQ0MDU4N2RhZWRiNDI2MDVlMWM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZ2FnYTEyNTEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2FhZ3VkanU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjNlOGNlY2MzMTRiNDhjNmI5N2EzMjY5ZTVmZjRjZWEuc2V0Q29udGVudChodG1sXzAwMzZkZWM1NzY0OTQ0MDU4N2RhZWRiNDI2MDVlMWM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZhZWY4ZTAxMzA0ODQwY2I4MzE0MzQxNWU3OTRlYzEwLmJpbmRQb3B1cChwb3B1cF82M2U4Y2VjYzMxNGI0OGM2Yjk3YTMyNjllNWZmNGNlYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTM0MmMxMDBlZjQ2NDI1YWE1MzYxMDg4N2RkNzI1ZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuNDUxNiwgMTQ1LjU0Mzk5OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQyNTI5MTY4ZWRjNGFiYTg0YmZmY2JlNDkwNzViMTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGY2OGNmY2Q0ZjgyNGExYzg2MTY1Y2Q4YWJiMmE0OTcgPSAkKGA8ZGl2IGlkPSJodG1sXzhmNjhjZmNkNGY4MjRhMWM4NjE2NWNkOGFiYjJhNDk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZHlpcjEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RHlpcmJhbDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDI1MjkxNjhlZGM0YWJhODRiZmZjYmU0OTA3NWIxNS5zZXRDb250ZW50KGh0bWxfOGY2OGNmY2Q0ZjgyNGExYzg2MTY1Y2Q4YWJiMmE0OTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTM0MmMxMDBlZjQ2NDI1YWE1MzYxMDg4N2RkNzI1ZTkuYmluZFBvcHVwKHBvcHVwXzRkMjUyOTE2OGVkYzRhYmE4NGJmZmNiZTQ5MDc1YjE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODI1YWIyZDQ1NTQ0MGY1YWI4NmNiZTJkMjgyNmY2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yOC4zNDU4LCAxNTIuODU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTQ5NWFkYThlMjYwNDcwMGJjNDU1OTU2MDIzMGFjMGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2FiMzc0OTMxMDI5NGUwNDgwYjc3ZGM5MWY4ZGU1YmUgPSAkKGA8ZGl2IGlkPSJodG1sX2NhYjM3NDkzMTAyOTRlMDQ4MGI3N2RjOTFmOGRlNWJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYmFuZDEzMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QmFuZGphbGFuZ2ljPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0OTVhZGE4ZTI2MDQ3MDBiYzQ1NTk1NjAyMzBhYzBiLnNldENvbnRlbnQoaHRtbF9jYWIzNzQ5MzEwMjk0ZTA0ODBiNzdkYzkxZjhkZTViZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ODI1YWIyZDQ1NTQ0MGY1YWI4NmNiZTJkMjgyNmY2Ny5iaW5kUG9wdXAocG9wdXBfYTQ5NWFkYThlMjYwNDcwMGJjNDU1OTU2MDIzMGFjMGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0ODA4OTQ2NjAwZjRkOWU4OTY1YmJjNjMwMDMzNWI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjQyOTQsIDEzMS44NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZjI0NGI1ODE2NTE0NjNmOWMyZGNlYzQxNGQ5ZTBmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYzdmMmJiMTE3ZjY0YWQ4YTUxY2ViMjhiZDJiYWY1MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMGM3ZjJiYjExN2Y2NGFkOGE1MWNlYjI4YmQyYmFmNTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMyNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MaW1pbG5nYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2YyNDRiNTgxNjUxNDYzZjljMmRjZWM0MTRkOWUwZjYuc2V0Q29udGVudChodG1sXzBjN2YyYmIxMTdmNjRhZDhhNTFjZWIyOGJkMmJhZjUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0ODA4OTQ2NjAwZjRkOWU4OTY1YmJjNjMwMDMzNWI2LmJpbmRQb3B1cChwb3B1cF83ZjI0NGI1ODE2NTE0NjNmOWMyZGNlYzQxNGQ5ZTBmNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2I4ZjM5OGM4NDQ2NGJmNjk4OWJiOWU3ZGEzN2RjZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNi4yMTYxLCA3NC44MjM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzJkODk5NTdhZGJkNDg5Yjk3ZmE4ZjVkODUwYTMxYmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ5M2JlZTg0ZTBiNGYxOGIwZDMwNTIzODJmOWMyNzkgPSAkKGA8ZGl2IGlkPSJodG1sXzM0OTNiZWU4NGUwYjRmMThiMGQzMDUyMzgyZjljMjc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnVydTEyOTYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnVydXNoYXNraTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMmQ4OTk1N2FkYmQ0ODliOTdmYThmNWQ4NTBhMzFiZC5zZXRDb250ZW50KGh0bWxfMzQ5M2JlZTg0ZTBiNGYxOGIwZDMwNTIzODJmOWMyNzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2I4ZjM5OGM4NDQ2NGJmNjk4OWJiOWU3ZGEzN2RjZjguYmluZFBvcHVwKHBvcHVwX2MyZDg5OTU3YWRiZDQ4OWI5N2ZhOGY1ZDg1MGEzMWJkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YzNlZjYyMmFiNGI0NThlYTkwM2JkOGY2ZjYyYmExZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQzODc0MiwgLTc1LjcwODEwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y1MCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhYjdmOWZiNzc1OTQzZWZhOTUzMmUyNzY0YzVkZWI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiY2E4NDdjMTUxYTQ3ZGQ5MjFkODZkNDYzZTM4MzVkID0gJChgPGRpdiBpZD0iaHRtbF82YmNhODQ3YzE1MWE0N2RkOTIxZDg2ZDQ2M2UzODM1ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL29uZWkxMjQ5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk9uZWlkYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYWI3ZjlmYjc3NTk0M2VmYTk1MzJlMjc2NGM1ZGViOS5zZXRDb250ZW50KGh0bWxfNmJjYTg0N2MxNTFhNDdkZDkyMWQ4NmQ0NjNlMzgzNWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2MzZWY2MjJhYjRiNDU4ZWE5MDNiZDhmNmY2MmJhMWYuYmluZFBvcHVwKHBvcHVwX2RhYjdmOWZiNzc1OTQzZWZhOTUzMmUyNzY0YzVkZWI5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjNlZWQ3NzcxMTk0ZDk1OGY5MjcxZmVlZDVhODIzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjEzMjgsIDQ3LjA4MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzU0YmVhMGRlMmI0OTBiOTRhMDVmNjM5ZTBlOGVmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kY2JiMzQ2N2YzYTE0NGU0YjM1MWY5YWVhNWI5NTc5YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZGNiYjM0NjdmM2ExNDRlNGIzNTFmOWFlYTViOTU3OWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sYWtrMTI1MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MYWs8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWM1NGJlYTBkZTJiNDkwYjk0YTA1ZjYzOWUwZThlZjQuc2V0Q29udGVudChodG1sX2RjYmIzNDY3ZjNhMTQ0ZTRiMzUxZjlhZWE1Yjk1NzliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiM2VlZDc3NzExOTRkOTU4ZjkyNzFmZWVkNWE4MjNjLmJpbmRQb3B1cChwb3B1cF8xYzU0YmVhMGRlMmI0OTBiOTRhMDVmNjM5ZTBlOGVmNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjVjMDQyM2ZhOWMxNDE3ZGE3NDYxNjExNzFhMjU4ZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS41OTE2LCA0Ni44ODU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDI4NTJjODA1ZjBlNGU0ZDkyNzZlNDQzYjAwYjlmNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjNiOWE0NjIzYzllNDcyM2IzZGM5NWVmY2NmYjlhOWUgPSAkKGA8ZGl2IGlkPSJodG1sXzYzYjlhNDYyM2M5ZTQ3MjNiM2RjOTVlZmNjZmI5YTllIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHNhazEyNDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHNha2h1cjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80Mjg1MmM4MDVmMGU0ZTRkOTI3NmU0NDNiMDBiOWY1Yi5zZXRDb250ZW50KGh0bWxfNjNiOWE0NjIzYzllNDcyM2IzZGM5NWVmY2NmYjlhOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjVjMDQyM2ZhOWMxNDE3ZGE3NDYxNjExNzFhMjU4ZDEuYmluZFBvcHVwKHBvcHVwXzQyODUyYzgwNWYwZTRlNGQ5Mjc2ZTQ0M2IwMGI5ZjViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOWU4ZWE2Zjk4YjI0M2MyOGJiNjQ4MjgyOWJhYWYyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMyMzksIDQ2LjgyNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Zjk1OGQ0ZTk5ODI0MjIwOTE0MGNhMzIxMGQ4NjMyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjExMGViZDc4NGQ0NzAwODI1NGY5Yjc1YWFhMGZhNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDYxMTBlYmQ3ODRkNDcwMDgyNTRmOWI3NWFhYTBmYTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hcmNoMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BcmNoaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Zjk1OGQ0ZTk5ODI0MjIwOTE0MGNhMzIxMGQ4NjMyMC5zZXRDb250ZW50KGh0bWxfMDYxMTBlYmQ3ODRkNDcwMDgyNTRmOWI3NWFhYTBmYTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTllOGVhNmY5OGIyNDNjMjhiYjY0ODI4MjliYWFmMjkuYmluZFBvcHVwKHBvcHVwXzhmOTU4ZDRlOTk4MjQyMjA5MTQwY2EzMjEwZDg2MzIwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMTZmYmE3Njc3ZTk0OTJmYjAxOGM3ZDhmZDAyM2M1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjE4MDEsIDQ4LjA1NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzNmZDYwYTIwMTg0MmUxOTE0ZjI1YmZjYTkxYTk2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTcxZGQ0MGM1ZjU0NzFmYmMxNzA5MzRhMmM5YmNkNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTU3MWRkNDBjNWY1NDcxZmJjMTcwOTM0YTJjOWJjZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raGluMTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaGluYWx1Z2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjMzZmQ2MGEyMDE4NDJlMTkxNGYyNWJmY2E5MWE5NjUuc2V0Q29udGVudChodG1sXzE1NzFkZDQwYzVmNTQ3MWZiYzE3MDkzNGEyYzliY2Q2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxNmZiYTc2NzdlOTQ5MmZiMDE4YzdkOGZkMDIzYzU1LmJpbmRQb3B1cChwb3B1cF8yMzNmZDYwYTIwMTg0MmUxOTE0ZjI1YmZjYTkxYTk2NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTYxNzMxMzdiYmY0NDQzMmE0YWNkMjQ2MDExNTFjYzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuMTY1LCAxMzMuNjU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQ3ZTJiZTQ2MGFhNDE1MTg0MTY2Y2U5NGQ5ZjgxOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTM3MjcwMjg1Mzg2NGRiYWE5NWQ0MDk2ZjQzZDAxMjMgPSAkKGA8ZGl2IGlkPSJodG1sXzUzNzI3MDI4NTM4NjRkYmFhOTVkNDA5NmY0M2QwMTIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZGppbjEyNTEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmluZ3VsdTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDdlMmJlNDYwYWE0MTUxODQxNjZjZTk0ZDlmODE5MS5zZXRDb250ZW50KGh0bWxfNTM3MjcwMjg1Mzg2NGRiYWE5NWQ0MDk2ZjQzZDAxMjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTYxNzMxMzdiYmY0NDQzMmE0YWNkMjQ2MDExNTFjYzkuYmluZFBvcHVwKHBvcHVwXzRkN2UyYmU0NjBhYTQxNTE4NDE2NmNlOTRkOWY4MTkxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYTAwMDUxYTViN2M0YjE5YTVhMjc3ZmMwNWFmYWNkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy4yOTczLCAxMzAuNjE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDVjYzFlZGJmNDA4NDk1MDllZjI2ZGI5ZTVmN2VmOGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjcxMDMyYjhiZTJjNDM1YzhiZTNkZTczYTFmMTJmY2YgPSAkKGA8ZGl2IGlkPSJodG1sXzI3MTAzMmI4YmUyYzQzNWM4YmUzZGU3M2ExZjEyZmNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbXVsbDEyMzciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TXVsbHVrbXVsbHVrPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1Y2MxZWRiZjQwODQ5NTA5ZWYyNmRiOWU1ZjdlZjhlLnNldENvbnRlbnQoaHRtbF8yNzEwMzJiOGJlMmM0MzVjOGJlM2RlNzNhMWYxMmZjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYTAwMDUxYTViN2M0YjE5YTVhMjc3ZmMwNWFmYWNkYS5iaW5kUG9wdXAocG9wdXBfMDVjYzFlZGJmNDA4NDk1MDllZjI2ZGI5ZTVmN2VmOGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiOTQ0Y2YxYTE0NTRkN2FhOTI0Yzc5YmZjNTc0MmNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjMzOTgsIDEzMy4zNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iN2M0MDljMzM4YTM0Y2I5OGM4YTdiNTI5N2FmNmM0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMDlmMzI4ZTY1ZDE0ZjcwYTQzYzQyNjM1M2NkYWFkNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzA5ZjMyOGU2NWQxNGY3MGE0M2M0MjYzNTNjZGFhZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ndW53MTI1MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CaW5pbmogS3VuLVdvazwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iN2M0MDljMzM4YTM0Y2I5OGM4YTdiNTI5N2FmNmM0My5zZXRDb250ZW50KGh0bWxfMzA5ZjMyOGU2NWQxNGY3MGE0M2M0MjYzNTNjZGFhZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2I5NDRjZjFhMTQ1NGQ3YWE5MjRjNzliZmM1NzQyY2MuYmluZFBvcHVwKHBvcHVwX2I3YzQwOWMzMzhhMzRjYjk4YzhhN2I1Mjk3YWY2YzQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDlkZjNiYTk4ZTU0ZmFmYTZhNDNiOWViZDhiMjBjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy41MzgyLCAyMi4yOTI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDc3ZTk5MTY3Zjc2NDM4YWEwZmIxN2QxYzg5OTVlNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGY0NmMyMDg3YzZjNGRiOGFiZTliN2M4ZDExOWEwODAgPSAkKGA8ZGl2IGlkPSJodG1sXzRmNDZjMjA4N2M2YzRkYjhhYmU5YjdjOGQxMTlhMDgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbHV2YTEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+THV2YWxlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3N2U5OTE2N2Y3NjQzOGFhMGZiMTdkMWM4OTk1ZTY2LnNldENvbnRlbnQoaHRtbF80ZjQ2YzIwODdjNmM0ZGI4YWJlOWI3YzhkMTE5YTA4MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZDlkZjNiYTk4ZTU0ZmFmYTZhNDNiOWViZDhiMjBjOC5iaW5kUG9wdXAocG9wdXBfMDc3ZTk5MTY3Zjc2NDM4YWEwZmIxN2QxYzg5OTVlNjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxNTkwNjA2NGY1MDQ4OWU4ZGE0ZjhlYjExMWRjNTlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNjMyLCAtNS44NzcwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlOTBmNDVmY2VjOTQ2MDE5NDg5ZTgxZDliOTQ2ZTU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwMTYxZWUyYTFiOTQwYmE5OTNiOWYzOGVlZjY3ZWEzID0gJChgPGRpdiBpZD0iaHRtbF83MDE2MWVlMmExYjk0MGJhOTkzYjlmMzhlZWY2N2VhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N1cHkxMjM3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlN1cHlpcmUgU2Vub3VmbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTkwZjQ1ZmNlYzk0NjAxOTQ4OWU4MWQ5Yjk0NmU1NC5zZXRDb250ZW50KGh0bWxfNzAxNjFlZTJhMWI5NDBiYTk5M2I5ZjM4ZWVmNjdlYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDE1OTA2MDY0ZjUwNDg5ZThkYTRmOGViMTExZGM1OWYuYmluZFBvcHVwKHBvcHVwXzZlOTBmNDVmY2VjOTQ2MDE5NDg5ZTgxZDliOTQ2ZTU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMzdmZjYzNzBmMGQ0MGIyYWEyNDIyY2JiMGQwZjViOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzguMTQwMzI2LCAxMy4wNzczMzgwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOTlhZGI1NmU2YzI0NjJhYWE3YzZhNjQzZjhhNmI0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MzNhOGUyZGY0NjQ0NTk3OWRkZWRjZmFlYmY1N2FiNyA9ICQoYDxkaXYgaWQ9Imh0bWxfOTMzYThlMmRmNDY0NDU5NzlkZGVkY2ZhZWJmNTdhYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZGFtMTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZGFtYXdhIEZ1bGZ1bGRlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5OWFkYjU2ZTZjMjQ2MmFhYTdjNmE2NDNmOGE2YjQ2LnNldENvbnRlbnQoaHRtbF85MzNhOGUyZGY0NjQ0NTk3OWRkZWRjZmFlYmY1N2FiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMzdmZjYzNzBmMGQ0MGIyYWEyNDIyY2JiMGQwZjViOS5iaW5kUG9wdXAocG9wdXBfMTk5YWRiNTZlNmMyNDYyYWFhN2M2YTY0M2Y4YTZiNDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0ZjI5MjZmMzk0NjQ2NzU5MTc5ZjAyZTI3MTQ5YzQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQuNzE3MzA5OTk5OTk5OTk5NCwgMTQzLjU3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlMzViMTY0MWQ0NDRlOTlhMGUxYjE2NWI2N2RhMDM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JjODQwZjE3NDlmZDRjNDNhNzA3NWUzN2MxNzZkZWM4ID0gJChgPGRpdiBpZD0iaHRtbF9iYzg0MGYxNzQ5ZmQ0YzQzYTcwNzVlMzdjMTc2ZGVjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3lpbWExMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPllpbWFzPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlMzViMTY0MWQ0NDRlOTlhMGUxYjE2NWI2N2RhMDM1LnNldENvbnRlbnQoaHRtbF9iYzg0MGYxNzQ5ZmQ0YzQzYTcwNzVlMzdjMTc2ZGVjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNGYyOTI2ZjM5NDY0Njc1OTE3OWYwMmUyNzE0OWM0MS5iaW5kUG9wdXAocG9wdXBfN2UzNWIxNjQxZDQ0NGU5OWEwZTFiMTY1YjY3ZGEwMzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QzM2JmYmE2YWViMjQ4ZDE4NjdiYzQyM2Y1ZjVjZTFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDI3OCwgLTEyMS41MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NTlkN2NmNGMzZDc0M2I4OGRlNzYxNzNmNGI0N2FkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ODZmZWJkMzQ4MzU0ZDVhYjI2NzcxMzAwNWMxNWRkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTg2ZmViZDM0ODM1NGQ1YWIyNjc3MTMwMDVjMTVkZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93YXNjMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5VcHBlciBDaGlub29rPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1OWQ3Y2Y0YzNkNzQzYjg4ZGU3NjE3M2Y0YjQ3YWQwLnNldENvbnRlbnQoaHRtbF81ODZmZWJkMzQ4MzU0ZDVhYjI2NzcxMzAwNWMxNWRkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMzNiZmJhNmFlYjI0OGQxODY3YmM0MjNmNWY1Y2UxYi5iaW5kUG9wdXAocG9wdXBfOTU5ZDdjZjRjM2Q3NDNiODhkZTc2MTczZjRiNDdhZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkOTkwNDE5YjU3ODQyYzZiZmY5Y2E3ODc4ODBhMDEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMTEsIDQ1LjAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmVkMGM1ZDQ0MmI5NDFlZGFiNzY3MzI4ZjYzODE5MGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzg1YjQzM2ExYzA1NGNkNjhlMGEwM2MzMTg1NjhlY2EgPSAkKGA8ZGl2IGlkPSJodG1sXzc4NWI0MzNhMWMwNTRjZDY4ZTBhMDNjMzE4NTY4ZWNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaW5ndTEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SW5ndXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZlZDBjNWQ0NDJiOTQxZWRhYjc2NzMyOGY2MzgxOTBhLnNldENvbnRlbnQoaHRtbF83ODViNDMzYTFjMDU0Y2Q2OGUwYTAzYzMxODU2OGVjYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDk5MDQxOWI1Nzg0MmM2YmZmOWNhNzg3ODgwYTAxMy5iaW5kUG9wdXAocG9wdXBfNmVkMGM1ZDQ0MmI5NDFlZGFiNzY3MzI4ZjYzODE5MGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFkZWVmYmYwNjlhNTRhYWE4YjhlNWM5M2FjOWM0ZDkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuNjQyOSwgMTU1LjQ1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVkZmY4NGFlN2FkODRmYmY5MTEzZjAwYzZiNzJmN2FmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E4YTgwMWE4MzM2ZTQ3N2Q4N2JhMmQzMzhjZDI2ODEwID0gJChgPGRpdiBpZD0iaHRtbF9hOGE4MDFhODMzNmU0NzdkODdiYTJkMzM4Y2QyNjgxMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Npd2ExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNpd2FpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkZmY4NGFlN2FkODRmYmY5MTEzZjAwYzZiNzJmN2FmLnNldENvbnRlbnQoaHRtbF9hOGE4MDFhODMzNmU0NzdkODdiYTJkMzM4Y2QyNjgxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZGVlZmJmMDY5YTU0YWFhOGI4ZTVjOTNhYzljNGQ5MS5iaW5kUG9wdXAocG9wdXBfNWRmZjg0YWU3YWQ4NGZiZjkxMTNmMDBjNmI3MmY3YWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2MDQ2NDcxMjM3MjRhNTY4YjgwYzk0ZWFlYjhkZmI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjI2MjMsIDEzNS43NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MjFhZDVmM2M2ODA0MjBhODgyZmJhZjhiNjM5YTljOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNzQ3ZDBkNTI2Zjk0MGY0ODY4M2I5MDc0NGMwY2IwNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTc0N2QwZDUyNmY5NDBmNDg2ODNiOTA3NDRjMGNiMDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udW5nMTI5MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XdWJ1eTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MjFhZDVmM2M2ODA0MjBhODgyZmJhZjhiNjM5YTljOS5zZXRDb250ZW50KGh0bWxfMTc0N2QwZDUyNmY5NDBmNDg2ODNiOTA3NDRjMGNiMDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzYwNDY0NzEyMzcyNGE1NjhiODBjOTRlYWViOGRmYjYuYmluZFBvcHVwKHBvcHVwXzcyMWFkNWYzYzY4MDQyMGE4ODJmYmFmOGI2MzlhOWM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYzgxMDZiN2EzYmQ0ZmU1YTRmMDAxZmNmZjUxODA3YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjQ3MTY5LCAxNDMuMTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTFjMjA2NzAyODllNDRiZTg4OTlmMzUwMDRkZmFhYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzA3OWIzYWUxNGM2NDFiY2E4Y2Q1ODY3ZWI4NTY2NTggPSAkKGA8ZGl2IGlkPSJodG1sXzcwNzliM2FlMTRjNjQxYmNhOGNkNTg2N2ViODU2NjU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnVraTEyNDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnVraXlpcDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMWMyMDY3MDI4OWU0NGJlODg5OWYzNTAwNGRmYWFjOS5zZXRDb250ZW50KGh0bWxfNzA3OWIzYWUxNGM2NDFiY2E4Y2Q1ODY3ZWI4NTY2NTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmM4MTA2YjdhM2JkNGZlNWE0ZjAwMWZjZmY1MTgwN2MuYmluZFBvcHVwKHBvcHVwXzExYzIwNjcwMjg5ZTQ0YmU4ODk5ZjM1MDA0ZGZhYWM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNGU5OTYzZDM4ZTc0MWVmOTMxNDhjNzJiZjY1YmNmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi40MDA2LCAxMjYuNDMyOTk5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjlhNDgwNGZhMzc0YjcxOWNiMzM0ZjlhODRmYTVjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNzkwNTk3ZTllNWQ0MjNlOWRiNGI3M2U0ZWY3NzIzMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjc5MDU5N2U5ZTVkNDIzZTlkYjRiNzNlNGVmNzcyMzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uZ2FyMTI4NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OZ2FyaW55aW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWY5YTQ4MDRmYTM3NGI3MTljYjMzNGY5YTg0ZmE1YzYuc2V0Q29udGVudChodG1sXzI3OTA1OTdlOWU1ZDQyM2U5ZGI0YjczZTRlZjc3MjMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I0ZTk5NjNkMzhlNzQxZWY5MzE0OGM3MmJmNjViY2Y1LmJpbmRQb3B1cChwb3B1cF9lZjlhNDgwNGZhMzc0YjcxOWNiMzM0ZjlhODRmYTVjNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjJjMTAxM2VlZDk5NGQwNGE1MGE2MTVkY2M0ZDdkMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjEuOTIsIDE4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNzNjZDJiYTYwNTU0ODk3OGYyMjNhYmFkN2M2NzQ4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODhhZjFkMDIyNWU0ZjlhOTFmOTc5NmUwYjU3YWY1NCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTg4YWYxZDAyMjVlNGY5YTkxZjk3OTZlMGI1N2FmNTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rdW5nMTI2MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ob3J0aC1DZW50cmFsIEp1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3M2NkMmJhNjA1NTQ4OTc4ZjIyM2FiYWQ3YzY3NDg5LnNldENvbnRlbnQoaHRtbF8xODhhZjFkMDIyNWU0ZjlhOTFmOTc5NmUwYjU3YWY1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MmMxMDEzZWVkOTk0ZDA0YTUwYTYxNWRjYzRkN2QwZS5iaW5kUG9wdXAocG9wdXBfYjczY2QyYmE2MDU1NDg5NzhmMjIzYWJhZDdjNjc0ODkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyZjQ5ZjRmNjJlYzRkMTFiMTI0OGI5ZDg1ZWI2YjA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOC4zMjQ0OCwgLTEwLjMzNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMWVjZDU3NzM1NDU0NDU4OTA1YzViYWZjZjI2YWZlNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYmQyMDc0MTdiYWY0Nzg5OWExNGE3YTMyOTZjNDlkMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMWJkMjA3NDE3YmFmNDc4OTlhMTRhN2EzMjk2YzQ5ZDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zb3V0Mjc3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Tb3V0aGVybiBLaXNpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxZWNkNTc3MzU0NTQ0NTg5MDVjNWJhZmNmMjZhZmU1LnNldENvbnRlbnQoaHRtbF8xYmQyMDc0MTdiYWY0Nzg5OWExNGE3YTMyOTZjNDlkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MmY0OWY0ZjYyZWM0ZDExYjEyNDhiOWQ4NWViNmIwNi5iaW5kUG9wdXAocG9wdXBfZDFlY2Q1NzczNTQ1NDQ1ODkwNWM1YmFmY2YyNmFmZTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmYmVmM2RiZmNlODQ2MGFhMWRiZWY0MzZhOTMyNGQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuOTUyMywgMzEuMTExMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1YzQzMmZlZWNkYTRkMDc5MzcwZGNhYThhNGRjMTY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0NTZkZDE2ODQ1YzRiYjQ4ODEzYTJiNzc3MDhmNWRhID0gJChgPGRpdiBpZD0iaHRtbF84NDU2ZGQxNjg0NWM0YmI0ODgxM2EyYjc3NzA4ZjVkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RlZ2ExMjM2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRlZ2FsaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNWM0MzJmZWVjZGE0ZDA3OTM3MGRjYWE4YTRkYzE2OS5zZXRDb250ZW50KGh0bWxfODQ1NmRkMTY4NDVjNGJiNDg4MTNhMmI3NzcwOGY1ZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmZiZWYzZGJmY2U4NDYwYWExZGJlZjQzNmE5MzI0ZDguYmluZFBvcHVwKHBvcHVwXzE1YzQzMmZlZWNkYTRkMDc5MzcwZGNhYThhNGRjMTY5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ODE3NzMxOGRjZTc0N2Q3YWUwY2YxNTJkNGViM2I3OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjA4MDgsIDQ2LjEzNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDg3ZmE5NzA2OTE0OGE5OGUxNzU5MDNkZDMyMTVhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjQyMTMxN2E4MjU0YjBjYTIyOWI4YWYwZGZmZjMzZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzI0MjEzMTdhODI1NGIwY2EyMjliOGFmMGRmZmYzM2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9odW56MTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IdW56aWI8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQ4N2ZhOTcwNjkxNDhhOThlMTc1OTAzZGQzMjE1YTYuc2V0Q29udGVudChodG1sXzcyNDIxMzE3YTgyNTRiMGNhMjI5YjhhZjBkZmZmMzNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc4MTc3MzE4ZGNlNzQ3ZDdhZTBjZjE1MmQ0ZWIzYjc5LmJpbmRQb3B1cChwb3B1cF83NDg3ZmE5NzA2OTE0OGE5OGUxNzU5MDNkZDMyMTVhNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmEyZjZlMjJhMmVhNGViM2JjNWM1NmM1MjczMzJkMzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS45NjE0NTk5OTk5OTk5OTUsIC05NS4wMzkzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2JhY2UyZGI0ZTI1YTQ1MWE4ZGMyNmQ2NGEzZjZiZjNlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2ZTZhNmU4MTE5ODQ5YmNiNTMxY2JhOTlhZDcwMjBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyMWE2Y2I1OWExOTQ5MGZhNDUzNDM0NGIxYWRlODczID0gJChgPGRpdiBpZD0iaHRtbF9lMjFhNmNiNTlhMTk0OTBmYTQ1MzQzNDRiMWFkZTg3MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3l1Y2gxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPll1Y2hpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2ZTZhNmU4MTE5ODQ5YmNiNTMxY2JhOTlhZDcwMjBjLnNldENvbnRlbnQoaHRtbF9lMjFhNmNiNTlhMTk0OTBmYTQ1MzQzNDRiMWFkZTg3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYTJmNmUyMmEyZWE0ZWIzYmM1YzU2YzUyNzMzMmQzMy5iaW5kUG9wdXAocG9wdXBfYzZlNmE2ZTgxMTk4NDliY2I1MzFjYmE5OWFkNzAyMGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlZjUwYmYwMzlkMjRjNTk4MjljNjg4MTZjZmU4ZDQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC42Njg4NCwgMzIuMTUxNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lODIxOWRmM2JmNWU0NmZhYTlmMWU5MjQ4YWRlNWE2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZWY5MjdhNWJlYzU0M2E5ODk3YjgxZDQ5NzMyOTA2ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfN2VmOTI3YTViZWM1NDNhOTg5N2I4MWQ0OTczMjkwNmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9nYW5kMTI1NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HYW5kYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODIxOWRmM2JmNWU0NmZhYTlmMWU5MjQ4YWRlNWE2MC5zZXRDb250ZW50KGh0bWxfN2VmOTI3YTViZWM1NDNhOTg5N2I4MWQ0OTczMjkwNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGVmNTBiZjAzOWQyNGM1OTgyOWM2ODgxNmNmZThkNDMuYmluZFBvcHVwKHBvcHVwX2U4MjE5ZGYzYmY1ZTQ2ZmFhOWYxZTkyNDhhZGU1YTYwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZGRkNjAxNjZhNTE0ZTliOWU5NTlmZTA5MTYxMTlhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy44ODE4LCAxMzAuMjM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTlkNDc2MTVjZDY2NGU0NGEwMzZkMTZjYTYxOTZmMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWVhM2QxYWFlODcyNGQ1ZGIxN2ZiYzgxZDYyOTA0YzEgPSAkKGA8ZGl2IGlkPSJodG1sX2FlYTNkMWFhZTg3MjRkNWRiMTdmYmM4MWQ2MjkwNGMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFyaTE0MjQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFyaXRoaWVsPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5ZDQ3NjE1Y2Q2NjRlNDRhMDM2ZDE2Y2E2MTk2ZjEzLnNldENvbnRlbnQoaHRtbF9hZWEzZDFhYWU4NzI0ZDVkYjE3ZmJjODFkNjI5MDRjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZGRkNjAxNjZhNTE0ZTliOWU5NTlmZTA5MTYxMTlhOS5iaW5kUG9wdXAocG9wdXBfOTlkNDc2MTVjZDY2NGU0NGEwMzZkMTZjYTYxOTZmMTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiZTY0MDFhZmMyNjQ1NmNhOGE1ZjQ0OTZmYTQxMDYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjgzOTMsIDEzMy4xODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9iYWNlMmRiNGUyNWE0NTFhOGRjMjZkNjRhM2Y2YmYzZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZTg4ODE5MzMyNmI0NzMyOTUzNzM5MDhhNjI5OGJiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMWM0N2RkY2EzNmE0MjllOGQyMDExZTg5MzYxOTUzYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjFjNDdkZGNhMzZhNDI5ZThkMjAxMWU4OTM2MTk1M2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXVuMTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXduZzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTg4ODE5MzMyNmI0NzMyOTUzNzM5MDhhNjI5OGJiYi5zZXRDb250ZW50KGh0bWxfZjFjNDdkZGNhMzZhNDI5ZThkMjAxMWU4OTM2MTk1M2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmJlNjQwMWFmYzI2NDU2Y2E4YTVmNDQ5NmZhNDEwNjEuYmluZFBvcHVwKHBvcHVwXzllODg4MTkzMzI2YjQ3MzI5NTM3MzkwOGE2Mjk4YmJiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OTFkNGVkNDRjMjk0Mjg5YmNhNjY4M2EzYzdjMjRiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNC4yOTk2LCAxMzUuNzA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYmFjZTJkYjRlMjVhNDUxYThkYzI2ZDY0YTNmNmJmM2UpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmZiMWNjNGRlNDI3NGUxN2JlNjE3N2I2NjUzNzQxODggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDJjMzM3Mjc3MDkyNGZiYjhhMjlmZTNiZWRkMjljNDggPSAkKGA8ZGl2IGlkPSJodG1sXzQyYzMzNzI3NzA5MjRmYmI4YTI5ZmUzYmVkZDI5YzQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvd2FuZDEyNjMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V2FuZGFyYW5nPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZmYjFjYzRkZTQyNzRlMTdiZTYxNzdiNjY1Mzc0MTg4LnNldENvbnRlbnQoaHRtbF80MmMzMzcyNzcwOTI0ZmJiOGEyOWZlM2JlZGQyOWM0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OTFkNGVkNDRjMjk0Mjg5YmNhNjY4M2EzYzdjMjRiMy5iaW5kUG9wdXAocG9wdXBfZmZiMWNjNGRlNDI3NGUxN2JlNjE3N2I2NjUzNzQxODgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7ff62a9fd7b8>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(Autotyp_table.language)\n",
    "m.add_features(\n",
    "    Autotyp_table['Gender.binned4'],\n",
    "    colors=lingtypology.gradient(4, color1='yellow', color2='red')\n",
    ")\n",
    "m.legend_title = 'Genders'\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. AfBo <a name=\"afbo\"></a>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "from lingtypology.datasets import AfBo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Seifart, Frank. 2013.\n",
      "AfBo: A world-wide survey of affix borrowing.\n",
      "Leipzig: Max Planck Institute for Evolutionary Anthropology.\n",
      "(Available online at http://afbo.info, Accessed on 2019-06-13.)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>language_recipient</th>\n",
       "      <th>language_donor</th>\n",
       "      <th>reliability</th>\n",
       "      <th>adjectivizer</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Resígaro</td>\n",
       "      <td>Bora</td>\n",
       "      <td>high</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Gurindji Kriol</td>\n",
       "      <td>Gurindji</td>\n",
       "      <td>high</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Copper Island Aleut</td>\n",
       "      <td>Russian</td>\n",
       "      <td>high</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Sakha</td>\n",
       "      <td>Mongolian</td>\n",
       "      <td>high</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Kalderash Romani</td>\n",
       "      <td>Romanian</td>\n",
       "      <td>high</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    language_recipient language_donor reliability adjectivizer\n",
       "0             Resígaro           Bora        high            0\n",
       "1       Gurindji Kriol       Gurindji        high            0\n",
       "2  Copper Island Aleut        Russian        high            0\n",
       "3                Sakha      Mongolian        high            4\n",
       "4     Kalderash Romani       Romanian        high            1"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "adj = AfBo('adjectivizer').get_df()\n",
    "adj.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzVkYzU5ZDE4M2U5ODRmMWM5NmFmMjIxMjQ0YjUwNzUyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF81ZGM1OWQxODNlOTg0ZjFjOTZhZjIyMTI0NGI1MDc1MiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5BZGo8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8c3ZnIGhlaWdodD0iOTQiIHdpZHRoPSIyMCI+PGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMjAiIHkyPSIwInN0eWxlPSJzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyIiB4Mj0iMjAiIHkyPSIyInN0eWxlPSJzdHJva2U6I2ZkZmVmZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMjAiIHkyPSIzInN0eWxlPSJzdHJva2U6I2ZhZmRmYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0IiB4Mj0iMjAiIHkyPSI0InN0eWxlPSJzdHJva2U6I2Y4ZmNmODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1IiB4Mj0iMjAiIHkyPSI1InN0eWxlPSJzdHJva2U6I2Y1ZmFmNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2IiB4Mj0iMjAiIHkyPSI2InN0eWxlPSJzdHJva2U6I2YzZjlmMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3IiB4Mj0iMjAiIHkyPSI3InN0eWxlPSJzdHJva2U6I2YwZjhmMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4IiB4Mj0iMjAiIHkyPSI4InN0eWxlPSJzdHJva2U6I2VlZjdlZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5IiB4Mj0iMjAiIHkyPSI5InN0eWxlPSJzdHJva2U6I2ViZjVlYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMCIgeDI9IjIwIiB5Mj0iMTAic3R5bGU9InN0cm9rZTojZThmNGU4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExIiB4Mj0iMjAiIHkyPSIxMSJzdHlsZT0ic3Ryb2tlOiNlNmYzZTY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIiIHgyPSIyMCIgeTI9IjEyInN0eWxlPSJzdHJva2U6I2UzZjFlMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMyIgeDI9IjIwIiB5Mj0iMTMic3R5bGU9InN0cm9rZTojZTFmMGUxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0IiB4Mj0iMjAiIHkyPSIxNCJzdHlsZT0ic3Ryb2tlOiNkZWVmZGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUiIHgyPSIyMCIgeTI9IjE1InN0eWxlPSJzdHJva2U6I2RjZWVkYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNiIgeDI9IjIwIiB5Mj0iMTYic3R5bGU9InN0cm9rZTojZDllY2Q5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE3IiB4Mj0iMjAiIHkyPSIxNyJzdHlsZT0ic3Ryb2tlOiNkN2ViZDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTgiIHgyPSIyMCIgeTI9IjE4InN0eWxlPSJzdHJva2U6I2Q0ZWFkNDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxOCIgeDI9IjIwIiB5Mj0iMTgic3R5bGU9InN0cm9rZTojY2NlNmNjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIwIiB4Mj0iMjAiIHkyPSIyMCJzdHlsZT0ic3Ryb2tlOiNjYWU1Y2E7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjEiIHgyPSIyMCIgeTI9IjIxInN0eWxlPSJzdHJva2U6I2M3ZTNjNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMiIgeDI9IjIwIiB5Mj0iMjIic3R5bGU9InN0cm9rZTojYzVlMmM1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIzIiB4Mj0iMjAiIHkyPSIyMyJzdHlsZT0ic3Ryb2tlOiNjMmUxYzI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjQiIHgyPSIyMCIgeTI9IjI0InN0eWxlPSJzdHJva2U6I2JmZTBiZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUic3R5bGU9InN0cm9rZTojYmRkZWJkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI2IiB4Mj0iMjAiIHkyPSIyNiJzdHlsZT0ic3Ryb2tlOiNiYWRkYmE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjciIHgyPSIyMCIgeTI9IjI3InN0eWxlPSJzdHJva2U6I2I4ZGNiODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyOCIgeDI9IjIwIiB5Mj0iMjgic3R5bGU9InN0cm9rZTojYjVkYmI1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI5IiB4Mj0iMjAiIHkyPSIyOSJzdHlsZT0ic3Ryb2tlOiNiM2Q5YjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzAiIHgyPSIyMCIgeTI9IjMwInN0eWxlPSJzdHJva2U6I2IwZDhiMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMSIgeDI9IjIwIiB5Mj0iMzEic3R5bGU9InN0cm9rZTojYWVkN2FlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMyIiB4Mj0iMjAiIHkyPSIzMiJzdHlsZT0ic3Ryb2tlOiNhYmQ1YWI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzMiIHgyPSIyMCIgeTI9IjMzInN0eWxlPSJzdHJva2U6I2E4ZDRhODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNCIgeDI9IjIwIiB5Mj0iMzQic3R5bGU9InN0cm9rZTojYTZkM2E2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM1IiB4Mj0iMjAiIHkyPSIzNSJzdHlsZT0ic3Ryb2tlOiNhM2QyYTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzYiIHgyPSIyMCIgeTI9IjM2InN0eWxlPSJzdHJva2U6I2ExZDBhMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNiIgeDI9IjIwIiB5Mj0iMzYic3R5bGU9InN0cm9rZTojOTljZDk5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM4IiB4Mj0iMjAiIHkyPSIzOCJzdHlsZT0ic3Ryb2tlOiM5N2NiOTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzkiIHgyPSIyMCIgeTI9IjM5InN0eWxlPSJzdHJva2U6Izk0Y2E5NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MCIgeDI9IjIwIiB5Mj0iNDAic3R5bGU9InN0cm9rZTojOTFjOTkxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQxIiB4Mj0iMjAiIHkyPSI0MSJzdHlsZT0ic3Ryb2tlOiM4ZmM3OGY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDIiIHgyPSIyMCIgeTI9IjQyInN0eWxlPSJzdHJva2U6IzhjYzY4YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MyIgeDI9IjIwIiB5Mj0iNDMic3R5bGU9InN0cm9rZTojOGFjNThhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ0IiB4Mj0iMjAiIHkyPSI0NCJzdHlsZT0ic3Ryb2tlOiM4N2M0ODc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDUiIHgyPSIyMCIgeTI9IjQ1InN0eWxlPSJzdHJva2U6Izg1YzI4NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NiIgeDI9IjIwIiB5Mj0iNDYic3R5bGU9InN0cm9rZTojODJjMTgyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ3IiB4Mj0iMjAiIHkyPSI0NyJzdHlsZT0ic3Ryb2tlOiM3ZmMwN2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDgiIHgyPSIyMCIgeTI9IjQ4InN0eWxlPSJzdHJva2U6IzdkYmU3ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0OSIgeDI9IjIwIiB5Mj0iNDkic3R5bGU9InN0cm9rZTojN2FiZDdhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUwIiB4Mj0iMjAiIHkyPSI1MCJzdHlsZT0ic3Ryb2tlOiM3OGJjNzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTEiIHgyPSIyMCIgeTI9IjUxInN0eWxlPSJzdHJva2U6Izc1YmI3NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MiIgeDI9IjIwIiB5Mj0iNTIic3R5bGU9InN0cm9rZTojNzNiOTczO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUzIiB4Mj0iMjAiIHkyPSI1MyJzdHlsZT0ic3Ryb2tlOiM3MGI4NzA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTQiIHgyPSIyMCIgeTI9IjU0InN0eWxlPSJzdHJva2U6IzZlYjc2ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NSIgeDI9IjIwIiB5Mj0iNTUic3R5bGU9InN0cm9rZTojNmJiNjZiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU1IiB4Mj0iMjAiIHkyPSI1NSJzdHlsZT0ic3Ryb2tlOiM2NmIzNjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTciIHgyPSIyMCIgeTI9IjU3InN0eWxlPSJzdHJva2U6IzYzYjI2MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1OCIgeDI9IjIwIiB5Mj0iNTgic3R5bGU9InN0cm9rZTojNjFiMDYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU5IiB4Mj0iMjAiIHkyPSI1OSJzdHlsZT0ic3Ryb2tlOiM1ZWFmNWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjAiIHgyPSIyMCIgeTI9IjYwInN0eWxlPSJzdHJva2U6IzVjYWU1YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MSIgeDI9IjIwIiB5Mj0iNjEic3R5bGU9InN0cm9rZTojNTlhZDU5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYyIiB4Mj0iMjAiIHkyPSI2MiJzdHlsZT0ic3Ryb2tlOiM1N2FiNTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjMiIHgyPSIyMCIgeTI9IjYzInN0eWxlPSJzdHJva2U6IzU0YWE1NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NCIgeDI9IjIwIiB5Mj0iNjQic3R5bGU9InN0cm9rZTojNTFhOTUxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY1IiB4Mj0iMjAiIHkyPSI2NSJzdHlsZT0ic3Ryb2tlOiM0ZmE4NGY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjYiIHgyPSIyMCIgeTI9IjY2InN0eWxlPSJzdHJva2U6IzRjYTY0YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NyIgeDI9IjIwIiB5Mj0iNjcic3R5bGU9InN0cm9rZTojNGFhNTRhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY4IiB4Mj0iMjAiIHkyPSI2OCJzdHlsZT0ic3Ryb2tlOiM0N2E0NDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjkiIHgyPSIyMCIgeTI9IjY5InN0eWxlPSJzdHJva2U6IzQ1YTI0NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MCIgeDI9IjIwIiB5Mj0iNzAic3R5bGU9InN0cm9rZTojNDJhMTQyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcxIiB4Mj0iMjAiIHkyPSI3MSJzdHlsZT0ic3Ryb2tlOiMzZmEwM2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzIiIHgyPSIyMCIgeTI9IjcyInN0eWxlPSJzdHJva2U6IzNkOWYzZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MyIgeDI9IjIwIiB5Mj0iNzMic3R5bGU9InN0cm9rZTojM2E5ZDNhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc0IiB4Mj0iMjAiIHkyPSI3NCJzdHlsZT0ic3Ryb2tlOiMzODljMzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzQiIHgyPSIyMCIgeTI9Ijc0InN0eWxlPSJzdHJva2U6IzMzOWEzMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NiIgeDI9IjIwIiB5Mj0iNzYic3R5bGU9InN0cm9rZTojMzA5ODMwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc3IiB4Mj0iMjAiIHkyPSI3NyJzdHlsZT0ic3Ryb2tlOiMyZTk3MmU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzgiIHgyPSIyMCIgeTI9Ijc4InN0eWxlPSJzdHJva2U6IzJiOTYyYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3OSIgeDI9IjIwIiB5Mj0iNzkic3R5bGU9InN0cm9rZTojMjg5NDI4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgwIiB4Mj0iMjAiIHkyPSI4MCJzdHlsZT0ic3Ryb2tlOiMyNjkzMjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODEiIHgyPSIyMCIgeTI9IjgxInN0eWxlPSJzdHJva2U6IzIzOTIyMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MiIgeDI9IjIwIiB5Mj0iODIic3R5bGU9InN0cm9rZTojMjE5MTIxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgzIiB4Mj0iMjAiIHkyPSI4MyJzdHlsZT0ic3Ryb2tlOiMxZThmMWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODQiIHgyPSIyMCIgeTI9Ijg0InN0eWxlPSJzdHJva2U6IzFjOGUxYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NSIgeDI9IjIwIiB5Mj0iODUic3R5bGU9InN0cm9rZTojMTk4ZDE5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg2IiB4Mj0iMjAiIHkyPSI4NiJzdHlsZT0ic3Ryb2tlOiMxNzhiMTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODciIHgyPSIyMCIgeTI9Ijg3InN0eWxlPSJzdHJva2U6IzE0OGExNDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4OCIgeDI9IjIwIiB5Mj0iODgic3R5bGU9InN0cm9rZTojMTE4OTExO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg5IiB4Mj0iMjAiIHkyPSI4OSJzdHlsZT0ic3Ryb2tlOiMwZjg4MGY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTAiIHgyPSIyMCIgeTI9IjkwInN0eWxlPSJzdHJva2U6IzBjODYwYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MSIgeDI9IjIwIiB5Mj0iOTEic3R5bGU9InN0cm9rZTojMGE4NTBhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkyIiB4Mj0iMjAiIHkyPSI5MiJzdHlsZT0ic3Ryb2tlOiMwNzg0MDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTMiIHgyPSIyMCIgeTI9IjkzInN0eWxlPSJzdHJva2U6IzA1ODMwNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MyIgeDI9IjIwIiB5Mj0iOTMic3R5bGU9InN0cm9rZTojMDA4MDAwO3N0cm9rZS13aWR0aDozOyIgLz48L3N2Zz48c3ZnIGhlaWdodD0iOTQiIHdpZHRoPSI1MCI+PHRleHQgeD0iNSIgeT0iMTkiIGR4PSIwIiBkeT0iMGV4Ij4tIDE8L3RleHQ+PHRleHQgeD0iNSIgeT0iMzciIGR4PSIwIiBkeT0iMGV4Ij4tIDI8L3RleHQ+PHRleHQgeD0iNSIgeT0iNTYiIGR4PSIwIiBkeT0iMGV4Ij4tIDM8L3RleHQ+PHRleHQgeD0iNSIgeT0iNzUiIGR4PSIwIiBkeT0iMGV4Ij4tIDQ8L3RleHQ+PHRleHQgeD0iNSIgeT0iOTQiIGR4PSIwIiBkeT0iMGV4Ij4tIDU8L3RleHQ+PC9zdmc+CgogIDwvdWw+CjwvZGl2Pgo8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgoKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KICAubWFwbGVnZW5kIC5sZWdlbmQtdGl0bGUgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiA5MCU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIHsKICAgIG1hcmdpbjogMDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIHBhZGRpbmc6IDA7CiAgICBmbG9hdDogbGVmdDsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIGxpIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICB9CiAgLm1hcGxlZ2VuZCB1bC5sZWdlbmQtbGFiZWxzIGxpIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDogbGVmdDsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAzMHB4OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIAogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIAogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zb3VyY2UgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBjb2xvcjogIzc3NzsKICAgIGNsZWFyOiBib3RoOwogICAgfQogIC5tYXBsZWdlbmQgYSB7CiAgICBjb2xvcjogIzc3NzsKICAgIH0KPC9zdHlsZT4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwXzVkYzU5ZDE4M2U5ODRmMWM5NmFmMjIxMjQ0YjUwNzUyID0gTC5tYXAoCiAgICAgICAgJ21hcF81ZGM1OWQxODNlOTg0ZjFjOTZhZjIyMTI0NGI1MDc1MicsIHsKICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICB6b29tOiAyLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzVkYzU5ZDE4M2U5ODRmMWM5NmFmMjIxMjQ0YjUwNzUyKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2ZhMWQ2YjkzNjEzZjRlZDI4NTQ3ODI0YTZmMjhiMDI3ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF81ZGM1OWQxODNlOTg0ZjFjOTZhZjIyMTI0NGI1MDc1Mik7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzVkYzU5ZDE4M2U5ODRmMWM5NmFmMjIxMjQ0YjUwNzUyKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YmFjZTFhNmZkOGU0MTBmYmUwNDZhNzAwMmU3M2RjYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjQ4MTM5LCAtNzEuMzU3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzE1YTYwYmQ0MzViNDIyMGFiZmU4YWYzZjc3NWE1NjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy4zMzQ1OCwgMTA5LjcxNjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOWE4YTRmYmI5NmI0MmYyOTA2N2E4OWY2MjI2Njg5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1Ljc4MzMsIDM4LjM5MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5NjJiMGViYjliZTRiMDVhZWY0YjQwZTYzN2UwMjM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE2LjcyNTQ3LCAtNjguOTcxMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1ZTRmNzlhNDU5MTQyMzdiYjg3OTA4MmJiZjc0ZTQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuMzM0NTgsIDEwOS43MTYwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjQwZGZhM2U2NTU5NDYwYTgwNzE3YTExNzAzZjhkMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43MywgMzUuNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE0NTdlZjc3NTdmNTQ0NjBhZmVlOTNkNWExMDhjMTA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjkuMjAwNDE1MDAwMDAwMDAzLCAyNS41MTk2MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1NDI5NGIxMDBkOTQ1Y2FiN2U4NmYxNGFmNTEzYjZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMzUyOSwgLTg2LjkwOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZhYTcxNWNiMmZhYjQ5NjBiOWZjYjk0ZTU3NWVjMzg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjguNjg0LCA4My40NDg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTJhZjM4NDUzNjQ0Y2I3YmM4OWEwMWQzZmY0MWFkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi44NDQ4LCAxMzQuNjQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMjZmNzhkYzEwYTY0NGU5OGNmZjkyYjg4YWRjODZkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjQwOTYsIC05Mi43MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5Y2NkNTM1ZTI1NjQ5MGNhYTBjOTlkODZiMjUxZmMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzEuMywgNDUuNjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDAzNTE2NjJjOTU3NDMwNGI3NzQ1ZmEyZTJjZDdmMWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4xOTkyMTk5OTk5OTk5OTk1LCAxNTUuNDk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOThjMDg3MGFkZDk0MzUyYTNiNTUzY2I5NzY4MzZiZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIyLjM1NzEsIDg0LjM5MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2OWI1MmEyYjVlMTQ0ZmNhZmRlYTdkZTk1ODU5M2MzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNjI5NywgLTE1NS40M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjczMDcxMjJmOWVjNGZkODk1NGJiOTdkZmI3MjU4NDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyOC42NDE2LCA4NC4wNTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTY2MzZlY2UyYjM0Y2I2OTQwYjI4NGFmZDUzZDE3MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuODI3OTkwMDAwMDAwMDAwMiwgMTAyLjgwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjUwZmUzOGVkNzhkNGIxMTkwOGRlNDdhNmJmMGU2MGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS41MTU3LCA0Ny44OTUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNDg0Mjc4ZGRmNTA0ZDdlYTRjMzUxZWY3MjE4ZmY0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy4wNjk1LCAxMzkuNDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODkzYTVhYjMxZjg0ZmIyYTZhOWZmZmVlNzA4OTQ3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3MTMzMGRhZmE5MDRhNzZiZjU2ZGU4YzA4ZmZlNTNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuNSwgLTcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGI4NzYzZmU2YjI0NGJkZGE4M2QyNWJlZTcyMjA0MzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFswLjQ0MDIwNSwgLTY4LjkwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM3NjU5NWU0Zjk1NTQzYjNhNTIxZDgwNDIxMmFkYTQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjYuMDg3NiwgOTEuMjkzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODU3NTU1NWJmYzFhNGUwM2FiZDFjZWJkMWRiZWRkYWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC41ODQwNSwgMTI1LjU4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTEzMWUzZThjMTdhNGJkYWJhOTlmNzI3Y2Q3YTBhNjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC43NzU3LCAtODguOTU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQ2MzU0MmMzNDA0NGJhMjhiM2NkZGZjMTFjOThhYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC4yMzAzOSwgMTIzLjc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZjMzODY4YTIxZjE0NzRmYTAzMTIxNGYwZmRmNDQzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIyLjM1NzEsIDg0LjM5MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhNmVmZTA2ZTg1ZjRlYWNiNzBkNjRmMmVkZWE3YmEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguNjQ4OTk5OTk5OTk5OTk0LCAxMi40Njc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTM1ZGRmNzY1ZDk0MjdhYmM1MzM2Y2EwZTViOTJkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjAsIDEyNC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODkxOWQ4Y2U0ZjA0ZGMwODNlODEzYzNkYmJmYzM2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmODkzYmRiNzcxZjRjOGI4MmIwMTkxY2E2Zjc1OTRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMCwgMTI0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiY2UxNmUzYzZmMzRkYmVhNThlYTI3YTdhYzNjNjc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTAuNjYzMjIsIDM5Ljc5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWFmMDA1ZWUyMzZlNDFmYWJmNmE1NjE1ZDVjZDA3ZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuMDY5NSwgMTM5LjQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODhmZGJjOTU4NmE2NGQxMzgxNTc3MDc2YzllNTIyNmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy4zMzQ1OCwgMTA5LjcxNjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzE2NTlmZDA2OGM0ZWU0YmEwODA3MDk4ZDk4ZTRmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1Ljg4ODQsIDE0LjQ1MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwMDAzOTAwMzQ0MTRhNmJiMGYwYzEzMGU0ODRkYWRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjguNTM0NywgNjQuMjk5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTU1MDQ4NzIwMWJiNGMzMGI2ZmY0YzcyNTUzMjc2NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lODcxODZkYjQ1YzE0OGJkYTVlODg4YjM3ZDJlOWEyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjExNzQsIDIyLjM3ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiM2U3MThlYjk5NjQ0MmQ4ZWNjM2M1MjRiNWVlNzAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjc4NywgLTEuMzE2MjIwMDAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGU5MDE2MmIyZjA4NGY4MGFhNTIwODcxZmUyMjNjNzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy4wOTMxMzk5OTk5OTk5OTksIC03OC4zMjE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYmNhYTUwZGIyMDU0YmZlOTYzNTcwODc1NjMyNjIwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYxLjY5NzQsIDEzMy45OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWZlNGU5MzUyMDYyNGUwMjg1MmFhYzY2ZWRmZjhkMWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xNjY4MjUsIDc0LjMzMDQ1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTJmM2IxZTI0MjM1NGU4NThkMGVlYWFkZmUxMjI3NjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi40ODEzOSwgLTcxLjM1NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzg3NjU4NjIwYTM0YzBhYjBhMDczMmY1Y2U5YmI2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZTNmZTU5NTI3MTU0MjBiODdkYmZmNzFjZTc5NWFiNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNGUzZmU1OTUyNzE1NDIwYjg3ZGJmZjcxY2U3OTVhYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9yZXNpMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SZXPDrWdhcm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2M4NzY1ODYyMGEzNGMwYWIwYTA3MzJmNWNlOWJiNjMuc2V0Q29udGVudChodG1sXzRlM2ZlNTk1MjcxNTQyMGI4N2RiZmY3MWNlNzk1YWI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EyZjNiMWUyNDIzNTRlODU4ZDBlZWFhZGZlMTIyNzY5LmJpbmRQb3B1cChwb3B1cF8zYzg3NjU4NjIwYTM0YzBhYjBhMDczMmY1Y2U5YmI2MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2RjMWEwNjUzNTdlNDkxZjk1YTlkMWQ1MjkyMmYwMDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNy4zMzQ1OCwgMTA5LjcxNjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjliMjQ0MjZhZjk1NDdlMzk3Y2NmZDY5ZjUxZGFlYTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzg4ZGYyYzU5YTY2NGYyZWIwZGUwZTZhYzVjMWI0ZDggPSAkKGA8ZGl2IGlkPSJodG1sXzc4OGRmMmM1OWE2NjRmMmViMGRlMGU2YWM1YzFiNGQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaW5kbzEzMTYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SW5kb25lc2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOWIyNDQyNmFmOTU0N2UzOTdjY2ZkNjlmNTFkYWVhMy5zZXRDb250ZW50KGh0bWxfNzg4ZGYyYzU5YTY2NGYyZWIwZGUwZTZhYzVjMWI0ZDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2RjMWEwNjUzNTdlNDkxZjk1YTlkMWQ1MjkyMmYwMDkuYmluZFBvcHVwKHBvcHVwXzI5YjI0NDI2YWY5NTQ3ZTM5N2NjZmQ2OWY1MWRhZWEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZDIyM2U4MzkwOTc0ZWU3YmI2OWIzOTU5ZTA3NzE3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1Ljc4MzMsIDM4LjM5MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNjljOWYzM2E4ZGE0YTA5YmM0N2I0ZjYzMTEzNDBkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNzJlNjdkZDI5MGM0OWJlYWEwYzE1YmY2YzE3YWRiNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjcyZTY3ZGQyOTBjNDliZWFhMGMxNWJmNmMxN2FkYjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iaWxpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CaWxpbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNjljOWYzM2E4ZGE0YTA5YmM0N2I0ZjYzMTEzNDBkYi5zZXRDb250ZW50KGh0bWxfMjcyZTY3ZGQyOTBjNDliZWFhMGMxNWJmNmMxN2FkYjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGQyMjNlODM5MDk3NGVlN2JiNjliMzk1OWUwNzcxN2UuYmluZFBvcHVwKHBvcHVwX2Q2OWM5ZjMzYThkYTRhMDliYzQ3YjRmNjMxMTM0MGRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNzEzY2UyMmM5NDY0MDMzOTNhYmYzMmNmMWNiZTRiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi43MjU0NywgLTY4Ljk3MTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjY3ODg5NGRkZmU2NDhlMzkyNjhhZmFlYzg3ODFmZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWU2ZGE0NDQ5ODE0NGRhMmFiMjk4MmM5MjYwYWExNDYgPSAkKGA8ZGl2IGlkPSJodG1sXzVlNmRhNDQ0OTgxNDRkYTJhYjI5ODJjOTI2MGFhMTQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdXJ1dTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VXJ1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2Nzg4OTRkZGZlNjQ4ZTM5MjY4YWZhZWM4NzgxZmQxLnNldENvbnRlbnQoaHRtbF81ZTZkYTQ0NDk4MTQ0ZGEyYWIyOTgyYzkyNjBhYTE0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNzEzY2UyMmM5NDY0MDMzOTNhYmYzMmNmMWNiZTRiNS5iaW5kUG9wdXAocG9wdXBfMjY3ODg5NGRkZmU2NDhlMzkyNjhhZmFlYzg3ODFmZDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2YTNmZTU1Mzk5ZDQwMGM5YWNjYjU1NTZmNjM1OTZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuMzM0NTgsIDEwOS43MTYwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzNjI3OGJkN2U1ZjQyOWViOTRlNzVmY2ZmYTEwNzBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwMzI2NGJkMTg0ZTRkY2E5YjE0YjZkNTdiMDJlMzgwID0gJChgPGRpdiBpZD0iaHRtbF81MDMyNjRiZDE4NGU0ZGNhOWIxNGI2ZDU3YjAyZTM4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2luZG8xMzE2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkluZG9uZXNpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjM2Mjc4YmQ3ZTVmNDI5ZWI5NGU3NWZjZmZhMTA3MGUuc2V0Q29udGVudChodG1sXzUwMzI2NGJkMTg0ZTRkY2E5YjE0YjZkNTdiMDJlMzgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc2YTNmZTU1Mzk5ZDQwMGM5YWNjYjU1NTZmNjM1OTZiLmJpbmRQb3B1cChwb3B1cF9mMzYyNzhiZDdlNWY0MjllYjk0ZTc1ZmNmZmExMDcwZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjk4NDczZjNhOTM0NGIxMDhiYmMwMGZkMzNkY2E5ZjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43MywgMzUuNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NjU0NDRlZjM3Yzk0Njc2YjNlNjZhNThhZTI2NTQ3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTk5OTExMzA2MzI0MmMzOTVjMmM5NDI2MDdkNTI0MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTU5OTkxMTMwNjMyNDJjMzk1YzJjOTQyNjA3ZDUyNDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jYXBwMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DYXBwYWRvY2lhbiBHcmVlazwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NjU0NDRlZjM3Yzk0Njc2YjNlNjZhNThhZTI2NTQ3Yi5zZXRDb250ZW50KGh0bWxfMTU5OTkxMTMwNjMyNDJjMzk1YzJjOTQyNjA3ZDUyNDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjk4NDczZjNhOTM0NGIxMDhiYmMwMGZkMzNkY2E5ZjQuYmluZFBvcHVwKHBvcHVwXzY2NTQ0NGVmMzdjOTQ2NzZiM2U2NmE1OGFlMjY1NDdiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wM2Q0MGQ3ZDViY2U0MTMxYjJlNjg3ZWZiYWVlNzE3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI5LjIwMDQxNTAwMDAwMDAwMywgMjUuNTE5NjI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmMwMDlhN2IzZGRlNDNhMDhkNjAyNmE2NWIwYTA5NGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdlMWEzYjQ0ZGZjNGQ2NzliMTFmOTZmYzhmOTQ0MzEgPSAkKGA8ZGl2IGlkPSJodG1sXzE3ZTFhM2I0NGRmYzRkNjc5YjExZjk2ZmM4Zjk0NDMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2l3aTEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2l3aTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzAwOWE3YjNkZGU0M2EwOGQ2MDI2YTY1YjBhMDk0Yy5zZXRDb250ZW50KGh0bWxfMTdlMWEzYjQ0ZGZjNGQ2NzliMTFmOTZmYzhmOTQ0MzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDNkNDBkN2Q1YmNlNDEzMWIyZTY4N2VmYmFlZTcxNzMuYmluZFBvcHVwKHBvcHVwX2JjMDA5YTdiM2RkZTQzYTA4ZDYwMjZhNjViMGEwOTRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTNmM2I0NWE2MzQ0YzFjYWFkYjllOGRmMjhiYjlmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjM1MjksIC04Ni45MDkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDM2NThmZWU3YzY2NGQyNTk5YTg3NzlmYWU1NDJiNDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTFjZDFjYmEyZmZlNGU4Yjk4YmQ2NTA3ZDA5OTdkODYgPSAkKGA8ZGl2IGlkPSJodG1sXzExY2QxY2JhMmZmZTRlOGI5OGJkNjUwN2QwOTk3ZDg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZ2FyaTEyNTYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2FyaWZ1bmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDM2NThmZWU3YzY2NGQyNTk5YTg3NzlmYWU1NDJiNDEuc2V0Q29udGVudChodG1sXzExY2QxY2JhMmZmZTRlOGI5OGJkNjUwN2QwOTk3ZDg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJhM2YzYjQ1YTYzNDRjMWNhYWRiOWU4ZGYyOGJiOWYwLmJpbmRQb3B1cChwb3B1cF80MzY1OGZlZTdjNjY0ZDI1OTlhODc3OWZhZTU0MmI0MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWU4NTY2MTNhZGY3NDcwZmIzMTY4MDYxYTdmYmQ0ZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyOC42ODQsIDgzLjQ0ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80OGY2Mjg1M2U2YTg0OWQ2YTEzNjY4NDNjM2RhYWVkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYjJjMWE4ZGExMDk0YmY2ODkzY2EzOWMwOWRkODMyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWIyYzFhOGRhMTA5NGJmNjg5M2NhMzljMDlkZDgzMmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jaGFuMTMxMCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DaGFudHlhbDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OGY2Mjg1M2U2YTg0OWQ2YTEzNjY4NDNjM2RhYWVkOC5zZXRDb250ZW50KGh0bWxfYWIyYzFhOGRhMTA5NGJmNjg5M2NhMzljMDlkZDgzMmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWU4NTY2MTNhZGY3NDcwZmIzMTY4MDYxYTdmYmQ0ZWEuYmluZFBvcHVwKHBvcHVwXzQ4ZjYyODUzZTZhODQ5ZDZhMTM2Njg0M2MzZGFhZWQ4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZThiNWM4ZDNmYjU0M2RhODQ2N2Q0MmFjNGY0NTEyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi44NDQ4LCAxMzQuNjQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzc2Y2VhOTk0YmQ2NDQ0OGI4MzYxNTM2MDFlOGIyOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2M2YTc2NzgwYTk1NGQ4MjliZDgxMTI2OGU0OGYyYTQgPSAkKGA8ZGl2IGlkPSJodG1sX2NjNmE3Njc4MGE5NTRkODI5YmQ4MTEyNjhlNDhmMmE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbmdhbjEyOTUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TmdhbmRpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3NmNlYTk5NGJkNjQ0NDhiODM2MTUzNjAxZThiMjk1LnNldENvbnRlbnQoaHRtbF9jYzZhNzY3ODBhOTU0ZDgyOWJkODExMjY4ZTQ4ZjJhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZThiNWM4ZDNmYjU0M2RhODQ2N2Q0MmFjNGY0NTEyNC5iaW5kUG9wdXAocG9wdXBfNzc2Y2VhOTk0YmQ2NDQ0OGI4MzYxNTM2MDFlOGIyOTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlMmI5MGQwZGJlMDRjNjE5MWI1YWM2NTQ3MDVjMjgwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzAuNDA5NiwgLTkyLjcwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkM2U4MWY3Y2U0YjRiYjdhODdlYWYzOTMyODc4Y2UwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhZTA0NzQyZGUzYjQzN2Q4ZWFjYWViZmQ1YTZkYTM0ID0gJChgPGRpdiBpZD0iaHRtbF9lYWUwNDc0MmRlM2I0MzdkOGVhY2FlYmZkNWE2ZGEzNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tvYXMxMjM2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktvYXNhdGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWQzZTgxZjdjZTRiNGJiN2E4N2VhZjM5MzI4NzhjZTAuc2V0Q29udGVudChodG1sX2VhZTA0NzQyZGUzYjQzN2Q4ZWFjYWViZmQ1YTZkYTM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FlMmI5MGQwZGJlMDRjNjE5MWI1YWM2NTQ3MDVjMjgwLmJpbmRQb3B1cChwb3B1cF9hZDNlODFmN2NlNGI0YmI3YTg3ZWFmMzkzMjg3OGNlMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGU4ZGJiZThlOGYzNGE2YjgzMGQyYTNkMjlmNTUwMDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS4zLCA0NS42NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDkwNWI3ZmFlMzM4NDcxYjk5MjczYWYwZTM0M2UxODggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzgyMzEzNTRjYzY1NDk5ZDllYmZjNzJkMzhjZDc5MDAgPSAkKGA8ZGl2IGlkPSJodG1sXzc4MjMxMzU0Y2M2NTQ5OWQ5ZWJmYzcyZDM4Y2Q3OTAwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3VtZTEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3VtZXJpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDkwNWI3ZmFlMzM4NDcxYjk5MjczYWYwZTM0M2UxODguc2V0Q29udGVudChodG1sXzc4MjMxMzU0Y2M2NTQ5OWQ5ZWJmYzcyZDM4Y2Q3OTAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRlOGRiYmU4ZThmMzRhNmI4MzBkMmEzZDI5ZjU1MDA2LmJpbmRQb3B1cChwb3B1cF9kOTA1YjdmYWUzMzg0NzFiOTkyNzNhZjBlMzQzZTE4OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmZlNWUwZjI4NjEwNDUzNmJmMmJmYzI2YzAyNzJkOTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4xOTkyMTk5OTk5OTk5OTk1LCAxNTUuNDk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWM1MTU4ZmEyOTJjNDliOGJlODhmYmY3NzY3Zjk5MzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmNiMTU2N2ViYjVlNGI5ZDhiYjdmNWMzZGI1MTEyMTggPSAkKGA8ZGl2IGlkPSJodG1sX2JjYjE1NjdlYmI1ZTRiOWQ4YmI3ZjVjM2RiNTExMjE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdG9yYTEyNTkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VG9yYXU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWM1MTU4ZmEyOTJjNDliOGJlODhmYmY3NzY3Zjk5MzQuc2V0Q29udGVudChodG1sX2JjYjE1NjdlYmI1ZTRiOWQ4YmI3ZjVjM2RiNTExMjE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZmZTVlMGYyODYxMDQ1MzZiZjJiZmMyNmMwMjcyZDkyLmJpbmRQb3B1cChwb3B1cF8xYzUxNThmYTI5MmM0OWI4YmU4OGZiZjc3NjdmOTkzNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2M5Y2NhODAxNTFlNDMxMzg3YzExNjcxN2YzODZhZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi4zNTcxLCA4NC4zOTIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTU3ODk0MDY0ZGExNDg1NWJlNzBiMzUzMWNmZjU2MzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjdiMWY0Yzk2NWMwNGNhMWEzNTBkM2MzOTdhMjg3NjcgPSAkKGA8ZGl2IGlkPSJodG1sXzI3YjFmNGM5NjVjMDRjYTFhMzUwZDNjMzk3YTI4NzY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2hhcjEyODciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2hhcmlhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1Nzg5NDA2NGRhMTQ4NTViZTcwYjM1MzFjZmY1NjM3LnNldENvbnRlbnQoaHRtbF8yN2IxZjRjOTY1YzA0Y2ExYTM1MGQzYzM5N2EyODc2Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYzljY2E4MDE1MWU0MzEzODdjMTE2NzE3ZjM4NmFkNi5iaW5kUG9wdXAocG9wdXBfMTU3ODk0MDY0ZGExNDg1NWJlNzBiMzUzMWNmZjU2MzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5Yjk3ZTkwYTY1MDQ1NWI4ZDhiNmZlOWQyYjA3NjBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNjI5NywgLTE1NS40M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2OTdlZDEyYWMzMDQzMjU4MTRkMGIzNWJmOGNjNDNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhNzFmMTViZWY1MTQyYjY5Yzg0MjJjOWY2MjBmZGY2ID0gJChgPGRpdiBpZD0iaHRtbF9iYTcxZjE1YmVmNTE0MmI2OWM4NDIyYzlmNjIwZmRmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhd2ExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhd2FpaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2OTdlZDEyYWMzMDQzMjU4MTRkMGIzNWJmOGNjNDNiLnNldENvbnRlbnQoaHRtbF9iYTcxZjE1YmVmNTE0MmI2OWM4NDIyYzlmNjIwZmRmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOWI5N2U5MGE2NTA0NTViOGQ4YjZmZTlkMmIwNzYwZC5iaW5kUG9wdXAocG9wdXBfMDY5N2VkMTJhYzMwNDMyNTgxNGQwYjM1YmY4Y2M0M2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2OGRjYjI2MGU5YTQzOWU4ZjkzMmE4ZTdkNzQ4OTg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjguNjQxNiwgODQuMDUxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0MDg3YTA5NTdmNzQ0NGQ5NWZiMDEwMjVmYTM0OTkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkODgxODQzNjNlMzQzZTJhMWViNDdhYjRlMzI2MjgzID0gJChgPGRpdiBpZD0iaHRtbF8xZDg4MTg0MzYzZTM0M2UyYTFlYjQ3YWI0ZTMyNjI4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hbmExMjg4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hbmFuZ2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQwODdhMDk1N2Y3NDQ0ZDk1ZmIwMTAyNWZhMzQ5OTEuc2V0Q29udGVudChodG1sXzFkODgxODQzNjNlMzQzZTJhMWViNDdhYjRlMzI2MjgzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE2OGRjYjI2MGU5YTQzOWU4ZjkzMmE4ZTdkNzQ4OTg1LmJpbmRQb3B1cChwb3B1cF8xNDA4N2EwOTU3Zjc0NDRkOTVmYjAxMDI1ZmEzNDk5MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzZjZGJhNWI4NWQ3NDVjZjhlYjI5Y2IyMmM1ZDE0ZWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjgyNzk5MDAwMDAwMDAwMDIsIDEwMi44MDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYmZjNGY0ODAxYzE0ZDc1YTI4MjAzMDVhNzBhYTZhYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjFlMGY4MzMwYmE0MWUyYTJjYjgwODM1NGQ4MmFjOSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTYxZTBmODMzMGJhNDFlMmEyY2I4MDgzNTRkODJhYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zZW1lMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TZW1lbGFpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiZmM0ZjQ4MDFjMTRkNzVhMjgyMDMwNWE3MGFhNmFhLnNldENvbnRlbnQoaHRtbF8xNjFlMGY4MzMwYmE0MWUyYTJjYjgwODM1NGQ4MmFjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NmNkYmE1Yjg1ZDc0NWNmOGViMjljYjIyYzVkMTRlYy5iaW5kUG9wdXAocG9wdXBfMGJmYzRmNDgwMWMxNGQ3NWEyODIwMzA1YTcwYWE2YWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3MTY4NDBkMjM1ZTQwODFiYmMwYTAwMmMwMmM3NzMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNTE1NywgNDcuODk1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxZDI5OGRkODQ4NDRiZTNhZjBiYjNkZGFhMTg1MDMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0ZDc5NjkwMGJjYzQwZjhhZDVkNDU4NWUyYWFiNDdjID0gJChgPGRpdiBpZD0iaHRtbF83NGQ3OTY5MDBiY2M0MGY4YWQ1ZDQ1ODVlMmFhYjQ3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xlemcxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxlemdpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjFkMjk4ZGQ4NDg0NGJlM2FmMGJiM2RkYWExODUwMzMuc2V0Q29udGVudChodG1sXzc0ZDc5NjkwMGJjYzQwZjhhZDVkNDU4NWUyYWFiNDdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc3MTY4NDBkMjM1ZTQwODFiYmMwYTAwMmMwMmM3NzMyLmJpbmRQb3B1cChwb3B1cF9iMWQyOThkZDg0ODQ0YmUzYWYwYmIzZGRhYTE4NTAzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjk4MDUzMjY3NmU1NDgxN2JiNGEzODA0MWE4NmE4NGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTcuMDY5NSwgMTM5LjQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyNzJkNTRkMDkxNDRhMzJiMTRhMTFjNTZjNDFkNGQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhOWQ2MjVkNjFmNTRlNWE4OWYyN2M1MmYwMTAyYjU5ID0gJChgPGRpdiBpZD0iaHRtbF80YTlkNjI1ZDYxZjU0ZTVhODlmMjdjNTJmMDEwMmI1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2theWExMzE5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktheWFyZGlsZDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMjcyZDU0ZDA5MTQ0YTMyYjE0YTExYzU2YzQxZDRkOC5zZXRDb250ZW50KGh0bWxfNGE5ZDYyNWQ2MWY1NGU1YTg5ZjI3YzUyZjAxMDJiNTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjk4MDUzMjY3NmU1NDgxN2JiNGEzODA0MWE4NmE4NGUuYmluZFBvcHVwKHBvcHVwXzAyNzJkNTRkMDkxNDRhMzJiMTRhMTFjNTZjNDFkNGQ4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNDk5MzdiNDZkMDU0YTBjOTcwNzQ2YTI4MmY0MGY4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNzViZDgyYzcxZjc0Y2U1ODE0YTQ1N2UwZGJiMGNlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zODUxMTE2MDU1ZGU0ZTkyYjhkNTNhOWY2MjcwZGQ2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzg1MTExNjA1NWRlNGU5MmI4ZDUzYTlmNjI3MGRkNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9maW5uMTMxOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GaW5uaXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3NWJkODJjNzFmNzRjZTU4MTRhNDU3ZTBkYmIwY2VjLnNldENvbnRlbnQoaHRtbF8zODUxMTE2MDU1ZGU0ZTkyYjhkNTNhOWY2MjcwZGQ2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNDk5MzdiNDZkMDU0YTBjOTcwNzQ2YTI4MmY0MGY4Yy5iaW5kUG9wdXAocG9wdXBfZDc1YmQ4MmM3MWY3NGNlNTgxNGE0NTdlMGRiYjBjZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0Mzk1MDE1ZjM2YzQ3ZTlhODdjY2I3MTY0ZDIxZjUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuNSwgLTcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkODZhMDA0N2VhMDQwZDM5YWU5Y2I5OTM5MjI2ZDUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdiY2Q1YmIyMzk0MzQ4MmE4YzY5NTYzZjE5ZGYyZGVkID0gJChgPGRpdiBpZD0iaHRtbF83YmNkNWJiMjM5NDM0ODJhOGM2OTU2M2YxOWRmMmRlZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21vcm8xMjkyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1vcm9jY2FuIEFyYWJpYzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZDg2YTAwNDdlYTA0MGQzOWFlOWNiOTkzOTIyNmQ1MC5zZXRDb250ZW50KGh0bWxfN2JjZDViYjIzOTQzNDgyYThjNjk1NjNmMTlkZjJkZWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjQzOTUwMTVmMzZjNDdlOWE4N2NjYjcxNjRkMjFmNTIuYmluZFBvcHVwKHBvcHVwXzJkODZhMDA0N2VhMDQwZDM5YWU5Y2I5OTM5MjI2ZDUwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDFjZWE5OGQ3ZDg0OTE4ODY3N2UyZmYxODhjNmVhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNDQwMjA1LCAtNjguOTA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmOGM1OWFjZmMwMzQxYjU4Y2RhMGRiNmYwYzk2MWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhNzUyN2UwOWJhNTRjNTVhNDBhYjBiZTE2OWVjZmQyID0gJChgPGRpdiBpZD0iaHRtbF9lYTc1MjdlMDliYTU0YzU1YTQwYWIwYmUxNjllY2ZkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RhcmkxMjU2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRhcmlhbmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2Y4YzU5YWNmYzAzNDFiNThjZGEwZGI2ZjBjOTYxZjEuc2V0Q29udGVudChodG1sX2VhNzUyN2UwOWJhNTRjNTVhNDBhYjBiZTE2OWVjZmQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0MWNlYTk4ZDdkODQ5MTg4Njc3ZTJmZjE4OGM2ZWE1LmJpbmRQb3B1cChwb3B1cF8zZjhjNTlhY2ZjMDM0MWI1OGNkYTBkYjZmMGM5NjFmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzg3N2Q5NjFlNjdmNDQ2Mjk5Nzk0ODA2NjI4OWM4MzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNi4wODc2LCA5MS4yOTMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmEyYTgxOGU0YWJkNGYxZGJiY2YyNGJlZDk3NzA4ZTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDVkZDc1ODk4NmUxNDQ0NWFmOTQxMzc4YjdlYWM1OTIgPSAkKGA8ZGl2IGlkPSJodG1sXzQ1ZGQ3NTg5ODZlMTQ0NDVhZjk0MTM3OGI3ZWFjNTkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYXNzYTEyNjMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QXNzYW1lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmEyYTgxOGU0YWJkNGYxZGJiY2YyNGJlZDk3NzA4ZTIuc2V0Q29udGVudChodG1sXzQ1ZGQ3NTg5ODZlMTQ0NDVhZjk0MTM3OGI3ZWFjNTkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM4NzdkOTYxZTY3ZjQ0NjI5OTc5NDgwNjYyODljODMzLmJpbmRQb3B1cChwb3B1cF9iYTJhODE4ZTRhYmQ0ZjFkYmJjZjI0YmVkOTc3MDhlMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTZmZTRmY2VlOTFhNDQ2Nzg3YjQzOTg3NGI0OWNlYmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC41ODQwNSwgMTI1LjU4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYxMGJjZDliNzQ5MjQ5NjI4Y2FmZTBlZTFiZjNkMGY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhZjUwYTFjYWU4NjQ4M2U4ZmI1OTY0NTQ5ZjU1MDE3ID0gJChgPGRpdiBpZD0iaHRtbF8wYWY1MGExY2FlODY0ODNlOGZiNTk2NDU0OWY1NTAxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RldHUxMjQ2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRldHVuIERpbGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjEwYmNkOWI3NDkyNDk2MjhjYWZlMGVlMWJmM2QwZjQuc2V0Q29udGVudChodG1sXzBhZjUwYTFjYWU4NjQ4M2U4ZmI1OTY0NTQ5ZjU1MDE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU2ZmU0ZmNlZTkxYTQ0Njc4N2I0Mzk4NzRiNDljZWJiLmJpbmRQb3B1cChwb3B1cF82MTBiY2Q5Yjc0OTI0OTYyOGNhZmUwZWUxYmYzZDBmNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2JlMTQwYWZjOGMyNDUzNmFkMTA0ZTAzMzdhYzlmZWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC43NzU3LCAtODguOTU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwNDk3ZTUyNTYzMTQ3YWFhMWE5MTU4MjE5ODQxNmJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwMjQ1NmVmN2IxMDQ0NzVhNmE1YzljZmNhYTZkNTYyID0gJChgPGRpdiBpZD0iaHRtbF85MDI0NTZlZjdiMTA0NDc1YTZhNWM5Y2ZjYWE2ZDU2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3l1Y2ExMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPll1Y2F0ZWMgTWF5YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDQ5N2U1MjU2MzE0N2FhYTFhOTE1ODIxOTg0MTZiZS5zZXRDb250ZW50KGh0bWxfOTAyNDU2ZWY3YjEwNDQ3NWE2YTVjOWNmY2FhNmQ1NjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2JlMTQwYWZjOGMyNDUzNmFkMTA0ZTAzMzdhYzlmZWMuYmluZFBvcHVwKHBvcHVwXzAwNDk3ZTUyNTYzMTQ3YWFhMWE5MTU4MjE5ODQxNmJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNmE3ZTgzM2Q0YmY0M2I0OTlkZDM5N2Y3NGE4YWYzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjIzMDM5LCAxMjMuNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYjFmMTE3NTI4ZDM0ZjZlOGYyZmQzYjUzMGYyM2VjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZjczMzBkMzJjMmI0M2YxYWRkMGVmYTg3NWEwZTE0ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNGY3MzMwZDMyYzJiNDNmMWFkZDBlZmE4NzVhMGUxNGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rZWRhMTI1MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LZWRhbmc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWIxZjExNzUyOGQzNGY2ZThmMmZkM2I1MzBmMjNlYzkuc2V0Q29udGVudChodG1sXzRmNzMzMGQzMmMyYjQzZjFhZGQwZWZhODc1YTBlMTRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q2YTdlODMzZDRiZjQzYjQ5OWRkMzk3Zjc0YThhZjNlLmJpbmRQb3B1cChwb3B1cF9lYjFmMTE3NTI4ZDM0ZjZlOGYyZmQzYjUzMGYyM2VjOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2ZkZjgxOTYxMDg0NDg4NmE2MjkwMThiN2Q2NjJmOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi4zNTcxLCA4NC4zOTIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmY1YTc4N2RmZTc0NDdkZmE5MWZiNDk1YTdiOWIwMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWQ2ZWZmZmFjMTcyNGIwNDg5NzQxYTFkNDkxOTU5MzYgPSAkKGA8ZGl2IGlkPSJodG1sX2VkNmVmZmZhYzE3MjRiMDQ4OTc0MWExZDQ5MTk1OTM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2hhcjEyODciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2hhcmlhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmNWE3ODdkZmU3NDQ3ZGZhOTFmYjQ5NWE3YjliMDE2LnNldENvbnRlbnQoaHRtbF9lZDZlZmZmYWMxNzI0YjA0ODk3NDFhMWQ0OTE5NTkzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZmRmODE5NjEwODQ0ODg2YTYyOTAxOGI3ZDY2MmY5Yi5iaW5kUG9wdXAocG9wdXBfYmY1YTc4N2RmZTc0NDdkZmE5MWZiNDk1YTdiOWIwMTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmYWFjNWRmNGIxYzQ0MWI5NDRkYWJlNGNlYmFkZDU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguNjQ4OTk5OTk5OTk5OTk0LCAxMi40Njc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjU0NWY4MmJhZTY4NDQ2NThjMzMzMTEwMGFjODBhOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTdhYmJiZDQ2OGRhNDgyYzliNjE3YjA4YjQwODMzZDIgPSAkKGA8ZGl2IGlkPSJodG1sXzU3YWJiYmQ0NjhkYTQ4MmM5YjYxN2IwOGI0MDgzM2QyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2VybWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1NDVmODJiYWU2ODQ0NjU4YzMzMzExMDBhYzgwYTkxLnNldENvbnRlbnQoaHRtbF81N2FiYmJkNDY4ZGE0ODJjOWI2MTdiMDhiNDA4MzNkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZmFhYzVkZjRiMWM0NDFiOTQ0ZGFiZTRjZWJhZGQ1OC5iaW5kUG9wdXAocG9wdXBfNjU0NWY4MmJhZTY4NDQ2NThjMzMzMTEwMGFjODBhOTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiOTdmMGIxZmQ0MzQ5OGZhMDQ2ZjZjMTVjNGJiZTFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMCwgMTI0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMWFlNGIxNjVmNDA0N2M1OWViNmZiOWE4Y2U1OWVkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NzMxOGZiNWIyZjA0MzAyOGJmYjNmOTBiODAyNmM0YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTczMThmYjViMmYwNDMwMjhiZmIzZjkwYjgwMjZjNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9kYXVyMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5EYWd1cjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMWFlNGIxNjVmNDA0N2M1OWViNmZiOWE4Y2U1OWVkZC5zZXRDb250ZW50KGh0bWxfNTczMThmYjViMmYwNDMwMjhiZmIzZjkwYjgwMjZjNGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGI5N2YwYjFmZDQzNDk4ZmEwNDZmNmMxNWM0YmJlMWQuYmluZFBvcHVwKHBvcHVwX2IxYWU0YjE2NWY0MDQ3YzU5ZWI2ZmI5YThjZTU5ZWRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjkyYmUxNzYzZjU0ZGFhYTZmYzI5ODM5NWYyYmI4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZjVkYWQzNmY0Y2I0YjdhOTFiYzgwYmM2NmRkMzg1NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZDYyOTQ0MDQ5NmI0MDAyYWZjYjU0YWRlYzNiZjM5YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZWQ2Mjk0NDA0OTZiNDAwMmFmY2I1NGFkZWMzYmYzOWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9odW5nMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IdW5nYXJpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWY1ZGFkMzZmNGNiNGI3YTkxYmM4MGJjNjZkZDM4NTYuc2V0Q29udGVudChodG1sX2VkNjI5NDQwNDk2YjQwMDJhZmNiNTRhZGVjM2JmMzliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M2OTJiZTE3NjNmNTRkYWFhNmZjMjk4Mzk1ZjJiYjg2LmJpbmRQb3B1cChwb3B1cF8xZjVkYWQzNmY0Y2I0YjdhOTFiYzgwYmM2NmRkMzg1NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGEyNzEzMmEyNzUwNDQ0NjgxZTdkNzgwZDMwYTNhMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAxMjQuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmYTNlNmM4ODk2NzQ5MmRhYzYzYThiMmUxZDlhYzlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0NzhhMGU5MTRjMDRhYTdhODhhYzM1YzRhMjhhNjBhID0gJChgPGRpdiBpZD0iaHRtbF9hNDc4YTBlOTE0YzA0YWE3YTg4YWMzNWM0YTI4YTYwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2RhdXIxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkRhZ3VyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmYTNlNmM4ODk2NzQ5MmRhYzYzYThiMmUxZDlhYzlhLnNldENvbnRlbnQoaHRtbF9hNDc4YTBlOTE0YzA0YWE3YTg4YWMzNWM0YTI4YTYwYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYTI3MTMyYTI3NTA0NDQ2ODFlN2Q3ODBkMzBhM2EyMC5iaW5kUG9wdXAocG9wdXBfNWZhM2U2Yzg4OTY3NDkyZGFjNjNhOGIyZTFkOWFjOWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlN2JhZjg4NjMyNTQ0MTc5YTg0MmVhMTYxYzg0NGNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTAuNjYzMjIsIDM5Ljc5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5YWNjMzNlOWQ1NzQxYzNiOThjNDE4YmUzOWMwZGZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc3OWU2YmFmODZhMjQzMGVhN2VkMDYzYjg4MjNiMzcxID0gJChgPGRpdiBpZD0iaHRtbF83NzllNmJhZjg2YTI0MzBlYTdlZDA2M2I4ODIzYjM3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2lsd2ExMjM3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPklsd2FuYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OWFjYzMzZTlkNTc0MWMzYjk4YzQxOGJlMzljMGRmZi5zZXRDb250ZW50KGh0bWxfNzc5ZTZiYWY4NmEyNDMwZWE3ZWQwNjNiODgyM2IzNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWU3YmFmODg2MzI1NDQxNzlhODQyZWExNjFjODQ0Y2MuYmluZFBvcHVwKHBvcHVwXzU5YWNjMzNlOWQ1NzQxYzNiOThjNDE4YmUzOWMwZGZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YjNkOTVmMDRmMmE0YWJkYTQ2OGQ4YzEyNmM3NTczYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNy4wNjk1LCAxMzkuNDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjY2NlNmNjIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDhlZTRmNmYxNThhNGFkOWJkZDAyMWM3NGZkYzY0MmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZiNGRkNTYyZGYwNDU4NmExNTJiZDEwODgyZTE3MDQgPSAkKGA8ZGl2IGlkPSJodG1sX2I2YjRkZDU2MmRmMDQ1ODZhMTUyYmQxMDg4MmUxNzA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2F5YTEzMTkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2F5YXJkaWxkPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ4ZWU0ZjZmMTU4YTRhZDliZGQwMjFjNzRmZGM2NDJiLnNldENvbnRlbnQoaHRtbF9iNmI0ZGQ1NjJkZjA0NTg2YTE1MmJkMTA4ODJlMTcwNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YjNkOTVmMDRmMmE0YWJkYTQ2OGQ4YzEyNmM3NTczYy5iaW5kUG9wdXAocG9wdXBfNDhlZTRmNmYxNThhNGFkOWJkZDAyMWM3NGZkYzY0MmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM2ZGM2ZDZjOTg1MjQ4MDRhNjMwNTE5ODczMzZmYTA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTcuMzM0NTgsIDEwOS43MTYwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2NjZTZjYyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjNWRhMmRkNmQ5ZjQ2ZTNiNmRiYWVkNjY1NGRjNzk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyNjA0MjRkOGU2YzQxM2RiOWI3YzIxYTgxZjE1YWU1ID0gJChgPGRpdiBpZD0iaHRtbF9hMjYwNDI0ZDhlNmM0MTNkYjliN2MyMWE4MWYxNWFlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2luZG8xMzE2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkluZG9uZXNpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWM1ZGEyZGQ2ZDlmNDZlM2I2ZGJhZWQ2NjU0ZGM3OTYuc2V0Q29udGVudChodG1sX2EyNjA0MjRkOGU2YzQxM2RiOWI3YzIxYTgxZjE1YWU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM2ZGM2ZDZjOTg1MjQ4MDRhNjMwNTE5ODczMzZmYTA3LmJpbmRQb3B1cChwb3B1cF81YzVkYTJkZDZkOWY0NmUzYjZkYmFlZDY2NTRkYzc5NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQ1NjZiNDE1MmMwNGZkMmIzZGE3ZDI4NjU5NDBlYjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS44ODg0LCAxNC40NTA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjY2NlNmNjIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjM2MTVhMDU0YzgzNGMzZjlmM2VkN2U4MmVhMzg4NDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmNiMjgyZDM2ZDcyNDg0OGFmM2MzNDYzYThlNjM5NzcgPSAkKGA8ZGl2IGlkPSJodG1sXzJjYjI4MmQzNmQ3MjQ4NDhhZjNjMzQ2M2E4ZTYzOTc3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFsdDEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFsdGVzZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MzYxNWEwNTRjODM0YzNmOWYzZWQ3ZTgyZWEzODg0MC5zZXRDb250ZW50KGh0bWxfMmNiMjgyZDM2ZDcyNDg0OGFmM2MzNDYzYThlNjM5NzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDQ1NjZiNDE1MmMwNGZkMmIzZGE3ZDI4NjU5NDBlYjAuYmluZFBvcHVwKHBvcHVwXzYzNjE1YTA1NGM4MzRjM2Y5ZjNlZDdlODJlYTM4ODQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNTdkOWQxZTdkYWY0OTAwYjk5MWVmNGFhMWRkYjZjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI4LjUzNDcsIDY0LjI5OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNjY2U2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80OTJiYzRiODEyODM0MTRiODYyM2FmNjdkNWU4N2U0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzA2ZWU0YzBlMzU0YjNmOTljMGM4YTViNWQxZDE4MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzcwNmVlNGMwZTM1NGIzZjk5YzBjOGE1YjVkMWQxODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9icmFoMTI1NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CcmFodWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDkyYmM0YjgxMjgzNDE0Yjg2MjNhZjY3ZDVlODdlNGYuc2V0Q29udGVudChodG1sX2M3MDZlZTRjMGUzNTRiM2Y5OWMwYzhhNWI1ZDFkMTgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q1N2Q5ZDFlN2RhZjQ5MDBiOTkxZWY0YWExZGRiNmNlLmJpbmRQb3B1cChwb3B1cF80OTJiYzRiODEyODM0MTRiODYyM2FmNjdkNWU4N2U0ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWMxNjJlMDQzZmY5NGRkNmFlMjc1MDQ1NmRlNjQzNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjY2NlNmNjIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjczMjMyY2QwNzZlNDZmY2E0NjRjOGYzYTMyOTZhY2MpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDRkZWU2Nzk0ZmJlNDcxYmFmMjIyMTE0OGNkM2I0NWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjkzNjFlNGVjMmE4NGRkZDk2NDYzMTJlNjc0MzdjZmMgPSAkKGA8ZGl2IGlkPSJodG1sXzY5MzYxZTRlYzJhODRkZGQ5NjQ2MzEyZTY3NDM3Y2ZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVya2lzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNGRlZTY3OTRmYmU0NzFiYWYyMjIxMTQ4Y2QzYjQ1Zi5zZXRDb250ZW50KGh0bWxfNjkzNjFlNGVjMmE4NGRkZDk2NDYzMTJlNjc0MzdjZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWMxNjJlMDQzZmY5NGRkNmFlMjc1MDQ1NmRlNjQzNjAuYmluZFBvcHVwKHBvcHVwXzA0ZGVlNjc5NGZiZTQ3MWJhZjIyMjExNDhjZDNiNDVmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MDA3MWQyNTg1YmU0M2NmYmJmZjA2OGEwYzM3N2U1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjExNzQsIDIyLjM3ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM5OWNkOTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNGFkYTRiOGIwNzc0ZmU1OTJlMTQ5N2NmNzBjZTE3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjlhZTM4N2I0MWE0N2Q1YjljYjM4MzljZTBjMDdhNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTI5YWUzODdiNDFhNDdkNWI5Y2IzODM5Y2UwYzA3YTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tZWdsMTIzNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NZWdsZW5vIFJvbWFuaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0YWRhNGI4YjA3NzRmZTU5MmUxNDk3Y2Y3MGNlMTc5LnNldENvbnRlbnQoaHRtbF81MjlhZTM4N2I0MWE0N2Q1YjljYjM4MzljZTBjMDdhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MDA3MWQyNTg1YmU0M2NmYmJmZjA2OGEwYzM3N2U1Ny5iaW5kUG9wdXAocG9wdXBfZjRhZGE0YjhiMDc3NGZlNTkyZTE0OTdjZjcwY2UxNzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4NWVjZGJkNzRjNjQ5OTdiMTUyNjc2MjA0MjE0NzZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjc4NywgLTEuMzE2MjIwMDAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzk5Y2Q5OSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk4OTliYTJiMTVjZTQ4YmFhNzM5NWEzMGU2OTgwMTQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkYjQyNzdiZjVmMzQwNDE4MTk5MTJiM2ZkNWNiMTU4ID0gJChgPGRpdiBpZD0iaHRtbF8yZGI0Mjc3YmY1ZjM0MDQxODE5OTEyYjNmZDVjYjE1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Jhc3ExMjQ4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJhc3F1ZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ODk5YmEyYjE1Y2U0OGJhYTczOTVhMzBlNjk4MDE0MC5zZXRDb250ZW50KGh0bWxfMmRiNDI3N2JmNWYzNDA0MTgxOTkxMmIzZmQ1Y2IxNTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTg1ZWNkYmQ3NGM2NDk5N2IxNTI2NzYyMDQyMTQ3NmQuYmluZFBvcHVwKHBvcHVwXzk4OTliYTJiMTVjZTQ4YmFhNzM5NWEzMGU2OTgwMTQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTVjODNhOWE0MDY0ZWFjYjgyYmJiOTZlZTI4NWExNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy03LjA5MzEzOTk5OTk5OTk5OSwgLTc4LjMyMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM2NmIzNjYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjU5NGFjYzkzZWE0MjQyODI2YTY0MzZmNTFlOWJlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzEzMTQ1YjYyZGE0NDY1OTM4ODQxOWEyMjA5MGE2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTcxMzE0NWI2MmRhNDQ2NTkzODg0MTlhMjIwOTBhNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jYWphMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DYWphbWFyY2EgUXVlY2h1YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjU5NGFjYzkzZWE0MjQyODI2YTY0MzZmNTFlOWJlNy5zZXRDb250ZW50KGh0bWxfZTcxMzE0NWI2MmRhNDQ2NTkzODg0MTlhMjIwOTBhNmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjU1YzgzYTlhNDA2NGVhY2I4MmJiYjk2ZWUyODVhMTUuYmluZFBvcHVwKHBvcHVwXzMyNTk0YWNjOTNlYTQyNDI4MjZhNjQzNmY1MWU5YmU3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zODFiNzcxODM1NjA0ZjJkYWQyZWVhZDhlNTZhYjc4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYxLjY5NzQsIDEzMy45OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMzOWEzMyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3MzIzMmNkMDc2ZTQ2ZmNhNDY0YzhmM2EzMjk2YWNjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwOTJmMzM2YTk4MTQ1MDQ4YzU5NjFkZDE5YTc4ZWVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzYWJiMjAyNDNmODRkMzRhMDI5NjQwMDlmOWUzMWI2ID0gJChgPGRpdiBpZD0iaHRtbF80M2FiYjIwMjQzZjg0ZDM0YTAyOTY0MDA5ZjllMzFiNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3lha3UxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNha2hhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwOTJmMzM2YTk4MTQ1MDQ4YzU5NjFkZDE5YTc4ZWVlLnNldENvbnRlbnQoaHRtbF80M2FiYjIwMjQzZjg0ZDM0YTAyOTY0MDA5ZjllMzFiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zODFiNzcxODM1NjA0ZjJkYWQyZWVhZDhlNTZhYjc4Yi5iaW5kUG9wdXAocG9wdXBfNzA5MmYzMzZhOTgxNDUwNDhjNTk2MWRkMTlhNzhlZWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2ZTdmNjA1Y2MyMjRkYTNiYTdkZjAxMjkwOGQ0ZWU1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTY2ODI1LCA3NC4zMzA0NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMzlhMzMiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mNzMyMzJjZDA3NmU0NmZjYTQ2NGM4ZjNhMzI5NmFjYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOWI0MDk1Y2U1MTc0ZjI4ODZhY2M1ODg1ZWM4MzNlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTAyYzFjMmQ2Yzk0MTI5OWQ0NzA5OTc5NWY3MGUxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGEwMmMxYzJkNmM5NDEyOTlkNDcwOTk3OTVmNzBlMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYXNoMTI3NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYXNobWlyaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOWI0MDk1Y2U1MTc0ZjI4ODZhY2M1ODg1ZWM4MzNlYy5zZXRDb250ZW50KGh0bWxfZGEwMmMxYzJkNmM5NDEyOTlkNDcwOTk3OTVmNzBlMTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjZlN2Y2MDVjYzIyNGRhM2JhN2RmMDEyOTA4ZDRlZTUuYmluZFBvcHVwKHBvcHVwX2M5YjQwOTVjZTUxNzRmMjg4NmFjYzU4ODVlYzgzM2VjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7ff62612d208>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(adj.language_recipient)\n",
    "m.add_features(adj['adjectivizer'], numeric=True)\n",
    "m.legend_title = 'Adj'\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. SAILS <a name=\"sails\"></a>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "from lingtypology.datasets import Sails"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To get a `pandas.DataFrame` of features and descriptions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Feature</th>\n",
       "      <th>Description</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ICU17</td>\n",
       "      <td>Is plurality in independent pronouns expressed...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ICU16</td>\n",
       "      <td>Is plurality in independent pronouns expressed...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ICU15</td>\n",
       "      <td>Is plurality in independent pronouns expressed...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>ICU14</td>\n",
       "      <td>Is an associative or collective plural disting...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ICU13</td>\n",
       "      <td>Are nouns denoting inanimates marked for plural?</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Feature                                        Description\n",
       "0   ICU17  Is plurality in independent pronouns expressed...\n",
       "1   ICU16  Is plurality in independent pronouns expressed...\n",
       "2   ICU15  Is plurality in independent pronouns expressed...\n",
       "3   ICU14  Is an associative or collective plural disting...\n",
       "4   ICU13   Are nouns denoting inanimates marked for plural?"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Sails().features_descriptions.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get description for particular features:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Feature</th>\n",
       "      <th>Description</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ICU10</td>\n",
       "      <td>Is nominal plural marking obligatory?</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ICU11</td>\n",
       "      <td>Are nouns denoting humans marked for plural?</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Feature                                   Description\n",
       "0   ICU10         Is nominal plural marking obligatory?\n",
       "1   ICU11  Are nouns denoting humans marked for plural?"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Sails().feature_descriptions('ICU10', 'ICU11')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To get the SAILS data as `dict`, you can use `get_json` method. To get data as `pandas.DataFrame` you can run:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "You probably should cite it, but I don't understand how. Please, consult https://sails.clld.org/\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>language</th>\n",
       "      <th>coordinates</th>\n",
       "      <th>ICU3</th>\n",
       "      <th>ICU3_desc</th>\n",
       "      <th>ICU4</th>\n",
       "      <th>ICU4_desc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Baniva</td>\n",
       "      <td>(5.26123, -67.56326999999999)</td>\n",
       "      <td>1</td>\n",
       "      <td>Yes</td>\n",
       "      <td>0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Apolista</td>\n",
       "      <td>(-14.83, -68.66)</td>\n",
       "      <td>0</td>\n",
       "      <td>No</td>\n",
       "      <td>?</td>\n",
       "      <td>?</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Yavitero</td>\n",
       "      <td>(2.800281, -68.08421899999999)</td>\n",
       "      <td>1</td>\n",
       "      <td>Yes</td>\n",
       "      <td>0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Resígaro</td>\n",
       "      <td>(-2.48139, -71.35778)</td>\n",
       "      <td>0</td>\n",
       "      <td>No</td>\n",
       "      <td>0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Tol</td>\n",
       "      <td>(14.66859, -87.03719)</td>\n",
       "      <td>0</td>\n",
       "      <td>No</td>\n",
       "      <td>0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   language                     coordinates ICU3 ICU3_desc ICU4 ICU4_desc\n",
       "0    Baniva   (5.26123, -67.56326999999999)    1       Yes    0        No\n",
       "1  Apolista                (-14.83, -68.66)    0        No    ?         ?\n",
       "2  Yavitero  (2.800281, -68.08421899999999)    1       Yes    0        No\n",
       "3  Resígaro           (-2.48139, -71.35778)    0        No    0        No\n",
       "4       Tol           (14.66859, -87.03719)    0        No    0        No"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sails = Sails('ICU3', 'ICU4')\n",
    "df = sails.get_df()\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Map example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzFhYTc1MDQzYTg2NTQ1M2I4MDM2MTA4ZjAwMDRiNTI5IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8xYWE3NTA0M2E4NjU0NTNiODAzNjEwOGYwMDA0YjUyOSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IGxlZnQ6IDIwcHg7IGJvdHRvbTogNDBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+SXMgdGhlcmUgYSBzaW1wbGUgbGF0ZXJhbCB2aWJyYW50IHBob25lbWUgL2wvPzwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2U2MTk0YjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5ObzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzE5ZTZiNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5ZZXM8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8xYWE3NTA0M2E4NjU0NTNiODAzNjEwOGYwMDA0YjUyOSA9IEwubWFwKAogICAgICAgICdtYXBfMWFhNzUwNDNhODY1NDUzYjgwMzYxMDhmMDAwNGI1MjknLCB7CiAgICAgICAgY2VudGVyOiBbOSwgLTc5XSwKICAgICAgICB6b29tOiA1LAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzFhYTc1MDQzYTg2NTQ1M2I4MDM2MTA4ZjAwMDRiNTI5KTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2UwZjJjZmUyZmVjMTQzOThiNDUyYTY0YWEzMmFlMWI3ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF8xYWE3NTA0M2E4NjU0NTNiODAzNjEwOGYwMDA0YjUyOSk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjggPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzFhYTc1MDQzYTg2NTQ1M2I4MDM2MTA4ZjAwMDRiNTI5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMGRiN2U5Yzc0YjE0NzVmYTNjYjk3MTVkMzg5YTJhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNC44MywgLTY4LjY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZmQxNTRhZmY0Yjc0ODM4YmYzOWI2YmM3NTc1MDNmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjQ4MTM5LCAtNzEuMzU3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjgwMGQ3NWZkMmU1NDY2MzllYjkwODc4YzU3ZDVkNmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC42Njg2LCAtODcuMDM3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmNiZDdmZDIwNzk2NDY5Y2FlMmQ0NzJlYTVhNjFjOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjE1Njg2LCAtNzguMzA3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzc0N2ZmMDAzOTNkNDFjN2E1YThmZjg1MTQ1ZWJlZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuNTM0OSwgLTc0LjQzNzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlOTFmZGY0ZmRiODQzNDI4MWE0ZTYxZmQ2ZDIxYmM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC42OTYxOCwgLTY3LjUwMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmMzIxOTY1MGE3MTRmZGFiZGFkZWIxNmIwNTRmYjFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4xMjc2MTAwMDAwMDAwMDEsIC03Ny41NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmYjE0NjQ5ZmMzNDQ5NTJhMGVkODE1MjZiNDdmMmZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMi42MTUxNiwgLTc2LjMxMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxMjMyZThmN2VhNDQzZGNiYzZhMWYyZjVjNjM1ZThmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNTAwNywgLTgzLjg1NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QzYTQ0ZDQyMGQ2MjRiYWM5ZWE3ZjMwODFiMzVmMzdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNzAxOCwgLTczLjYzNjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5ZjgxOWNjNzk2NDQwY2E5YWVhZTU3MjA0OTRiNWY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMS45MTY0OTAwMDAwMDAwMDAyLCAtNjYuODI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNmI0MGQ2MTA5MzM0ODEzYjk2N2I3ZGExMDc2NDU1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS45MzExLCAtNzMuOTA3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTIwNmQzZGRlYTVlNDA0ZWE1M2E0NGUzZDY4OTI2MTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjYzOTkzLCAtNTEuNjI0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWE1YjU3MzAyODU2NDZiZWE0MDhlZDlmY2IyYjFjNWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuMTAxOCwgLTcyLjM1MDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1YWU2Mzc2NzViODQwNjg4N2M2ZDQ5OTA5NWI5MzFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMS4yMTY1MiwgLTc4LjM0MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhZWFmYjc0ZWI3MjRmNjQ5YTZkZGYwZjU2ZmY3NjY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTguMjE2OTIsIC02Ni43NzE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTMzZDgyMGU4NDI0MmI2YWI4M2Q5MDA0NWY1M2VkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy4xMjc4LCAtNjQuMTgzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTRiZDBhMmIwNjFhNDViNTkxMzY0ODk2ZjFmOTAxNzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjU4NzQ0LCAtNTkuODAyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTQwZmRkYmQwNjQyNDhmOGJiN2JlOTliZDNiZDdlZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjgyNTEsIC04Mi4zOTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMGUwYzcxNGY0ZTM0ZTQ5YWYwYmViNjViMDVhYTk5NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi4xMjkxLCAtNzIuNTAxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzZiNTJjM2YyYWI0NDRkOThjODc4YzVkNWVhYTQ0ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTYuNzcwODMzLCAtNjEuNDU0MTY3MDAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMzc3YTNjZGRmMjY0MGY2YTgyNTYyYzcyNTI1NDYxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQuMzc3MTgsIC02OC41OTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OGMzZWNjNmMwY2Y0YmQ0YTcyZTVmOTQ0ZDRmN2M4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNDQwMjA1LCAtNjguOTA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTExNTJmZTgyNTBkNDBmMDhkMjBmZDlkMDFhOTZmNGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuOTQyMywgLTY1LjM5NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzZTExOWZiZmM2YjRhZGM5MGRjYzY3ZDdhMzNiY2UzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuODAzMywgLTg1LjU1Nzk5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMjI5ODliYzJhYWQ0YmU1YThjMmI3MDZlN2Q3ZTYyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjE1NzYsIC04NC4yOTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjVkZTcyYmI5NDM0ZmVjYjA3NDJkYzdhMmE4NzkxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS4xMTg4LCAtNjUuMzk5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjg2Y2VkNGIzODQ1NGJjMDg4Nzg2YjZiNmVjMzNkZjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0LjI1ODc2OTk5OTk5OTk5OSwgLTc3LjM1NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM3MTYwY2I5YmE1NjRhOTE4NTEzNWIyNTgxYTRjMWI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMTE0OSwgLTc1LjY3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwNWMyNjk1MWE2ZTQyNmRhMzNkZGUzZmJhZTZmYjQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMi44MDAyODEsIC02OC4wODQyMTg5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzc0N2UyYjM1MTM1NGI1Y2I1MmY0OGJkZTY1OWVhYmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuNDc0NSwgLTcwLjc5NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxOGQ4NDY2ODNhYTQxN2RiNmQ5YThkMTY3MzQ3OTBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMzk1NTY2LCAtNzIuMTk5NzkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OWViNjNkZWVkMDc0OWY5OGQ0ZGMxZTJkMmMxMzU2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMC41NDU0LCAtNzUuMzE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNThiODJkZWI5NWI0MTVmODYwYjI0NWZkOWEwYjE1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjM2NDc5NSwgLTYxLjM0Mjk1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDg5NzBhODhjYTZlNDRlNDg2MDE3YmZmNzc4YTZhM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjY0Mjk1LCAtNTYuOTI0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI2N2JiOWJkNTE5NDZmNzhmMDM0NDU5OWNhZDM2ZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMC43NjA3NSwgLTcxLjAwMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIyMjY0OTFjYzJjYTQzZTdhODhmOTZiYjI4ZTQ5ZjA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjUzNjQsIC01My41MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmOTNiYzQ4NmNmNDQyNDZhMjJmMDdhMGI0ZTcwMjIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC4zODY0OSwgLTcyLjIwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwMDg1MTNjYWNiMDQwYzM4MjRlYThkYzJkNDMyZGY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjQzMDIsIC01OC45ODAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hM2EwMDNlYzJkZDM0N2MyYWI2YjUzNmQxZjhhNjYwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjkyODYsIC03My40MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDE1NDU0OTBmOWQ0NDljODQzMDRiYTQzYzVhMjdkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy4yOTYsIC01My42OTcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mY2YwZmJiOGFkNGM0OWRlOWE5MjdhMDhiOWIxOTdmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuMDY3LCAtODIuOTYzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzEzMDRmMmNmZTM3NGI1MmI2YzhlYWRkOGFiNDAyNDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC4yODM2LCAtNjYuODA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTMxODM3NjVhMjgzNDkwYTgzMjc0NWViZjU3YTIzOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4zNTI5LCAtODYuOTA5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2JjNzQyN2M3YWVlNDA2MTk2NjEyNjE4ZTU5Nzc3MTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuNDY1MywgLTY5LjMwODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE3M2QzNjA5MGIxYzQ5YTRhYzhkNTYxMTZmYjEzNzdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjU5MjksIC01Ny40MDU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZDQ4ZTJiNTkzYmI0MWE3OTEwMWM0ODNlOWE3ZWJhZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQuOCwgLTY3LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1NjFhODlkYzUyYTQ4NzA5ODYyZjFkOTU4NGJkYzMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE0LjgzLCAtNjguNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MDBiMTNiYTk3NTg0NTBkYjRmOGE0NGVjOGYxZWVhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTJkOWRhN2MwNzg0ZTU5YjgxMTJmMTA1YTM1YzQzMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjEyZDlkYTdjMDc4NGU1OWI4MTEyZjEwNWEzNWM0MzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hcG9sMTI0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BcG9saXN0YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDBiMTNiYTk3NTg0NTBkYjRmOGE0NGVjOGYxZWVhMC5zZXRDb250ZW50KGh0bWxfZjEyZDlkYTdjMDc4NGU1OWI4MTEyZjEwNWEzNWM0MzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzU2MWE4OWRjNTJhNDg3MDk4NjJmMWQ5NTg0YmRjMzAuYmluZFBvcHVwKHBvcHVwXzkwMGIxM2JhOTc1ODQ1MGRiNGY4YTQ0ZWM4ZjFlZWEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOGIyMjM3OTFkNWI0MTE3YTc4MWYyZjMzNzNiODY3OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjQ4MTM5LCAtNzEuMzU3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0NGMxZjExNTk4YzRlYWZhMGQyMGQ4YmFhZTMzNjE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4NTcyOTRkYTI0YzQyNDM4ZmEyNGNjY2ViOTQ1ZGZkID0gJChgPGRpdiBpZD0iaHRtbF9iODU3Mjk0ZGEyNGM0MjQzOGZhMjRjY2NlYjk0NWRmZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Jlc2kxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJlc8OtZ2FybzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDRjMWYxMTU5OGM0ZWFmYTBkMjBkOGJhYWUzMzYxNi5zZXRDb250ZW50KGh0bWxfYjg1NzI5NGRhMjRjNDI0MzhmYTI0Y2NjZWI5NDVkZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjhiMjIzNzkxZDViNDExN2E3ODFmMmYzMzczYjg2NzkuYmluZFBvcHVwKHBvcHVwXzQ0NGMxZjExNTk4YzRlYWZhMGQyMGQ4YmFhZTMzNjE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Zjg0ZTU1NTVmYTM0YmFjOGU5OThlNzA4ZjQyYTU3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0LjY2ODYsIC04Ny4wMzcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWI5YWU5MjJlMjMxNGU1ZWE4ODI4NTM0MzE5YjliYTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWU1Y2VlNjNjZmU0NGFmYThkM2ZiNDllNGFhYTNiNWYgPSAkKGA8ZGl2IGlkPSJodG1sX2FlNWNlZTYzY2ZlNDRhZmE4ZDNmYjQ5ZTRhYWEzYjVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdG9sbDEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VG9sPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiOWFlOTIyZTIzMTRlNWVhODgyODUzNDMxOWI5YmEyLnNldENvbnRlbnQoaHRtbF9hZTVjZWU2M2NmZTQ0YWZhOGQzZmI0OWU0YWFhM2I1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82Zjg0ZTU1NTVmYTM0YmFjOGU5OThlNzA4ZjQyYTU3Ny5iaW5kUG9wdXAocG9wdXBfMWI5YWU5MjJlMjMxNGU1ZWE4ODI4NTM0MzE5YjliYTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4OWEwMjM0NWZiZTRlOTM5NTM4MjY3ODNkZmU3ODkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4xNTY4NiwgLTc4LjMwNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNWRmNGYyMGI4NDk0OGFhODk4ZTAyYjRmMDZkYjQ1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NmQxYzY5MWU4ZmY0NmJiYmQ2NDlmYjVlZDg5ODI2YiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTZkMWM2OTFlOGZmNDZiYmJkNjQ5ZmI1ZWQ4OTgyNmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zYW5iMTI0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TYW4gQmxhcyBLdW5hPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1ZGY0ZjIwYjg0OTQ4YWE4OThlMDJiNGYwNmRiNDU5LnNldENvbnRlbnQoaHRtbF81NmQxYzY5MWU4ZmY0NmJiYmQ2NDlmYjVlZDg5ODI2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ODlhMDIzNDVmYmU0ZTkzOTUzODI2NzgzZGZlNzg5MS5iaW5kUG9wdXAocG9wdXBfZTVkZjRmMjBiODQ5NDhhYTg5OGUwMmI0ZjA2ZGI0NTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiYTU3OTYzMjExNjQ0YzhiYTcwZmE4MmRkZmRjYzY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjUzNDksIC03NC40MzcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjRjYTFjMmU2YWQ2NGRmYTllZTkzMjdkMTkwNGQ2MGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGM3ZDZiZmQxZjJhNDJmYzgyY2VkZTJkYzViZDM4YTEgPSAkKGA8ZGl2IGlkPSJodG1sX2RjN2Q2YmZkMWYyYTQyZmM4MmNlZGUyZGM1YmQzOGExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9tYTEyNjMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9tYXRzaWd1ZW5nYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNGNhMWMyZTZhZDY0ZGZhOWVlOTMyN2QxOTA0ZDYwYS5zZXRDb250ZW50KGh0bWxfZGM3ZDZiZmQxZjJhNDJmYzgyY2VkZTJkYzViZDM4YTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2JhNTc5NjMyMTE2NDRjOGJhNzBmYTgyZGRmZGNjNjcuYmluZFBvcHVwKHBvcHVwX2Y0Y2ExYzJlNmFkNjRkZmE5ZWU5MzI3ZDE5MDRkNjBhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNGEwNGU4NmEzY2E0YzE0OWE4ZGVlMmM4NDg1YzZjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNjk2MTgsIC02Ny41MDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGI2YWZlNGI0M2YyNGU1ZWFkMGViYWMyZTdmNjdhZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTVhMGU3YjQwMjFjNDMxYmJjYzcxZGEzOWUyNDJmMWUgPSAkKGA8ZGl2IGlkPSJodG1sXzU1YTBlN2I0MDIxYzQzMWJiY2M3MWRhMzllMjQyZjFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY3VycjEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q3VycmlwYWNvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiNmFmZTRiNDNmMjRlNWVhZDBlYmFjMmU3ZjY3YWZlLnNldENvbnRlbnQoaHRtbF81NWEwZTdiNDAyMWM0MzFiYmNjNzFkYTM5ZTI0MmYxZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNGEwNGU4NmEzY2E0YzE0OWE4ZGVlMmM4NDg1YzZjMC5iaW5kUG9wdXAocG9wdXBfZGI2YWZlNGI0M2YyNGU1ZWFkMGViYWMyZTdmNjdhZmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyZWJlYjAwMTA4ZTQxYTM5YTQxMjI0ZTQ5OTJkMTNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNy4xMjc2MTAwMDAwMDAwMDEsIC03Ny41NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMWQ5ZmY4YTY5ODE0YWNlYTYzOTc2MGNiMDBmOTY5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82Zjg2ZGZhMmMyM2Y0YTMxOTQ2Y2FmMDQwMWYwNzNhMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNmY4NmRmYTJjMjNmNGEzMTk0NmNhZjA0MDFmMDczYTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ub3J0Mjk3MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ob3J0aGVybiBFbWJlcsOhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YxZDlmZjhhNjk4MTRhY2VhNjM5NzYwY2IwMGY5Njk3LnNldENvbnRlbnQoaHRtbF82Zjg2ZGZhMmMyM2Y0YTMxOTQ2Y2FmMDQwMWYwNzNhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MmViZWIwMDEwOGU0MWEzOWE0MTIyNGU0OTkyZDEzZC5iaW5kUG9wdXAocG9wdXBfZjFkOWZmOGE2OTgxNGFjZWE2Mzk3NjBjYjAwZjk2OTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExZjc2ZDEyYmM3MzRhNjRhN2I4NWYwY2JmMDNmMzU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMi42MTUxNiwgLTc2LjMxMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YTc5YjhlZGVmOGQ0Y2NlODBkZjg0NTlkNmU4OTA2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOWFhM2Q2M2Q4YzM0YTVhOGY4ZWNjOTY3M2RjMDY4MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTlhYTNkNjNkOGMzNGE1YThmOGVjYzk2NzNkYzA2ODEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wYWV6MTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qw6FlejwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YTc5YjhlZGVmOGQ0Y2NlODBkZjg0NTlkNmU4OTA2ZS5zZXRDb250ZW50KGh0bWxfYTlhYTNkNjNkOGMzNGE1YThmOGVjYzk2NzNkYzA2ODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTFmNzZkMTJiYzczNGE2NGE3Yjg1ZjBjYmYwM2YzNTYuYmluZFBvcHVwKHBvcHVwXzVhNzliOGVkZWY4ZDRjY2U4MGRmODQ1OWQ2ZTg5MDZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZmIxZTZlNmQ4ZWE0ZmU0YmIwNWQ1MWU3YTk2ZWM3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjUwMDcsIC04My44NTcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGRjNGE1M2Y0MDc5NDRkNGFiZDk5ZTQ5ZjIyMDk4ZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjVhMTY2ODNlOGZjNGI0ZDlkY2JjMGNiNTI5NjZiZTEgPSAkKGA8ZGl2IGlkPSJodG1sXzI1YTE2NjgzZThmYzRiNGQ5ZGNiYzBjYjUyOTY2YmUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcmFtYTEyNzAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UmFtYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZGM0YTUzZjQwNzk0NGQ0YWJkOTllNDlmMjIwOThkMi5zZXRDb250ZW50KGh0bWxfMjVhMTY2ODNlOGZjNGI0ZDlkY2JjMGNiNTI5NjZiZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGZiMWU2ZTZkOGVhNGZlNGJiMDVkNTFlN2E5NmVjN2UuYmluZFBvcHVwKHBvcHVwX2RkYzRhNTNmNDA3OTQ0ZDRhYmQ5OWU0OWYyMjA5OGQyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NWNhYmExNjk0YWE0MmU5YjkyZjdkYTE4MzY5NDE1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjcwMTgsIC03My42MzYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGZjYTRiZTQyMDA2NGYzOThiNjVkYTcxMGI2MjlhZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjAxM2YwZDVjNzNjNGMxMTlkMDQ5NWNjNzE0ODllZWMgPSAkKGA8ZGl2IGlkPSJodG1sXzIwMTNmMGQ1YzczYzRjMTE5ZDA0OTVjYzcxNDg5ZWVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYXJodTEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QXJodWFjbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZmNhNGJlNDIwMDY0ZjM5OGI2NWRhNzEwYjYyOWFlYS5zZXRDb250ZW50KGh0bWxfMjAxM2YwZDVjNzNjNGMxMTlkMDQ5NWNjNzE0ODllZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjVjYWJhMTY5NGFhNDJlOWI5MmY3ZGExODM2OTQxNTAuYmluZFBvcHVwKHBvcHVwXzRmY2E0YmU0MjAwNjRmMzk4YjY1ZGE3MTBiNjI5YWVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYWQ0MDIxN2JiMTQ0NDAyYTc0NjdhMjQyZmUwMDFmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEuOTE2NDkwMDAwMDAwMDAwMiwgLTY2LjgyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlMTRlMDAwMmEyMzQxMGZiZjgyYjE2ZGUzZmI3NWViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjYjY4YmZjODhhMTQ3NjliZjAyOWZlZTZhYmFiMmNmID0gJChgPGRpdiBpZD0iaHRtbF83Y2I2OGJmYzg4YTE0NzY5YmYwMjlmZWU2YWJhYjJjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2JhcmUxMjc2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJhcsOpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlMTRlMDAwMmEyMzQxMGZiZjgyYjE2ZGUzZmI3NWViLnNldENvbnRlbnQoaHRtbF83Y2I2OGJmYzg4YTE0NzY5YmYwMjlmZWU2YWJhYjJjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYWQ0MDIxN2JiMTQ0NDAyYTc0NjdhMjQyZmUwMDFmMi5iaW5kUG9wdXAocG9wdXBfZWUxNGUwMDAyYTIzNDEwZmJmODJiMTZkZTNmYjc1ZWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiNDIyZmU3MGY5NjQ2Nzc4OWYyYzI2NTlhNTcyM2M2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjkzMTEsIC03My45MDczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZmZTc2NzU4NGFjNDdkYjg2ZDQ2YzA5Y2FmNDU4ZTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGZlZGJlN2ExOWViNDY3NThiODRiMzQ3OGFmZmE5YzMgPSAkKGA8ZGl2IGlkPSJodG1sXzhmZWRiZTdhMTllYjQ2NzU4Yjg0YjM0NzhhZmZhOWMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYXNoYTEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QXNow6FuaW5rYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZmZlNzY3NTg0YWM0N2RiODZkNDZjMDljYWY0NThlNS5zZXRDb250ZW50KGh0bWxfOGZlZGJlN2ExOWViNDY3NThiODRiMzQ3OGFmZmE5YzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2I0MjJmZTcwZjk2NDY3Nzg5ZjJjMjY1OWE1NzIzYzYuYmluZFBvcHVwKHBvcHVwX2FmZmU3Njc1ODRhYzQ3ZGI4NmQ0NmMwOWNhZjQ1OGU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODIwMWEyNzg5MzY0YzVhYWNmYTk1NzYxNjAyYWQxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMuNjM5OTMsIC01MS42MjQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGY4NjFhNzg4ZDc3NDZjMjhkYjM4ZWNiMWI4NzAzNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjkzYzllMGExMDczNGM4Yzg4NGM4MmIwZTYzOWU1NDMgPSAkKGA8ZGl2IGlkPSJodG1sXzI5M2M5ZTBhMTA3MzRjOGM4ODRjODJiMGU2MzllNTQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGFsaTEyNzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGFsaWvDunI8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGY4NjFhNzg4ZDc3NDZjMjhkYjM4ZWNiMWI4NzAzNWIuc2V0Q29udGVudChodG1sXzI5M2M5ZTBhMTA3MzRjOGM4ODRjODJiMGU2MzllNTQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg4MjAxYTI3ODkzNjRjNWFhY2ZhOTU3NjE2MDJhZDE0LmJpbmRQb3B1cChwb3B1cF9kZjg2MWE3ODhkNzc0NmMyOGRiMzhlY2IxYjg3MDM1YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTgzZTg2OGFkMzJlNGViMWE2OThiZTgxOTY1YmJjNWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuMTAxOCwgLTcyLjM1MDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOWM1YjMyMDRmYTk0NTg1ODU4NGY0Y2I0Yjg5MWZlNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NGU5YjYyN2FiYmY0OGQ3ODY2MjQzNWRjZmEzNDFiZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDRlOWI2MjdhYmJmNDhkNzg2NjI0MzVkY2ZhMzQxYmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uYW50MTI1MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OYW50aTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOWM1YjMyMDRmYTk0NTg1ODU4NGY0Y2I0Yjg5MWZlNS5zZXRDb250ZW50KGh0bWxfNDRlOWI2MjdhYmJmNDhkNzg2NjI0MzVkY2ZhMzQxYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTgzZTg2OGFkMzJlNGViMWE2OThiZTgxOTY1YmJjNWYuYmluZFBvcHVwKHBvcHVwXzM5YzViMzIwNGZhOTQ1ODU4NTg0ZjRjYjRiODkxZmU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzYwNjk0ZTIxYmU0NTZhYTA1NmM1MTQxNTRmOWMzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEuMjE2NTIsIC03OC4zNDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjcyZTQ3NzZlNDUzNDAxMzg5NGIzMWIxNjdlMTgzM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGNiNGRmNzhlY2JhNDAxNmEzYTBhNjg3N2IzN2Y1YTcgPSAkKGA8ZGl2IGlkPSJodG1sX2RjYjRkZjc4ZWNiYTQwMTZhM2EwYTY4NzdiMzdmNWE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYXdhYzEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QXdhLUN1YWlxdWVyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3MmU0Nzc2ZTQ1MzQwMTM4OTRiMzFiMTY3ZTE4MzNhLnNldENvbnRlbnQoaHRtbF9kY2I0ZGY3OGVjYmE0MDE2YTNhMGE2ODc3YjM3ZjVhNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNzYwNjk0ZTIxYmU0NTZhYTA1NmM1MTQxNTRmOWMzMi5iaW5kUG9wdXAocG9wdXBfYjcyZTQ3NzZlNDUzNDAxMzg5NGIzMWIxNjdlMTgzM2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzYTg2YjQzMGE2MzRjMWJiNmFjZGQzMTQwZmRmNzEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTguMjE2OTIsIC02Ni43NzE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzM5ODJmMGFiNjJlNDYwMzg1MWExMzU3NmQ5NTE2ZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTM0ZWM0NGE0ZjI0NGE2ZmFmOGE4NDAyMDA2ODA5YTkgPSAkKGA8ZGl2IGlkPSJodG1sX2EzNGVjNDRhNGYyNDRhNmZhZjhhODQwMjAwNjgwOWE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYXB1cjEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QXB1cmluw6M8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzM5ODJmMGFiNjJlNDYwMzg1MWExMzU3NmQ5NTE2ZGQuc2V0Q29udGVudChodG1sX2EzNGVjNDRhNGYyNDRhNmZhZjhhODQwMjAwNjgwOWE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UzYTg2YjQzMGE2MzRjMWJiNmFjZGQzMTQwZmRmNzEzLmJpbmRQb3B1cChwb3B1cF9jMzk4MmYwYWI2MmU0NjAzODUxYTEzNTc2ZDk1MTZkZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGI2ZjVmN2MxY2Q2NGJjMWIzN2IyOTBjNzc5YmVlNmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuMTI3OCwgLTY0LjE4MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNTA1NDBhMDM4MTg0MDUyOGE5NjgyYzc4NjYwZWRlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTY2MDZjNjg4ZGQ0YmYzYWM3NmVhYzc2OWNhZmFiMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGU2NjA2YzY4OGRkNGJmM2FjNzZlYWM3NjljYWZhYjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iYXVyMTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CYXVyZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNTA1NDBhMDM4MTg0MDUyOGE5NjgyYzc4NjYwZWRlZS5zZXRDb250ZW50KGh0bWxfZGU2NjA2YzY4OGRkNGJmM2FjNzZlYWM3NjljYWZhYjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGI2ZjVmN2MxY2Q2NGJjMWIzN2IyOTBjNzc5YmVlNmEuYmluZFBvcHVwKHBvcHVwXzI1MDU0MGEwMzgxODQwNTI4YTk2ODJjNzg2NjBlZGVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NzA0MjMwZGFjNDA0OWM4YjE5ZjgzNDcyN2YwY2Y4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuNTg3NDQsIC01OS44MDIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjI5MmQxY2ZkZTAyNDQ0Mjk1YmYwNjkzMWUyNDg2ZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDIyMzFiZDM1NmRjNDI3ZWE5ZDEzMjYzOTY2Y2VhNTkgPSAkKGA8ZGl2IGlkPSJodG1sXzAyMjMxYmQzNTZkYzQyN2VhOWQxMzI2Mzk2NmNlYTU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvd2FwaTEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V2FwaXNoYW5hPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyOTJkMWNmZGUwMjQ0NDI5NWJmMDY5MzFlMjQ4NmQyLnNldENvbnRlbnQoaHRtbF8wMjIzMWJkMzU2ZGM0MjdlYTlkMTMyNjM5NjZjZWE1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NzA0MjMwZGFjNDA0OWM4YjE5ZjgzNDcyN2YwY2Y4Zi5iaW5kUG9wdXAocG9wdXBfNjI5MmQxY2ZkZTAyNDQ0Mjk1YmYwNjkzMWUyNDg2ZDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0MDhiNzlkM2QyODQ4MDU4YWJhYjgxYzZhMjc5NTQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOC44MjUxLCAtODIuMzkxMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmOTQ4NTJmNDU0ZDRkYzg5YjIwMzU2ZWQwNWM4MzdhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4OTRkZGEwNjUzYzRkNjBhYzViNWJjZWNiMDQ4M2U3ID0gJChgPGRpdiBpZD0iaHRtbF8wODk0ZGRhMDY1M2M0ZDYwYWM1YjViY2VjYjA0ODNlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25nYWIxMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5nw6RiZXJlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmOTQ4NTJmNDU0ZDRkYzg5YjIwMzU2ZWQwNWM4MzdhLnNldENvbnRlbnQoaHRtbF8wODk0ZGRhMDY1M2M0ZDYwYWM1YjViY2VjYjA0ODNlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNDA4Yjc5ZDNkMjg0ODA1OGFiYWI4MWM2YTI3OTU0NC5iaW5kUG9wdXAocG9wdXBfOGY5NDg1MmY0NTRkNGRjODliMjAzNTZlZDA1YzgzN2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0MDllNDUyYzE4ODRhZjhhZTBkYjllMWQyZmE4YjVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjEyOTEsIC03Mi41MDE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjEzMTNmYWM1ZDVmNGE0NDg4NmRlMmJjNmM3NjA4NTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Q0ZmZkZjAzY2UxNDA4MThmZWVjYzhiYTc2MjI3MGYgPSAkKGA8ZGl2IGlkPSJodG1sXzdkNGZmZGYwM2NlMTQwODE4ZmVlY2M4YmE3NjIyNzBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFjaDEyNjciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFjaGlndWVuZ2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjEzMTNmYWM1ZDVmNGE0NDg4NmRlMmJjNmM3NjA4NTQuc2V0Q29udGVudChodG1sXzdkNGZmZGYwM2NlMTQwODE4ZmVlY2M4YmE3NjIyNzBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I0MDllNDUyYzE4ODRhZjhhZTBkYjllMWQyZmE4YjVlLmJpbmRQb3B1cChwb3B1cF9iMTMxM2ZhYzVkNWY0YTQ0ODg2ZGUyYmM2Yzc2MDg1NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzQzOTliNmQwZmQzNDliNmE4MmFjOGZjNjM0YWQyYzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTYuNzcwODMzLCAtNjEuNDU0MTY3MDAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmEyMmU1NjQyODM4NGJkYjlmMTkxZGUyY2RjNDliZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTk1OTY4MzU5ZjNjNDgxNTg3NTliNmJmYTliOGYwZTUgPSAkKGA8ZGl2IGlkPSJodG1sXzk5NTk2ODM1OWYzYzQ4MTU4NzU5YjZiZmE5YjhmMGU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGF1bjEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGF1bmFjYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYTIyZTU2NDI4Mzg0YmRiOWYxOTFkZTJjZGM0OWJkMS5zZXRDb250ZW50KGh0bWxfOTk1OTY4MzU5ZjNjNDgxNTg3NTliNmJmYTliOGYwZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzQzOTliNmQwZmQzNDliNmE4MmFjOGZjNjM0YWQyYzEuYmluZFBvcHVwKHBvcHVwX2JhMjJlNTY0MjgzODRiZGI5ZjE5MWRlMmNkYzQ5YmQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MzUwYzlmYzA3MjA0MDcyOWE1MzdjMTJkZWU4ZjU5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQuMzc3MTgsIC02OC41OTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTYxYzNiNzJiNDRkNDYxN2JiODk4ODkzYWRkMjUzN2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGMxNzhhNWZjMmNlNDdlZjk0NjgzZDg0ZmIxYjg2YTcgPSAkKGA8ZGl2IGlkPSJodG1sXzRjMTc4YTVmYzJjZTQ3ZWY5NDY4M2Q4NGZiMWI4NmE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcGlhcDEyNDYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UGlhcG9jbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NjFjM2I3MmI0NGQ0NjE3YmI4OTg4OTNhZGQyNTM3ZC5zZXRDb250ZW50KGh0bWxfNGMxNzhhNWZjMmNlNDdlZjk0NjgzZDg0ZmIxYjg2YTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzM1MGM5ZmMwNzIwNDA3MjlhNTM3YzEyZGVlOGY1OWQuYmluZFBvcHVwKHBvcHVwXzk2MWMzYjcyYjQ0ZDQ2MTdiYjg5ODg5M2FkZDI1MzdkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85M2YzM2Q5Mzk0ZDY0N2RlYjUxNTVhZjE1NzNkMmY4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNDQwMjA1LCAtNjguOTA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwNGM4NDQ0ZGJkMjQ5OTViNDRlODg3YTA1MTRiYjQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwY2U0YjQ1YmQ0ZTRjM2E4ODJlOWY2Y2Y5MzZhOTRkID0gJChgPGRpdiBpZD0iaHRtbF9iMGNlNGI0NWJkNGU0YzNhODgyZTlmNmNmOTM2YTk0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RhcmkxMjU2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRhcmlhbmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTA0Yzg0NDRkYmQyNDk5NWI0NGU4ODdhMDUxNGJiNDcuc2V0Q29udGVudChodG1sX2IwY2U0YjQ1YmQ0ZTRjM2E4ODJlOWY2Y2Y5MzZhOTRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzZjMzZDkzOTRkNjQ3ZGViNTE1NWFmMTU3M2QyZjhjLmJpbmRQb3B1cChwb3B1cF85MDRjODQ0NGRiZDI0OTk1YjQ0ZTg4N2EwNTE0YmI0NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmIwMDU1YWM5OGQ5NGU4NGFmZmFiZmIzNTk1MjUwZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuOTQyMywgLTY1LjM5NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82N2I2MmQ4OTgxNjY0MWVlYjA0NTE2MTkyMmMwMzZiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDdjMDA2MTFiZjg0Yzk3Yjg0YWU4YzhhZGMzMWE3ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjQ3YzAwNjExYmY4NGM5N2I4NGFlOGM4YWRjMzFhN2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zYXJhMTMzMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TYXJhdmVjYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82N2I2MmQ4OTgxNjY0MWVlYjA0NTE2MTkyMmMwMzZiOC5zZXRDb250ZW50KGh0bWxfZjQ3YzAwNjExYmY4NGM5N2I4NGFlOGM4YWRjMzFhN2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmIwMDU1YWM5OGQ5NGU4NGFmZmFiZmIzNTk1MjUwZTIuYmluZFBvcHVwKHBvcHVwXzY3YjYyZDg5ODE2NjQxZWViMDQ1MTYxOTIyYzAzNmI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDc3MGI3ZjI1NjI0NzAwYjFlOTMxOTVjZTc0OGE1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjgwMzMsIC04NS41NTc5OTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjMmM3OGZiMTU1ZDQ2Zjg4Y2QwZGZhMTRiMjllYjY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjMDJmMWJkNDhiZjRjYzJhYTAyZjA2MjI4NjVjMGUyID0gJChgPGRpdiBpZD0iaHRtbF9jYzAyZjFiZDQ4YmY0Y2MyYWEwMmYwNjIyODY1YzBlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BlY2gxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBlY2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGMyYzc4ZmIxNTVkNDZmODhjZDBkZmExNGIyOWViNjYuc2V0Q29udGVudChodG1sX2NjMDJmMWJkNDhiZjRjYzJhYTAyZjA2MjI4NjVjMGUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IwNzcwYjdmMjU2MjQ3MDBiMWU5MzE5NWNlNzQ4YTVhLmJpbmRQb3B1cChwb3B1cF8wYzJjNzhmYjE1NWQ0NmY4OGNkMGRmYTE0YjI5ZWI2NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGFkZjk3YjgzMjI0NGEyZmIxOTlhY2QyZWI2YzZhNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4xNTc2LCAtODQuMjk0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhM2ViMWQ1NDg2YjRiMjhhN2Y2Yzc2Y2E1MDM1NWNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3YzJhZTQxNzU4NTRmZDg5Y2RjN2Q5ZDM3M2Q3ZmEzID0gJChgPGRpdiBpZD0iaHRtbF8yN2MyYWU0MTc1ODU0ZmQ4OWNkYzdkOWQzNzNkN2ZhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21pc2sxMjM1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk3DrXNraXRvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhM2ViMWQ1NDg2YjRiMjhhN2Y2Yzc2Y2E1MDM1NWNiLnNldENvbnRlbnQoaHRtbF8yN2MyYWU0MTc1ODU0ZmQ4OWNkYzdkOWQzNzNkN2ZhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YWRmOTdiODMyMjQ0YTJmYjE5OWFjZDJlYjZjNmE1Yi5iaW5kUG9wdXAocG9wdXBfZGEzZWIxZDU0ODZiNGIyOGE3ZjZjNzZjYTUwMzU1Y2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1ZTQxZmEyOGViZDQ2MGViZTNiNTA2MzRkYjVkN2FhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE1LjExODgsIC02NS4zOTkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTZkODllMzRmYzg1NDc0YTlhZjU5YWMwYmY4ZjBmNmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODQ0MDg4MGI1OGFjNGYxZGE3MWU3MDhmMjExMzhhODkgPSAkKGA8ZGl2IGlkPSJodG1sXzg0NDA4ODBiNThhYzRmMWRhNzFlNzA4ZjIxMTM4YTg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaWduYTEyNDYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SWduYWNpYW5vPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U2ZDg5ZTM0ZmM4NTQ3NGE5YWY1OWFjMGJmOGYwZjZhLnNldENvbnRlbnQoaHRtbF84NDQwODgwYjU4YWM0ZjFkYTcxZTcwOGYyMTEzOGE4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NWU0MWZhMjhlYmQ0NjBlYmUzYjUwNjM0ZGI1ZDdhYS5iaW5kUG9wdXAocG9wdXBfZTZkODllMzRmYzg1NDc0YTlhZjU5YWMwYmY4ZjBmNmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExMDc2YjI1ZWI2MTQ3MDdiZjQxYTY4MGM2YzFhZWNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC4yNTg3Njk5OTk5OTk5OTksIC03Ny4zNTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjE0YjM1ZThjNGRjNDczYmEzNTMyMWQ3MWE0YzgxMmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWZlMjM3Y2Q2YmM3NGVlMmFkYzBiNGY1ZDg5YTBlYTYgPSAkKGA8ZGl2IGlkPSJodG1sXzFmZTIzN2NkNmJjNzRlZTJhZGMwYjRmNWQ4OWEwZWE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZXBlbjEyMzkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RXBlbmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjE0YjM1ZThjNGRjNDczYmEzNTMyMWQ3MWE0YzgxMmUuc2V0Q29udGVudChodG1sXzFmZTIzN2NkNmJjNzRlZTJhZGMwYjRmNWQ4OWEwZWE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExMDc2YjI1ZWI2MTQ3MDdiZjQxYTY4MGM2YzFhZWNhLmJpbmRQb3B1cChwb3B1cF82MTRiMzVlOGM0ZGM0NzNiYTM1MzIxZDcxYTRjODEyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2ZhZWU2YTJkMzQ1NDdiYmE0NTE2ZGMwNWJiNDM1ZWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4xMTQ5LCAtNzUuNjc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjNTBiMGFmOTRjZDQzNmY4MGVkMzBjYzljMDM3ZWEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1NDYyNjcyYzI0MTRhNmE5YmI1MzVlNDMxY2FjODYwID0gJChgPGRpdiBpZD0iaHRtbF9hNTQ2MjY3MmMyNDE0YTZhOWJiNTM1ZTQzMWNhYzg2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2NoYW0xMzE4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkNoYW1pY3VybzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YzUwYjBhZjk0Y2Q0MzZmODBlZDMwY2M5YzAzN2VhMi5zZXRDb250ZW50KGh0bWxfYTU0NjI2NzJjMjQxNGE2YTliYjUzNWU0MzFjYWM4NjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2ZhZWU2YTJkMzQ1NDdiYmE0NTE2ZGMwNWJiNDM1ZWMuYmluZFBvcHVwKHBvcHVwXzRjNTBiMGFmOTRjZDQzNmY4MGVkMzBjYzljMDM3ZWEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MDkyYTNkM2IxYTA0MDA0YTVkNGE2NTkzNzQ2NmI1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuODAwMjgxLCAtNjguMDg0MjE4OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYzBiMzY5N2RmNWM0YmQ2OGI1YjE0YzVhZDE1N2ZhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTAxZDJhYjExOTY0ZTE4OTUxNDZiNThhZTM0ZTQyNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDEwMWQyYWIxMTk2NGUxODk1MTQ2YjU4YWUzNGU0MjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95YXZpMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZYXZpdGVybzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzBiMzY5N2RmNWM0YmQ2OGI1YjE0YzVhZDE1N2ZhMy5zZXRDb250ZW50KGh0bWxfNDEwMWQyYWIxMTk2NGUxODk1MTQ2YjU4YWUzNGU0MjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTA5MmEzZDNiMWEwNDAwNGE1ZDRhNjU5Mzc0NjZiNTguYmluZFBvcHVwKHBvcHVwX2JjMGIzNjk3ZGY1YzRiZDY4YjViMTRjNWFkMTU3ZmEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZGIzN2Y1M2EyMDk0OWI0YmZlYmM2MTRlNWQ2NDM3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS40NzQ1LCAtNzAuNzk1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4NjFmZjFmZGI2YTRjOWVhMTcwODZiMjZjZDMxMTZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmZjg0NTQ0MzJkODRiOGM4ZTBjOTkxZTcyZWM1ZjBmID0gJChgPGRpdiBpZD0iaHRtbF9lZmY4NDU0NDMyZDg0YjhjOGUwYzk5MWU3MmVjNWYwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hc2gxMjcwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hc2hjbyBQaXJvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4NjFmZjFmZGI2YTRjOWVhMTcwODZiMjZjZDMxMTZmLnNldENvbnRlbnQoaHRtbF9lZmY4NDU0NDMyZDg0YjhjOGUwYzk5MWU3MmVjNWYwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZGIzN2Y1M2EyMDk0OWI0YmZlYmM2MTRlNWQ2NDM3Mi5iaW5kUG9wdXAocG9wdXBfYjg2MWZmMWZkYjZhNGM5ZWExNzA4NmIyNmNkMzExNmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhOGMxMWNkNDM0YjQ1NDY4ZTgwNzk0NmUzMDNmMjAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMzk1NTY2LCAtNzIuMTk5NzkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjY2NGY2YzI3NWMxNDZkY2JmNjAzZTkxNmU4ZTNjZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTE5ZmZkYjY4MTQ5NDllMmJkNzcyNzMwODZhZjhiMzggPSAkKGA8ZGl2IGlkPSJodG1sXzkxOWZmZGI2ODE0OTQ5ZTJiZDc3MjczMDg2YWY4YjM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvd2F5dTEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V2F5dXU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjY2NGY2YzI3NWMxNDZkY2JmNjAzZTkxNmU4ZTNjZDAuc2V0Q29udGVudChodG1sXzkxOWZmZGI2ODE0OTQ5ZTJiZDc3MjczMDg2YWY4YjM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhOGMxMWNkNDM0YjQ1NDY4ZTgwNzk0NmUzMDNmMjAwLmJpbmRQb3B1cChwb3B1cF82NjY0ZjZjMjc1YzE0NmRjYmY2MDNlOTE2ZThlM2NkMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTI1NzlhNDYwNzAyNDE1Zjk5MGFjMWZhNzhjNTA2ZTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTAuNTQ1NCwgLTc1LjMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5ZWIyMGJlYTJmMjQ0ZmNiN2I5YjA0NDQwY2ZkNmZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0NWJmOGFjMDQxMDQ3ZGI5ZTIyMzcwYzEyZWM3MTU0ID0gJChgPGRpdiBpZD0iaHRtbF82NDViZjhhYzA0MTA0N2RiOWUyMjM3MGMxMmVjNzE1NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3lhbmUxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPllhbmVzaGEnPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5ZWIyMGJlYTJmMjQ0ZmNiN2I5YjA0NDQwY2ZkNmZhLnNldENvbnRlbnQoaHRtbF82NDViZjhhYzA0MTA0N2RiOWUyMjM3MGMxMmVjNzE1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MjU3OWE0NjA3MDI0MTVmOTkwYWMxZmE3OGM1MDZlNS5iaW5kUG9wdXAocG9wdXBfNjllYjIwYmVhMmYyNDRmY2I3YjliMDQ0NDBjZmQ2ZmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1YWViMjMzOWM5YzQzY2Q4OTFmZDFiZWEwZTU1OWUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMzY0Nzk1LCAtNjEuMzQyOTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDkwOGUxMWE3N2FlNDUyN2EwZjllOTFlYjhjM2E1OTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzc1N2IyYTNlYTdkNDczNmFmN2Q0NDEzZjUzYWMwNDMgPSAkKGA8ZGl2IGlkPSJodG1sXzM3NTdiMmEzZWE3ZDQ3MzZhZjdkNDQxM2Y1M2FjMDQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXNsYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXNsYW5kIENhcmliPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q5MDhlMTFhNzdhZTQ1MjdhMGY5ZTkxZWI4YzNhNTk1LnNldENvbnRlbnQoaHRtbF8zNzU3YjJhM2VhN2Q0NzM2YWY3ZDQ0MTNmNTNhYzA0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NWFlYjIzMzljOWM0M2NkODkxZmQxYmVhMGU1NTllMC5iaW5kUG9wdXAocG9wdXBfZDkwOGUxMWE3N2FlNDUyN2EwZjllOTFlYjhjM2E1OTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5ODljOTgxZTUzOTQ1OWJiNGY1MzllMWMwOTk3OTIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNS42NDI5NSwgLTU2LjkyNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OWNlZDU2NGQ5OGY0ZWJjYmNhZDFjOGNmY2ZhN2Y1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjU3ODcxN2Y2ZjQ0ZGE5Yjk2YzY3N2EyOTNlMzRhOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjY1Nzg3MTdmNmY0NGRhOWI5NmM2NzdhMjkzZTM0YTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hcmF3MTI3NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Mb2tvbm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTljZWQ1NjRkOThmNGViY2JjYWQxYzhjZmNmYTdmNTguc2V0Q29udGVudChodG1sX2I2NTc4NzE3ZjZmNDRkYTliOTZjNjc3YTI5M2UzNGE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I5ODljOTgxZTUzOTQ1OWJiNGY1MzllMWMwOTk3OTIzLmJpbmRQb3B1cChwb3B1cF81OWNlZDU2NGQ5OGY0ZWJjYmNhZDFjOGNmY2ZhN2Y1OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTgzMzQzN2VmY2ZlNGI4ZmEzNDFmM2ExNzkzNTU3ODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMC43NjA3NSwgLTcxLjAwMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YzlkOTg2ZDQyOTE0MjI5OGY2NDFhMjJhNjUzMjgxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NjZmOTM5ODQ5NTc0MDY2YjMyNDM4OTQzODkzYWFjNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzY2ZjkzOTg0OTU3NDA2NmIzMjQzODk0Mzg5M2FhYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95dWN1MTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZdWN1bmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM5ZDk4NmQ0MjkxNDIyOThmNjQxYTIyYTY1MzI4MTUuc2V0Q29udGVudChodG1sXzc2NmY5Mzk4NDk1NzQwNjZiMzI0Mzg5NDM4OTNhYWM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU4MzM0MzdlZmNmZTRiOGZhMzQxZjNhMTc5MzU1NzgwLmJpbmRQb3B1cChwb3B1cF85YzlkOTg2ZDQyOTE0MjI5OGY2NDFhMjJhNjUzMjgxNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGI1NmNlNzBhMGEyNDBlNGI3MGU3Yzk5NjY4ZmJkMzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuNTM2NCwgLTUzLjUyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NkOTIzZjhhN2ZkYzQ2MDlhMmMzZWRmM2QxOTNmMmMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAyMDI4Mzk4MzYwYTQ2ZTJiY2U0YjRkMmFjYTY4MTgzID0gJChgPGRpdiBpZD0iaHRtbF8wMjAyODM5ODM2MGE0NmUyYmNlNGI0ZDJhY2E2ODE4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21laGkxMjQwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1laGluw6FrdTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZDkyM2Y4YTdmZGM0NjA5YTJjM2VkZjNkMTkzZjJjMC5zZXRDb250ZW50KGh0bWxfMDIwMjgzOTgzNjBhNDZlMmJjZTRiNGQyYWNhNjgxODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGI1NmNlNzBhMGEyNDBlNGI3MGU3Yzk5NjY4ZmJkMzcuYmluZFBvcHVwKHBvcHVwX2NkOTIzZjhhN2ZkYzQ2MDlhMmMzZWRmM2QxOTNmMmMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjVlMjE1MWI2YTM0NmJlOWQ1YTI0ZDcwNGY0NDc3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQuMzg2NDksIC03Mi4yMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTI1Mzg3ZDk5YTI0NDUzYTgzMGRiYWIwYzczNGE2NzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTg3ZWYxZDIyZTJlNDc0NDk2NDA3MmJhZjA2NmNkY2MgPSAkKGA8ZGl2IGlkPSJodG1sXzE4N2VmMWQyMmUyZTQ3NDQ5NjQwNzJiYWYwNjZjZGNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWNoYTEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWNoYWd1YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjUzODdkOTlhMjQ0NTNhODMwZGJhYjBjNzM0YTY3Ni5zZXRDb250ZW50KGh0bWxfMTg3ZWYxZDIyZTJlNDc0NDk2NDA3MmJhZjA2NmNkY2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmI1ZTIxNTFiNmEzNDZiZTlkNWEyNGQ3MDRmNDQ3NzMuYmluZFBvcHVwKHBvcHVwXzEyNTM4N2Q5OWEyNDQ1M2E4MzBkYmFiMGM3MzRhNjc2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZWNjZjM5NTg3MjI0NDgyYWFiOTM0NWQxMWFiOGY3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi40MzAyLCAtNTguOTgwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0MzgwOTk0OGMzNDRhYzhhMTkwMmFkY2I2MmNmNjg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YyNmNkYjZiYzUyMjQ3ZmFhNmU3MGY0MDI0ZGU3OTM2ID0gJChgPGRpdiBpZD0iaHRtbF9mMjZjZGI2YmM1MjI0N2ZhYTZlNzBmNDAyNGRlNzkzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2VuYXcxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVuYXdlbsOpLU5hd8OpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0MzgwOTk0OGMzNDRhYzhhMTkwMmFkY2I2MmNmNjg2LnNldENvbnRlbnQoaHRtbF9mMjZjZGI2YmM1MjI0N2ZhYTZlNzBmNDAyNGRlNzkzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZWNjZjM5NTg3MjI0NDgyYWFiOTM0NWQxMWFiOGY3Yi5iaW5kUG9wdXAocG9wdXBfOTQzODA5OTQ4YzM0NGFjOGExOTAyYWRjYjYyY2Y2ODYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcyZWU4YTgyNGJiOTQ1Zjg4ZDI3OTg0YWRiYjRmZjkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuOTI4NiwgLTczLjQwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNTJjM2M5MzhjZDc0MjUzYTcwYmIyMDc3YjI2Y2U3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMDE2MzIxZWQ2YjE0Y2I2YmI5NjkyZGM1M2VlYWExYyA9ICQoYDxkaXYgaWQ9Imh0bWxfYjAxNjMyMWVkNmIxNGNiNmJiOTY5MmRjNTNlZWFhMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYWxhMTUyMiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYWxheW88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTUyYzNjOTM4Y2Q3NDI1M2E3MGJiMjA3N2IyNmNlN2Euc2V0Q29udGVudChodG1sX2IwMTYzMjFlZDZiMTRjYjZiYjk2OTJkYzUzZWVhYTFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcyZWU4YTgyNGJiOTQ1Zjg4ZDI3OTg0YWRiYjRmZjkwLmJpbmRQb3B1cChwb3B1cF9lNTJjM2M5MzhjZDc0MjUzYTcwYmIyMDc3YjI2Y2U3YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzRhYjM4ZmRlMzA1NGRhYjlmNWM2MWQ2MmExNGNhZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuMjk2LCAtNTMuNjk3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhZmUyNjQ4NzUwMjRjOWZiMmNjYjZkZDRlOTVjZjYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwZTMxODUxMjI2ZTQ2NGNiYWVmNmViYmQ0ZDY4M2FlID0gJChgPGRpdiBpZD0iaHRtbF80MGUzMTg1MTIyNmU0NjRjYmFlZjZlYmJkNGQ2ODNhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dhdXIxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldhdXLDoTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYWZlMjY0ODc1MDI0YzlmYjJjY2I2ZGQ0ZTk1Y2Y2Mi5zZXRDb250ZW50KGh0bWxfNDBlMzE4NTEyMjZlNDY0Y2JhZWY2ZWJiZDRkNjgzYWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzRhYjM4ZmRlMzA1NGRhYjlmNWM2MWQ2MmExNGNhZGEuYmluZFBvcHVwKHBvcHVwX2FhZmUyNjQ4NzUwMjRjOWZiMmNjYjZkZDRlOTVjZjYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NTUxMTI1MmY5YjQ0MDdlOGRlNzcxOWJjMGUyM2JjNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzkuMDY3LCAtODIuOTYzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3NDU4NzYyZDY1ZDRlMzg4M2FmNGZiZTJhODllMmNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmMDQ2NDg5MDM1ODQ5OTA4YmRmNDQyNmY0NGVkNDhhID0gJChgPGRpdiBpZD0iaHRtbF8wZjA0NjQ4OTAzNTg0OTkwOGJkZjQ0MjZmNDRlZDQ4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RlcmkxMjUwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRlcmliZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzQ1ODc2MmQ2NWQ0ZTM4ODNhZjRmYmUyYTg5ZTJjZC5zZXRDb250ZW50KGh0bWxfMGYwNDY0ODkwMzU4NDk5MDhiZGY0NDI2ZjQ0ZWQ0OGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDU1MTEyNTJmOWI0NDA3ZThkZTc3MTliYzBlMjNiYzUuYmluZFBvcHVwKHBvcHVwXzE3NDU4NzYyZDY1ZDRlMzg4M2FmNGZiZTJhODllMmNkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MzBhYTQ5MWQ1ZWM0NjE2YjU4MzJkZjJiM2I1MjQ5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4LjI4MzYsIC02Ni44MDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQyODUzYTQ1NjFiNDA3ZjgyMGNlYTE4Y2EyNTBlZjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDkwNThmMTExMDdkNDg4OTk3NjUzZjdjODEzZWQxOTcgPSAkKGA8ZGl2IGlkPSJodG1sXzQ5MDU4ZjExMTA3ZDQ4ODk5NzY1M2Y3YzgxM2VkMTk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGFpbjEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGFpbm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQyODUzYTQ1NjFiNDA3ZjgyMGNlYTE4Y2EyNTBlZjQuc2V0Q29udGVudChodG1sXzQ5MDU4ZjExMTA3ZDQ4ODk5NzY1M2Y3YzgxM2VkMTk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgzMGFhNDkxZDVlYzQ2MTZiNTgzMmRmMmIzYjUyNDkwLmJpbmRQb3B1cChwb3B1cF83NDI4NTNhNDU2MWI0MDdmODIwY2VhMThjYTI1MGVmNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjExMjdiOWE5ODE0NGQ5ZWE0MThiNDQ5YmEyZDI4MDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4zNTI5LCAtODYuOTA5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzg1YjRlOWZhNDMzOTRhYzlhYTJhNmYxMWQxNTBlMzY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkYWVmYWUwMGQ4ODRjNzBhNjVjNWU0MmI3M2JiNzU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiYmMwY2E1YjliOTQyNDBhZDljMmE4Y2EzZTQxODJmID0gJChgPGRpdiBpZD0iaHRtbF84YmJjMGNhNWI5Yjk0MjQwYWQ5YzJhOGNhM2U0MTgyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2dhcmkxMjU2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdhcmlmdW5hPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkYWVmYWUwMGQ4ODRjNzBhNjVjNWU0MmI3M2JiNzU5LnNldENvbnRlbnQoaHRtbF84YmJjMGNhNWI5Yjk0MjQwYWQ5YzJhOGNhM2U0MTgyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MTEyN2I5YTk4MTQ0ZDllYTQxOGI0NDliYTJkMjgwMC5iaW5kUG9wdXAocG9wdXBfNmRhZWZhZTAwZDg4NGM3MGE2NWM1ZTQyYjczYmI3NTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyNTY2NmNiOTY0ZTQzNzhiOWQ4NzZiZjM3MGI1MjZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjQ2NTMsIC02OS4zMDgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODViNGU5ZmE0MzM5NGFjOWFhMmE2ZjExZDE1MGUzNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzU4ZjA5MDNiOTI4NGRlZWIxYjMwZmI1OTQzMDZmZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzJhMGMwNmJjNWZiNDYwNmJjNmY5ZDcyYjU0YTA4OWIgPSAkKGA8ZGl2IGlkPSJodG1sXzMyYTBjMDZiYzVmYjQ2MDZiYzZmOWQ3MmI1NGEwODliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaW5hcDEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+ScOxYXBhcmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzU4ZjA5MDNiOTI4NGRlZWIxYjMwZmI1OTQzMDZmZjguc2V0Q29udGVudChodG1sXzMyYTBjMDZiYzVmYjQ2MDZiYzZmOWQ3MmI1NGEwODliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyNTY2NmNiOTY0ZTQzNzhiOWQ4NzZiZjM3MGI1MjZmLmJpbmRQb3B1cChwb3B1cF8zNThmMDkwM2I5Mjg0ZGVlYjFiMzBmYjU5NDMwNmZmOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWM0OTA1ZDc2NTRmNDNlYjgxYjMxMTE5MzRlNDg3MWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuNTkyOSwgLTU3LjQwNTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YWViNGY1YzQ0MTM0MTdiYmFhMDk4NjllOTRmZWNlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZGQxZGVhNGU2Mzc0MmIwOTFiYTIwZmY5OGZhNDllMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGRkMWRlYTRlNjM3NDJiMDkxYmEyMGZmOThmYTQ5ZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wYXJlMTI3MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5QYXJlY8OtczwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YWViNGY1YzQ0MTM0MTdiYmFhMDk4NjllOTRmZWNlYy5zZXRDb250ZW50KGh0bWxfNGRkMWRlYTRlNjM3NDJiMDkxYmEyMGZmOThmYTQ5ZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWM0OTA1ZDc2NTRmNDNlYjgxYjMxMTE5MzRlNDg3MWYuYmluZFBvcHVwKHBvcHVwXzZhZWI0ZjVjNDQxMzQxN2JiYWEwOTg2OWU5NGZlY2VjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOGYwZjEzMGRjZmE0MWQ3OWFkZWVhZWZkODdlYzkyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQuOCwgLTY3LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84NWI0ZTlmYTQzMzk0YWM5YWEyYTZmMTFkMTUwZTM2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YjI1Mjc2YmFmY2E0YmI5YWMxNjZmMWEyYTJmNTEyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YWFlNDIyZTQ5NWM0OTU5OWNhMWE5ODM5ZWI4ZDhmMyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWFhZTQyMmU0OTVjNDk1OTljYTFhOTgzOWViOGQ4ZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYWlwMTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYWlwdXJlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliMjUyNzZiYWZjYTRiYjlhYzE2NmYxYTJhMmY1MTJhLnNldENvbnRlbnQoaHRtbF85YWFlNDIyZTQ5NWM0OTU5OWNhMWE5ODM5ZWI4ZDhmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOGYwZjEzMGRjZmE0MWQ3OWFkZWVhZWZkODdlYzkyMy5iaW5kUG9wdXAocG9wdXBfOWIyNTI3NmJhZmNhNGJiOWFjMTY2ZjFhMmEyZjUxMmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7ff62612d128>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(df.language)\n",
    "m.add_features(df.ICU3_desc)\n",
    "m.legend_title = sails.feature_descriptions('ICU3').Description.at[0]\n",
    "m.start_location = (9, -79)\n",
    "m.start_zoom = 5\n",
    "m.legend_position = 'bottomleft'\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. Phoible <a name=\"phoible\"></a>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "from lingtypology.datasets import Phoible"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Unlike in other databases you do not pass features into Phoible. You should pass the subset.\n",
    "Take a look:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Moran, Steven & McCloy, Daniel (eds.) 2019.\n",
      "PHOIBLE 2.0.\n",
      "Jena: Max Planck Institute for the Science of Human History.\n",
      "(Available online at http://phoible.org, Accessed on 2019-06-13.)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>contribution_name</th>\n",
       "      <th>language</th>\n",
       "      <th>coordinates</th>\n",
       "      <th>glottocode</th>\n",
       "      <th>macroarea</th>\n",
       "      <th>phonemes</th>\n",
       "      <th>consonants</th>\n",
       "      <th>vowels</th>\n",
       "      <th>tones</th>\n",
       "      <th>source</th>\n",
       "      <th>inventory_page</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Korean (SPA 1)</td>\n",
       "      <td>Korean</td>\n",
       "      <td>(37.5, 128.0)</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>40</td>\n",
       "      <td>22</td>\n",
       "      <td>18</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kor_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kore1280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>KOREAN (UPSID 423)</td>\n",
       "      <td>Korean</td>\n",
       "      <td>(37.5, 128.0)</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>32</td>\n",
       "      <td>21</td>\n",
       "      <td>11</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>http://web.phonetik.uni-frankfurt.de/L/L2170.html</td>\n",
       "      <td>https://phoible.org/languages/kore1280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Ket (SPA 2)</td>\n",
       "      <td>Ket</td>\n",
       "      <td>(63.7551, 87.5466)</td>\n",
       "      <td>kett1243</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>32</td>\n",
       "      <td>18</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/ket_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kett1243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>KET (UPSID 399)</td>\n",
       "      <td>Ket</td>\n",
       "      <td>(63.7551, 87.5466)</td>\n",
       "      <td>kett1243</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>25</td>\n",
       "      <td>18</td>\n",
       "      <td>7</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>http://web.phonetik.uni-frankfurt.de/L/L2706.html</td>\n",
       "      <td>https://phoible.org/languages/kett1243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Lak (SPA 3)</td>\n",
       "      <td>Lak</td>\n",
       "      <td>(42.1328, 47.0809)</td>\n",
       "      <td>lakk1252</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>69</td>\n",
       "      <td>60</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/lbe_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/lakk1252</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    contribution_name language         coordinates glottocode macroarea  \\\n",
       "0      Korean (SPA 1)   Korean       (37.5, 128.0)   kore1280   Eurasia   \n",
       "1  KOREAN (UPSID 423)   Korean       (37.5, 128.0)   kore1280   Eurasia   \n",
       "2         Ket (SPA 2)      Ket  (63.7551, 87.5466)   kett1243   Eurasia   \n",
       "3     KET (UPSID 399)      Ket  (63.7551, 87.5466)   kett1243   Eurasia   \n",
       "4         Lak (SPA 3)      Lak  (42.1328, 47.0809)   lakk1252   Eurasia   \n",
       "\n",
       "   phonemes  consonants  vowels  tones  \\\n",
       "0        40          22      18      0   \n",
       "1        32          21      11  ~N/A~   \n",
       "2        32          18      14      0   \n",
       "3        25          18       7  ~N/A~   \n",
       "4        69          60       9      0   \n",
       "\n",
       "                                              source  \\\n",
       "0       https://archive.org/details/kor_SPA1979_phon   \n",
       "1  http://web.phonetik.uni-frankfurt.de/L/L2170.html   \n",
       "2       https://archive.org/details/ket_SPA1979_phon   \n",
       "3  http://web.phonetik.uni-frankfurt.de/L/L2706.html   \n",
       "4       https://archive.org/details/lbe_SPA1979_phon   \n",
       "\n",
       "                           inventory_page  \n",
       "0  https://phoible.org/languages/kore1280  \n",
       "1  https://phoible.org/languages/kore1280  \n",
       "2  https://phoible.org/languages/kett1243  \n",
       "3  https://phoible.org/languages/kett1243  \n",
       "4  https://phoible.org/languages/lakk1252  "
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p = Phoible()\n",
    "p.get_df().head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are several entries for different languages: it happens because Phoible data consists of several different subsets. You can get the list of available subsets:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['all', 'UPSID', 'SPA', 'AA', 'PH', 'GM', 'RA', 'SAPHON']"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p.subsets_list"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "... and pass them into the class:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Moran, Steven & McCloy, Daniel (eds.) 2019.\n",
      "PHOIBLE 2.0.\n",
      "Jena: Max Planck Institute for the Science of Human History.\n",
      "(Available online at http://phoible.org, Accessed on 2019-06-13.)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>contribution_name</th>\n",
       "      <th>language</th>\n",
       "      <th>coordinates</th>\n",
       "      <th>glottocode</th>\n",
       "      <th>macroarea</th>\n",
       "      <th>phonemes</th>\n",
       "      <th>consonants</th>\n",
       "      <th>vowels</th>\n",
       "      <th>tones</th>\n",
       "      <th>source</th>\n",
       "      <th>inventory_page</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Korean (SPA 1)</td>\n",
       "      <td>Korean</td>\n",
       "      <td>(37.5, 128.0)</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>40</td>\n",
       "      <td>22</td>\n",
       "      <td>18</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kor_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kore1280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Ket (SPA 2)</td>\n",
       "      <td>Ket</td>\n",
       "      <td>(63.7551, 87.5466)</td>\n",
       "      <td>kett1243</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>32</td>\n",
       "      <td>18</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/ket_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kett1243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Lak (SPA 3)</td>\n",
       "      <td>Lak</td>\n",
       "      <td>(42.1328, 47.0809)</td>\n",
       "      <td>lakk1252</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>69</td>\n",
       "      <td>60</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/lbe_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/lakk1252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Kabardian (SPA 4)</td>\n",
       "      <td>Kabardian</td>\n",
       "      <td>(43.5082, 43.3918)</td>\n",
       "      <td>kaba1278</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>56</td>\n",
       "      <td>49</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kbd_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/kaba1278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Georgian (SPA 5)</td>\n",
       "      <td>Georgian</td>\n",
       "      <td>(41.850396999999994, 43.78613)</td>\n",
       "      <td>nucl1302</td>\n",
       "      <td>Eurasia</td>\n",
       "      <td>35</td>\n",
       "      <td>29</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>https://archive.org/details/kat_SPA1979_phon</td>\n",
       "      <td>https://phoible.org/languages/nucl1302</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   contribution_name   language                     coordinates glottocode  \\\n",
       "0     Korean (SPA 1)     Korean                   (37.5, 128.0)   kore1280   \n",
       "1        Ket (SPA 2)        Ket              (63.7551, 87.5466)   kett1243   \n",
       "2        Lak (SPA 3)        Lak              (42.1328, 47.0809)   lakk1252   \n",
       "3  Kabardian (SPA 4)  Kabardian              (43.5082, 43.3918)   kaba1278   \n",
       "4   Georgian (SPA 5)   Georgian  (41.850396999999994, 43.78613)   nucl1302   \n",
       "\n",
       "  macroarea  phonemes  consonants  vowels tones  \\\n",
       "0   Eurasia        40          22      18     0   \n",
       "1   Eurasia        32          18      14     0   \n",
       "2   Eurasia        69          60       9     0   \n",
       "3   Eurasia        56          49       7     0   \n",
       "4   Eurasia        35          29       6     0   \n",
       "\n",
       "                                         source  \\\n",
       "0  https://archive.org/details/kor_SPA1979_phon   \n",
       "1  https://archive.org/details/ket_SPA1979_phon   \n",
       "2  https://archive.org/details/lbe_SPA1979_phon   \n",
       "3  https://archive.org/details/kbd_SPA1979_phon   \n",
       "4  https://archive.org/details/kat_SPA1979_phon   \n",
       "\n",
       "                           inventory_page  \n",
       "0  https://phoible.org/languages/kore1280  \n",
       "1  https://phoible.org/languages/kett1243  \n",
       "2  https://phoible.org/languages/lakk1252  \n",
       "3  https://phoible.org/languages/kaba1278  \n",
       "4  https://phoible.org/languages/nucl1302  "
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p = Phoible(subset='SPA')\n",
    "df = p.get_df(strip_na=['tones'])\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also get non-aggregated data by setting `aggregated` to `False` while initializing the class."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Moran, Steven & McCloy, Daniel (eds.) 2019.\n",
      "PHOIBLE 2.0.\n",
      "Jena: Max Planck Institute for the Science of Human History.\n",
      "(Available online at http://phoible.org, Accessed on 2019-06-13.)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>InventoryID</th>\n",
       "      <th>Glottocode</th>\n",
       "      <th>ISO6393</th>\n",
       "      <th>LanguageName</th>\n",
       "      <th>SpecificDialect</th>\n",
       "      <th>GlyphID</th>\n",
       "      <th>Phoneme</th>\n",
       "      <th>Allophones</th>\n",
       "      <th>Marginal</th>\n",
       "      <th>SegmentClass</th>\n",
       "      <th>...</th>\n",
       "      <th>retractedTongueRoot</th>\n",
       "      <th>advancedTongueRoot</th>\n",
       "      <th>periodicGlottalSource</th>\n",
       "      <th>epilaryngealSource</th>\n",
       "      <th>spreadGlottis</th>\n",
       "      <th>constrictedGlottis</th>\n",
       "      <th>fortis</th>\n",
       "      <th>raisedLarynxEjective</th>\n",
       "      <th>loweredLarynxImplosive</th>\n",
       "      <th>click</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>kor</td>\n",
       "      <td>Korean</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>0061</td>\n",
       "      <td>a</td>\n",
       "      <td>a</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>vowel</td>\n",
       "      <td>...</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>kor</td>\n",
       "      <td>Korean</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>0061+02D0</td>\n",
       "      <td>aː</td>\n",
       "      <td>aː</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>vowel</td>\n",
       "      <td>...</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>kor</td>\n",
       "      <td>Korean</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>00E6</td>\n",
       "      <td>æ</td>\n",
       "      <td>ɛ æ</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>vowel</td>\n",
       "      <td>...</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>kor</td>\n",
       "      <td>Korean</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>00E6+02D0</td>\n",
       "      <td>æː</td>\n",
       "      <td>æː</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>vowel</td>\n",
       "      <td>...</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>kore1280</td>\n",
       "      <td>kor</td>\n",
       "      <td>Korean</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>0065</td>\n",
       "      <td>e</td>\n",
       "      <td>e</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>vowel</td>\n",
       "      <td>...</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 48 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   InventoryID Glottocode ISO6393 LanguageName SpecificDialect    GlyphID  \\\n",
       "0            1   kore1280     kor       Korean           ~N/A~       0061   \n",
       "1            1   kore1280     kor       Korean           ~N/A~  0061+02D0   \n",
       "2            1   kore1280     kor       Korean           ~N/A~       00E6   \n",
       "3            1   kore1280     kor       Korean           ~N/A~  00E6+02D0   \n",
       "4            1   kore1280     kor       Korean           ~N/A~       0065   \n",
       "\n",
       "  Phoneme Allophones Marginal SegmentClass  ... retractedTongueRoot  \\\n",
       "0       a          a    ~N/A~        vowel  ...                   -   \n",
       "1      aː         aː    ~N/A~        vowel  ...                   -   \n",
       "2       æ        ɛ æ    ~N/A~        vowel  ...                   -   \n",
       "3      æː         æː    ~N/A~        vowel  ...                   -   \n",
       "4       e          e    ~N/A~        vowel  ...                   -   \n",
       "\n",
       "  advancedTongueRoot periodicGlottalSource epilaryngealSource spreadGlottis  \\\n",
       "0                  -                     +                  -             -   \n",
       "1                  -                     +                  -             -   \n",
       "2                  -                     +                  -             -   \n",
       "3                  -                     +                  -             -   \n",
       "4                  -                     +                  -             -   \n",
       "\n",
       "  constrictedGlottis fortis raisedLarynxEjective loweredLarynxImplosive click  \n",
       "0                  -      0                    -                      -     0  \n",
       "1                  -      0                    -                      -     0  \n",
       "2                  -      0                    -                      -     0  \n",
       "3                  -      0                    -                      -     0  \n",
       "4                  -      0                    -                      -     0  \n",
       "\n",
       "[5 rows x 48 columns]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Phoible(aggregated=False).get_df().head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Map example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2QyMDE3NzAyNzIwNTQzNmE5Mzk0OGY2MDZjNWE0ZjU3IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9kMjAxNzcwMjcyMDU0MzZhOTM5NDhmNjA2YzVhNGY1NyIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IGxlZnQ6IDIwcHg7IGJvdHRvbTogNDBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+VG9uZXM8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8c3ZnIGhlaWdodD0iMTY5IiB3aWR0aD0iMjAiPjxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjIwIiB5Mj0iMCJzdHlsZT0ic3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMiIgeDI9IjIwIiB5Mj0iMiJzdHlsZT0ic3Ryb2tlOiNmZmZlZmU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMyIgeDI9IjIwIiB5Mj0iMyJzdHlsZT0ic3Ryb2tlOiNmZmZkZmQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNCIgeDI9IjIwIiB5Mj0iNCJzdHlsZT0ic3Ryb2tlOiNmZmZiZmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNSIgeDI9IjIwIiB5Mj0iNSJzdHlsZT0ic3Ryb2tlOiNmZmZhZmE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNiIgeDI9IjIwIiB5Mj0iNiJzdHlsZT0ic3Ryb2tlOiNmZmY4Zjg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNyIgeDI9IjIwIiB5Mj0iNyJzdHlsZT0ic3Ryb2tlOiNmZmY3Zjc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOCIgeDI9IjIwIiB5Mj0iOCJzdHlsZT0ic3Ryb2tlOiNmZmY2ZjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOSIgeDI9IjIwIiB5Mj0iOSJzdHlsZT0ic3Ryb2tlOiNmZmY0ZjQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAiIHgyPSIyMCIgeTI9IjEwInN0eWxlPSJzdHJva2U6I2ZmZjNmMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMSIgeDI9IjIwIiB5Mj0iMTEic3R5bGU9InN0cm9rZTojZmZmMWYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyIiB4Mj0iMjAiIHkyPSIxMiJzdHlsZT0ic3Ryb2tlOiNmZmYwZjA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMiIHgyPSIyMCIgeTI9IjEzInN0eWxlPSJzdHJva2U6I2ZmZWVlZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNCIgeDI9IjIwIiB5Mj0iMTQic3R5bGU9InN0cm9rZTojZmZlZGVkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1IiB4Mj0iMjAiIHkyPSIxNSJzdHlsZT0ic3Ryb2tlOiNmZmVjZWM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYiIHgyPSIyMCIgeTI9IjE2InN0eWxlPSJzdHJva2U6I2ZmZWFlYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNyIgeDI9IjIwIiB5Mj0iMTcic3R5bGU9InN0cm9rZTojZmZlOWU5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE4IiB4Mj0iMjAiIHkyPSIxOCJzdHlsZT0ic3Ryb2tlOiNmZmU3ZTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTgiIHgyPSIyMCIgeTI9IjE4InN0eWxlPSJzdHJva2U6I2ZmZTNlMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMCIgeDI9IjIwIiB5Mj0iMjAic3R5bGU9InN0cm9rZTojZmZlMmUyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIxIiB4Mj0iMjAiIHkyPSIyMSJzdHlsZT0ic3Ryb2tlOiNmZmUwZTA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjIiIHgyPSIyMCIgeTI9IjIyInN0eWxlPSJzdHJva2U6I2ZmZGZkZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMyIgeDI9IjIwIiB5Mj0iMjMic3R5bGU9InN0cm9rZTojZmZkZGRkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI0IiB4Mj0iMjAiIHkyPSIyNCJzdHlsZT0ic3Ryb2tlOiNmZmRjZGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjUiIHgyPSIyMCIgeTI9IjI1InN0eWxlPSJzdHJva2U6I2ZmZGJkYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNiIgeDI9IjIwIiB5Mj0iMjYic3R5bGU9InN0cm9rZTojZmZkOWQ5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI3IiB4Mj0iMjAiIHkyPSIyNyJzdHlsZT0ic3Ryb2tlOiNmZmQ4ZDg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjgiIHgyPSIyMCIgeTI9IjI4InN0eWxlPSJzdHJva2U6I2ZmZDZkNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyOSIgeDI9IjIwIiB5Mj0iMjkic3R5bGU9InN0cm9rZTojZmZkNWQ1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMwIiB4Mj0iMjAiIHkyPSIzMCJzdHlsZT0ic3Ryb2tlOiNmZmQzZDM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzEiIHgyPSIyMCIgeTI9IjMxInN0eWxlPSJzdHJva2U6I2ZmZDJkMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMiIgeDI9IjIwIiB5Mj0iMzIic3R5bGU9InN0cm9rZTojZmZkMWQxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMzIiB4Mj0iMjAiIHkyPSIzMyJzdHlsZT0ic3Ryb2tlOiNmZmNmY2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzQiIHgyPSIyMCIgeTI9IjM0InN0eWxlPSJzdHJva2U6I2ZmY2VjZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNSIgeDI9IjIwIiB5Mj0iMzUic3R5bGU9InN0cm9rZTojZmZjY2NjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM2IiB4Mj0iMjAiIHkyPSIzNiJzdHlsZT0ic3Ryb2tlOiNmZmNiY2I7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzYiIHgyPSIyMCIgeTI9IjM2InN0eWxlPSJzdHJva2U6I2ZmYzdjNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzOCIgeDI9IjIwIiB5Mj0iMzgic3R5bGU9InN0cm9rZTojZmZjNWM1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM5IiB4Mj0iMjAiIHkyPSIzOSJzdHlsZT0ic3Ryb2tlOiNmZmM0YzQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDAiIHgyPSIyMCIgeTI9IjQwInN0eWxlPSJzdHJva2U6I2ZmYzJjMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MSIgeDI9IjIwIiB5Mj0iNDEic3R5bGU9InN0cm9rZTojZmZjMWMxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQyIiB4Mj0iMjAiIHkyPSI0MiJzdHlsZT0ic3Ryb2tlOiNmZmJmYmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDMiIHgyPSIyMCIgeTI9IjQzInN0eWxlPSJzdHJva2U6I2ZmYmViZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NCIgeDI9IjIwIiB5Mj0iNDQic3R5bGU9InN0cm9rZTojZmZiZGJkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ1IiB4Mj0iMjAiIHkyPSI0NSJzdHlsZT0ic3Ryb2tlOiNmZmJiYmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDYiIHgyPSIyMCIgeTI9IjQ2InN0eWxlPSJzdHJva2U6I2ZmYmFiYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NyIgeDI9IjIwIiB5Mj0iNDcic3R5bGU9InN0cm9rZTojZmZiOGI4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ4IiB4Mj0iMjAiIHkyPSI0OCJzdHlsZT0ic3Ryb2tlOiNmZmI3Yjc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDkiIHgyPSIyMCIgeTI9IjQ5InN0eWxlPSJzdHJva2U6I2ZmYjZiNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MCIgeDI9IjIwIiB5Mj0iNTAic3R5bGU9InN0cm9rZTojZmZiNGI0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUxIiB4Mj0iMjAiIHkyPSI1MSJzdHlsZT0ic3Ryb2tlOiNmZmIzYjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTIiIHgyPSIyMCIgeTI9IjUyInN0eWxlPSJzdHJva2U6I2ZmYjFiMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MyIgeDI9IjIwIiB5Mj0iNTMic3R5bGU9InN0cm9rZTojZmZiMGIwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU0IiB4Mj0iMjAiIHkyPSI1NCJzdHlsZT0ic3Ryb2tlOiNmZmFlYWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTUiIHgyPSIyMCIgeTI9IjU1InN0eWxlPSJzdHJva2U6I2ZmYWRhZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NSIgeDI9IjIwIiB5Mj0iNTUic3R5bGU9InN0cm9rZTojZmZhYWFhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU3IiB4Mj0iMjAiIHkyPSI1NyJzdHlsZT0ic3Ryb2tlOiNmZmE5YTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTgiIHgyPSIyMCIgeTI9IjU4InN0eWxlPSJzdHJva2U6I2ZmYTdhNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1OSIgeDI9IjIwIiB5Mj0iNTkic3R5bGU9InN0cm9rZTojZmZhNmE2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYwIiB4Mj0iMjAiIHkyPSI2MCJzdHlsZT0ic3Ryb2tlOiNmZmE0YTQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjEiIHgyPSIyMCIgeTI9IjYxInN0eWxlPSJzdHJva2U6I2ZmYTNhMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MiIgeDI9IjIwIiB5Mj0iNjIic3R5bGU9InN0cm9rZTojZmZhMmEyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYzIiB4Mj0iMjAiIHkyPSI2MyJzdHlsZT0ic3Ryb2tlOiNmZmEwYTA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjQiIHgyPSIyMCIgeTI9IjY0InN0eWxlPSJzdHJva2U6I2ZmOWY5ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NSIgeDI9IjIwIiB5Mj0iNjUic3R5bGU9InN0cm9rZTojZmY5ZDlkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY2IiB4Mj0iMjAiIHkyPSI2NiJzdHlsZT0ic3Ryb2tlOiNmZjljOWM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjciIHgyPSIyMCIgeTI9IjY3InN0eWxlPSJzdHJva2U6I2ZmOWI5YjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2OCIgeDI9IjIwIiB5Mj0iNjgic3R5bGU9InN0cm9rZTojZmY5OTk5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY5IiB4Mj0iMjAiIHkyPSI2OSJzdHlsZT0ic3Ryb2tlOiNmZjk4OTg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzAiIHgyPSIyMCIgeTI9IjcwInN0eWxlPSJzdHJva2U6I2ZmOTY5NjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MSIgeDI9IjIwIiB5Mj0iNzEic3R5bGU9InN0cm9rZTojZmY5NTk1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcyIiB4Mj0iMjAiIHkyPSI3MiJzdHlsZT0ic3Ryb2tlOiNmZjkzOTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzMiIHgyPSIyMCIgeTI9IjczInN0eWxlPSJzdHJva2U6I2ZmOTI5MjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NCIgeDI9IjIwIiB5Mj0iNzQic3R5bGU9InN0cm9rZTojZmY5MTkxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc0IiB4Mj0iMjAiIHkyPSI3NCJzdHlsZT0ic3Ryb2tlOiNmZjhlOGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzYiIHgyPSIyMCIgeTI9Ijc2InN0eWxlPSJzdHJva2U6I2ZmOGM4YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NyIgeDI9IjIwIiB5Mj0iNzcic3R5bGU9InN0cm9rZTojZmY4YjhiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc4IiB4Mj0iMjAiIHkyPSI3OCJzdHlsZT0ic3Ryb2tlOiNmZjg5ODk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzkiIHgyPSIyMCIgeTI9Ijc5InN0eWxlPSJzdHJva2U6I2ZmODg4ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MCIgeDI9IjIwIiB5Mj0iODAic3R5bGU9InN0cm9rZTojZmY4Nzg3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgxIiB4Mj0iMjAiIHkyPSI4MSJzdHlsZT0ic3Ryb2tlOiNmZjg1ODU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODIiIHgyPSIyMCIgeTI9IjgyInN0eWxlPSJzdHJva2U6I2ZmODQ4NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MyIgeDI9IjIwIiB5Mj0iODMic3R5bGU9InN0cm9rZTojZmY4MjgyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg0IiB4Mj0iMjAiIHkyPSI4NCJzdHlsZT0ic3Ryb2tlOiNmZjgxODE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODUiIHgyPSIyMCIgeTI9Ijg1InN0eWxlPSJzdHJva2U6I2ZmN2Y3ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NiIgeDI9IjIwIiB5Mj0iODYic3R5bGU9InN0cm9rZTojZmY3ZTdlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg3IiB4Mj0iMjAiIHkyPSI4NyJzdHlsZT0ic3Ryb2tlOiNmZjdkN2Q7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODgiIHgyPSIyMCIgeTI9Ijg4InN0eWxlPSJzdHJva2U6I2ZmN2I3YjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4OSIgeDI9IjIwIiB5Mj0iODkic3R5bGU9InN0cm9rZTojZmY3YTdhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkwIiB4Mj0iMjAiIHkyPSI5MCJzdHlsZT0ic3Ryb2tlOiNmZjc4Nzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTEiIHgyPSIyMCIgeTI9IjkxInN0eWxlPSJzdHJva2U6I2ZmNzc3NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MiIgeDI9IjIwIiB5Mj0iOTIic3R5bGU9InN0cm9rZTojZmY3Njc2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkzIiB4Mj0iMjAiIHkyPSI5MyJzdHlsZT0ic3Ryb2tlOiNmZjc0NzQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTMiIHgyPSIyMCIgeTI9IjkzInN0eWxlPSJzdHJva2U6I2ZmNzE3MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NSIgeDI9IjIwIiB5Mj0iOTUic3R5bGU9InN0cm9rZTojZmY3MDcwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk2IiB4Mj0iMjAiIHkyPSI5NiJzdHlsZT0ic3Ryb2tlOiNmZjZlNmU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTciIHgyPSIyMCIgeTI9Ijk3InN0eWxlPSJzdHJva2U6I2ZmNmQ2ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5OCIgeDI9IjIwIiB5Mj0iOTgic3R5bGU9InN0cm9rZTojZmY2YzZjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk5IiB4Mj0iMjAiIHkyPSI5OSJzdHlsZT0ic3Ryb2tlOiNmZjZhNmE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAwIiB4Mj0iMjAiIHkyPSIxMDAic3R5bGU9InN0cm9rZTojZmY2OTY5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMSIgeDI9IjIwIiB5Mj0iMTAxInN0eWxlPSJzdHJva2U6I2ZmNjc2NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDIiIHgyPSIyMCIgeTI9IjEwMiJzdHlsZT0ic3Ryb2tlOiNmZjY2NjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAzIiB4Mj0iMjAiIHkyPSIxMDMic3R5bGU9InN0cm9rZTojZmY2NDY0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNCIgeDI9IjIwIiB5Mj0iMTA0InN0eWxlPSJzdHJva2U6I2ZmNjM2MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDUiIHgyPSIyMCIgeTI9IjEwNSJzdHlsZT0ic3Ryb2tlOiNmZjYyNjI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA2IiB4Mj0iMjAiIHkyPSIxMDYic3R5bGU9InN0cm9rZTojZmY2MDYwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNyIgeDI9IjIwIiB5Mj0iMTA3InN0eWxlPSJzdHJva2U6I2ZmNWY1ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDgiIHgyPSIyMCIgeTI9IjEwOCJzdHlsZT0ic3Ryb2tlOiNmZjVkNWQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA5IiB4Mj0iMjAiIHkyPSIxMDkic3R5bGU9InN0cm9rZTojZmY1YzVjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMCIgeDI9IjIwIiB5Mj0iMTEwInN0eWxlPSJzdHJva2U6I2ZmNWI1YjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTEiIHgyPSIyMCIgeTI9IjExMSJzdHlsZT0ic3Ryb2tlOiNmZjU5NTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEyIiB4Mj0iMjAiIHkyPSIxMTIic3R5bGU9InN0cm9rZTojZmY1ODU4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMiIgeDI9IjIwIiB5Mj0iMTEyInN0eWxlPSJzdHJva2U6I2ZmNTU1NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTQiIHgyPSIyMCIgeTI9IjExNCJzdHlsZT0ic3Ryb2tlOiNmZjUzNTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE1IiB4Mj0iMjAiIHkyPSIxMTUic3R5bGU9InN0cm9rZTojZmY1MjUyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNiIgeDI9IjIwIiB5Mj0iMTE2InN0eWxlPSJzdHJva2U6I2ZmNTE1MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTciIHgyPSIyMCIgeTI9IjExNyJzdHlsZT0ic3Ryb2tlOiNmZjRmNGY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE4IiB4Mj0iMjAiIHkyPSIxMTgic3R5bGU9InN0cm9rZTojZmY0ZTRlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExOSIgeDI9IjIwIiB5Mj0iMTE5InN0eWxlPSJzdHJva2U6I2ZmNGM0YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjAiIHgyPSIyMCIgeTI9IjEyMCJzdHlsZT0ic3Ryb2tlOiNmZjRiNGI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIxIiB4Mj0iMjAiIHkyPSIxMjEic3R5bGU9InN0cm9rZTojZmY0OTQ5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMiIgeDI9IjIwIiB5Mj0iMTIyInN0eWxlPSJzdHJva2U6I2ZmNDg0ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjMiIHgyPSIyMCIgeTI9IjEyMyJzdHlsZT0ic3Ryb2tlOiNmZjQ3NDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI0IiB4Mj0iMjAiIHkyPSIxMjQic3R5bGU9InN0cm9rZTojZmY0NTQ1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNSIgeDI9IjIwIiB5Mj0iMTI1InN0eWxlPSJzdHJva2U6I2ZmNDQ0NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjYiIHgyPSIyMCIgeTI9IjEyNiJzdHlsZT0ic3Ryb2tlOiNmZjQyNDI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI3IiB4Mj0iMjAiIHkyPSIxMjcic3R5bGU9InN0cm9rZTojZmY0MTQxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyOCIgeDI9IjIwIiB5Mj0iMTI4InN0eWxlPSJzdHJva2U6I2ZmM2YzZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjkiIHgyPSIyMCIgeTI9IjEyOSJzdHlsZT0ic3Ryb2tlOiNmZjNlM2U7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMwIiB4Mj0iMjAiIHkyPSIxMzAic3R5bGU9InN0cm9rZTojZmYzZDNkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMSIgeDI9IjIwIiB5Mj0iMTMxInN0eWxlPSJzdHJva2U6I2ZmM2IzYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzEiIHgyPSIyMCIgeTI9IjEzMSJzdHlsZT0ic3Ryb2tlOiNmZjM4Mzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMzIiB4Mj0iMjAiIHkyPSIxMzMic3R5bGU9InN0cm9rZTojZmYzNzM3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNCIgeDI9IjIwIiB5Mj0iMTM0InN0eWxlPSJzdHJva2U6I2ZmMzYzNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzUiIHgyPSIyMCIgeTI9IjEzNSJzdHlsZT0ic3Ryb2tlOiNmZjM0MzQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM2IiB4Mj0iMjAiIHkyPSIxMzYic3R5bGU9InN0cm9rZTojZmYzMzMzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNyIgeDI9IjIwIiB5Mj0iMTM3InN0eWxlPSJzdHJva2U6I2ZmMzEzMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzgiIHgyPSIyMCIgeTI9IjEzOCJzdHlsZT0ic3Ryb2tlOiNmZjMwMzA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM5IiB4Mj0iMjAiIHkyPSIxMzkic3R5bGU9InN0cm9rZTojZmYyZTJlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MCIgeDI9IjIwIiB5Mj0iMTQwInN0eWxlPSJzdHJva2U6I2ZmMmQyZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDEiIHgyPSIyMCIgeTI9IjE0MSJzdHlsZT0ic3Ryb2tlOiNmZjJjMmM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQyIiB4Mj0iMjAiIHkyPSIxNDIic3R5bGU9InN0cm9rZTojZmYyYTJhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MyIgeDI9IjIwIiB5Mj0iMTQzInN0eWxlPSJzdHJva2U6I2ZmMjkyOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDQiIHgyPSIyMCIgeTI9IjE0NCJzdHlsZT0ic3Ryb2tlOiNmZjI3Mjc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ1IiB4Mj0iMjAiIHkyPSIxNDUic3R5bGU9InN0cm9rZTojZmYyNjI2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NiIgeDI9IjIwIiB5Mj0iMTQ2InN0eWxlPSJzdHJva2U6I2ZmMjQyNDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDciIHgyPSIyMCIgeTI9IjE0NyJzdHlsZT0ic3Ryb2tlOiNmZjIzMjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ4IiB4Mj0iMjAiIHkyPSIxNDgic3R5bGU9InN0cm9rZTojZmYyMjIyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0OSIgeDI9IjIwIiB5Mj0iMTQ5InN0eWxlPSJzdHJva2U6I2ZmMjAyMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTAiIHgyPSIyMCIgeTI9IjE1MCJzdHlsZT0ic3Ryb2tlOiNmZjFmMWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUwIiB4Mj0iMjAiIHkyPSIxNTAic3R5bGU9InN0cm9rZTojZmYxYzFjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MiIgeDI9IjIwIiB5Mj0iMTUyInN0eWxlPSJzdHJva2U6I2ZmMWIxYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTMiIHgyPSIyMCIgeTI9IjE1MyJzdHlsZT0ic3Ryb2tlOiNmZjE5MTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU0IiB4Mj0iMjAiIHkyPSIxNTQic3R5bGU9InN0cm9rZTojZmYxODE4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NSIgeDI9IjIwIiB5Mj0iMTU1InN0eWxlPSJzdHJva2U6I2ZmMTYxNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTYiIHgyPSIyMCIgeTI9IjE1NiJzdHlsZT0ic3Ryb2tlOiNmZjE1MTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU3IiB4Mj0iMjAiIHkyPSIxNTcic3R5bGU9InN0cm9rZTojZmYxMzEzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1OCIgeDI9IjIwIiB5Mj0iMTU4InN0eWxlPSJzdHJva2U6I2ZmMTIxMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTkiIHgyPSIyMCIgeTI9IjE1OSJzdHlsZT0ic3Ryb2tlOiNmZjExMTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYwIiB4Mj0iMjAiIHkyPSIxNjAic3R5bGU9InN0cm9rZTojZmYwZjBmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MSIgeDI9IjIwIiB5Mj0iMTYxInN0eWxlPSJzdHJva2U6I2ZmMGUwZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjIiIHgyPSIyMCIgeTI9IjE2MiJzdHlsZT0ic3Ryb2tlOiNmZjBjMGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYzIiB4Mj0iMjAiIHkyPSIxNjMic3R5bGU9InN0cm9rZTojZmYwYjBiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2NCIgeDI9IjIwIiB5Mj0iMTY0InN0eWxlPSJzdHJva2U6I2ZmMDkwOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjUiIHgyPSIyMCIgeTI9IjE2NSJzdHlsZT0ic3Ryb2tlOiNmZjA4MDg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTY2IiB4Mj0iMjAiIHkyPSIxNjYic3R5bGU9InN0cm9rZTojZmYwNzA3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2NyIgeDI9IjIwIiB5Mj0iMTY3InN0eWxlPSJzdHJva2U6I2ZmMDUwNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjgiIHgyPSIyMCIgeTI9IjE2OCJzdHlsZT0ic3Ryb2tlOiNmZjA0MDQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTY4IiB4Mj0iMjAiIHkyPSIxNjgic3R5bGU9InN0cm9rZTojZmYwMDAwO3N0cm9rZS13aWR0aDozOyIgLz48L3N2Zz48c3ZnIGhlaWdodD0iMTY5IiB3aWR0aD0iNTAiPjx0ZXh0IHg9IjUiIHk9IjE5IiBkeD0iMCIgZHk9IjBleCI+LSAxPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjM3IiBkeD0iMCIgZHk9IjBleCI+LSAyPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjU2IiBkeD0iMCIgZHk9IjBleCI+LSAzPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9Ijc1IiBkeD0iMCIgZHk9IjBleCI+LSA0PC90ZXh0Pjx0ZXh0IHg9IjUiIHk9Ijk0IiBkeD0iMCIgZHk9IjBleCI+LSA1PC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjExMyIgZHg9IjAiIGR5PSIwZXgiPi0gNjwvdGV4dD48dGV4dCB4PSI1IiB5PSIxMzIiIGR4PSIwIiBkeT0iMGV4Ij4tIDc8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTUxIiBkeD0iMCIgZHk9IjBleCI+LSA4PC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjE2OSIgZHg9IjAiIGR5PSIwZXgiPi0gOTwvdGV4dD48L3N2Zz4KCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfZDIwMTc3MDI3MjA1NDM2YTkzOTQ4ZjYwNmM1YTRmNTcgPSBMLm1hcCgKICAgICAgICAnbWFwX2QyMDE3NzAyNzIwNTQzNmE5Mzk0OGY2MDZjNWE0ZjU3JywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfZDIwMTc3MDI3MjA1NDM2YTkzOTQ4ZjYwNmM1YTRmNTcpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfOGQ4MDE0YmEzODk5NDI4ZGJiMzM4ZGIyODgzMDE0OGQgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwX2QyMDE3NzAyNzIwNTQzNmE5Mzk0OGY2MDZjNWE0ZjU3KTsKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZDIwMTc3MDI3MjA1NDM2YTkzOTQ4ZjYwNmM1YTRmNTcpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxYjQ5ZDRjMDIxMjQ1ZDk5OWI3NzFjN2I2MDUxN2E1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzYjA3NGM5NTZhOTQ0OWViMmY2OTcyMDU3MjNiODBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjMuNzU1MSwgODcuNTQ2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzA5YzlhNWI1OTY2NGFhNTg1Y2M1MmI3NjYzYTMzYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4xMzI4LCA0Ny4wODA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YzMxM2JiYzNjZTY0YzQ5ODI5ZThjMzJmOGZlMmNiNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzYjJkODMyZTU2NTRkYzlhNmNjZGRiMjk5NzFkZWNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjk4ZWNkNTNmYjRkNGUyNGE5YTE0NmY5ZDYwZmI2M2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC40NjQ0LCA4Ni40NjU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MjZjNjU0YmU5ZWI0MGFmOWY0M2IyYjg4Y2M4ZWE2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjQ1MjksIDc4LjcwMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5Y2NlZWQ0ZmRhMzRiM2U4ZDI2YTYyMTBmOTYyMGRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuNDk3OCwgNzYuOTM4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmMyMWRjMThkNWUwNDlkZDgzZmJlZDM4MTNhYTA0YmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS4wMzkxLCA4Ny4xNzkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mM2M4NWMxNmNhMzU0NzQyOTRhNGQ0NTI3ZmY0YmVhMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIyLjM1NzEsIDg0LjM5MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwNDI0ZGYyZmJlOTRiMzBiZDk2YzlhYTg4MGNlMTI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjQuOTc2OTk5OTk5OTk5OTk3LCA5MS45OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MDBlMGRmMGMxN2E0YWI5YjMxZTUyNDJlMGNlMTczYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0Ljc3OTMsIDEwOC4wMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzZDU1ZmJkZmVhYTQxNWRhMDQ3Y2RiZmE4NTkwY2JlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuMDUxNSwgMTA1LjAxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWJjYTQ5ZjgyMGVjNDU4MzhlYjkzNzk3N2E4NDNkZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS4yOTU0LCA5MC40NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwNzhkMzM4NzIwNTRjZmZiYzA2MmU5MjZiZTllNjFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjQuNTIwOSwgMTIxLjM4Nzk5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YWFmMTBkN2NlYzY0MTUyYTU3NDMwNjY0YmIwYTE2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS41OTA3LCA0Ny4xMjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNWQ2YzUwODgyMDc0NmVjOGYzNzg4MGFjMDRjMzVkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMuMDg4OTU5OTk5OTk5OTk5NywgMTAxLjY5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTg3NTg1MTNiMDU4NDljNGI5YjcyMTI4YTVlM2EzMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjM1NDk4LCA5OS4xNzYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YzE4YTE0NjVlZmY0YWMyOGUxYTZjMzE0ZjdhNTU1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMuNTg3MjMwMDAwMDAwMDAwNCwgMTE1LjY2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODdiMzRkMDczZmI1NDdkN2I2OTMxOTkzYWJkYWE0ZWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi44OTcwOCwgMTA3LjEwNjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZTU1YWRmNDM5MTk0YWFkYWQ3NjViOThlNmM5OWI4ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjU3MjMwNywgMTEwLjg4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2I1NzdjNzdlYTM1NGU5M2EyZjJjMWE3MTY4NDM3ZTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNC4wNiwgMTIxLjc0NzAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGRlYWIwZmEzMmI0MzRiYWRmZTQzMjczYmI2MTZiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEzLjQzODAxMSwgMTQ0Ljc0NDczOTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNTU3YmEyMjA4NjQ0MzY1OWE2YWRkZGQzZmU3NTNhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC42MzAxLCAxNjYuNTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4ZTU3NmU2MTE0MDRlYmQ5NTMwMjgxNDUxYTRkM2Q0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMzkzOTQsIDE0Ni4yOTM5OTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjEyYzZkNzgyYjQzNDdlM2I3Y2EzNzI5NWJiYmIwNWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzguMjg4MSwgMTc2LjU0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjMwZjhmMWU5ZjE4NGYxNjkxNjIzZWIyMTIzMjRmY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZjE3MGI1M2MyZjE0ZWJlOTAzZjZmYWYzMGUyNTcwYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yNy4xMTUyLCAxMzQuODM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOTkzNjhkOTI5ZTQ0MDM3ODg3NjRlZjQxM2VkNjcyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC42MjcxLCAxMjEuMzkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYmQyNDNiZGVkOTM0ZDI1ODI1Y2ViZTI4YTBhYzI2MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNi42ODA3LCAxNDMuNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0MzVlYmQzOTk0NTQyMGNiMzlkYmUwOWU3YWY0NjJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjY3NTQsIDEzMC4xMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDE5MzdkMzFiNWFiNGFkMDk1M2I2NDU5MjZlMzUxYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuODM5MywgMTMzLjE4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2JkM2QwYjdjYzc5NDY5NjgzYTAyMzJkODkzNTMyMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuMjYyMywgMTM1Ljc1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzQ0OGRjOTY5NGNjNDQ2NTlhZjcxNzAxNTQ0NDljNDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTUuNTQ1OCwgMTM0LjI4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTZjOTgxZDBmYzc1NDBkM2I5MTNmMzA5OTY3MzkxMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuOTgwNTEsIDE0MS44MTYxMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmMyZWVkMjMwM2RiNDJhNmE1NTUyMzIxZDVhODY3MWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi42MDEzLCAxNDAuNTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNzRjNTBhNDQ4MjU0YTU0OWM2ODNlNjhlNTQ5NjljOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjA4NzIxLCAxNDIuNjY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OWJkNDhlYjJkYmU0OGU1OWQ2ZjQ4ZmQ0ZDdiZDAwYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01LjU3OTYxOTk5OTk5OTk5OSwgMTM5LjIzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjFhZTY3YTNmYjQyNDZiN2JkNmIyNGYyMDI1ZDA1NmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC4wOTM3MSwgMTQ2LjkwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTVjNjhmYjVmNTlhNGZiZGJjYTQ2ZThkODk0NGFjMjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4wMzUzMiwgMTQ3LjIzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzZlODc2ZWE1MzUyNDkxMGI4OWVkNzY3YjZhY2QyZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi40NjAyMiwgMTU1LjYzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjYxOWMzZjdlYjZjNGMzNzgxZmM0NGQ1YmI3YTljZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Mi4xMjI4LCAtMTc0LjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNWVlNzljZjIwOWI0OTgxYWM3OTUwN2Y0OThhYzVkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY5LjM3NjEsIC01Mi44NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzN2FkYmMyMWRkNDQyOTBhNTYwYjViZmMxNmUyNWM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTE5MiwgLTEyNC4xXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NGE3ZWE0MTczNDU0ZGJiODdiNDcyNGM4NTc2NmFjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjA5ODIsIC0xMjMuNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3YzhhYjlhYjVmMjQ0NDFiMWVhZjY0ZDQzYmY0NzQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuMDA0NTMyLCAtMTMyLjA3OTI1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjhkYWQxZTk0ZWJjNDlkMGFkYmU0MTMyYjU3NzRiOTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS4zMjMxLCAtMTIzLjAxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmY1YTQzMjE4NjJkNDg5ZDgyMzU3MmEzNmZjZDBhMTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42NywgLTEyNi42N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzJhN2U0YTlhMmE4NDZlOWEwNDE1YWVmMzU1NTUxOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC45MjY5LCAtMTI3LjMwNzk5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNmJiZGVmZmU2OTM0MDBkOTgwOGUyZTFjMjBmYTQ2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAxMTIsIC03OS43NTAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NDU5ZDc5ZTU5ZTk0ZGI0YjdkNzNiYWZkYjFhNzQ2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAyNjQsIC05OC4zMjAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOTE5NGRkYTJlOTM0MGJhYmQ3MjMxODRiOWFlYzc2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjA2NjUsIC05OC4xODMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYWU1MjBkYmY1YjM0ODJiOTU0OGNhNGY5MjMwZDIxNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjM2OTksIC0xMDMuOTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2NjRjNjgxNjUwMTQzZmRiOWNkMDk1ZDFmNjY3MzIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNTYsIC03Ny41M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWEzY2IxNTVlOTFlNGY4YmFkOTlmOWQxMTI4MmNiMDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40Mzg3NDIsIC03NS43MDgxMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzMjExYzUzY2JhNTQwYmI4NTNiNTlkMDlhYjZiYmNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuOTYxNDU5OTk5OTk5OTk1LCAtOTUuMDM5MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NkZWU0N2Y2MjkzMDQ4ODg5NDQ5YTIwMWFiMTUzNzZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzAuNzY3MzgsIC05NC42Mjg0ODAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmUwODNhNmJjZjQzNDE2YWIwNjYyZTNjNTllNzlmNjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMC45ODg4LCAtOTIuNTQwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmRhMjEyNzIzYjhlNDViYzg1YmRmOTE0OWU2YjY2MDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zMDczLCAtMTE2LjQwNzk5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OTlmYzk5Y2ZmOTU0YWMwYjFkYzFhMDhmZmZjMDM5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQxMDIsIC0xMjAuNjQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYWQ2ODU4MGYwNGU0ODBjYWViNTQxODYxZDg4NDhiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjIxNTcsIC05My4zMTgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZDE4NjgxNDIxYWQ0MGEzOGFiY2MyZDViNDA0NDdkNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIwLjU2NzEsIC05Ny4yNTU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NzQzZDU3NTU1OWU0ZmVlODRjNTM3NTA5MjBjMmZmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4LjE3MTMsIC05Mi43MzY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNjhmNjAxODRhOTU0MDQ4YjAxMWJjMGYxM2JlYzU5ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjYzODQsIC05Mi4yNzg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZWY2M2E4Yzg0NjA0ZDliYThkYTBhNzBkZDkxYTFkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE5LjI0NjcsIC0xMDEuNjMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZWZlNmNhYWMwMGI0ZDM0YTI4ZmNiZmRlMGE4NWMzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkzNTQsIC0xMjIuNTk4OTk5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAzZDRmZjc3ZDA1NzRmZGY5NjU0OGJjYzA2NDM3ZTcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuMzMwOTk5OTk5OTk5OTk2LCAtMTE2LjYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGUwYzAzYTNjM2I5NDRkYTk4OTI5NTgzZjcyNWI4ZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4wMDU2LCAtMTA4Ljc4MjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YTI0ZTQwMzFiNjA0N2VjOTM4YTIxZjQ3MGRmYTE3ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjMxODQsIC0xMTYuOTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZDI1MjY3NGEzOWE0ZjIwYTUwN2FjN2JiNWNlYjg4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1Ljc2NTMsIC0xMTAuNTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NzViMDdiOTUwOWI0Mzg3YjU1ZmUzZWM3ZDZjMTUzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjc5NzMsIC0xMTEuOTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNGU4ZDZiY2ZkNGE0OTNiYTFmZDI5ZWI5ZWFlYjBlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNzE0ODg5OTk5OTk5OTk5OSwgLTc5LjA1MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1NzZkMGJhNGFjMzRjNDZhZWJiOWY5ZDM1MGQ3MDVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMi42MTUxNiwgLTc2LjMxMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA3ODBiYzdhZGFmNDRkNWJiNTRlMGM4MmU4YmY2MmU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjgwNDMxMDAwMDAwMDAwMSwgLTY0LjM1NzQ4MDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xN2JmNmVlOGEyZWU0Njc0YjhmMGE2YTA0ZjJmNDk5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC45MjAxLCAtNjYuMzMzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjNlNjdhYmZiNzY4NDUyM2E5OWMyZmU5MjVkZGI4NGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuNzQxOTM5LCAtNzUuODA5MjMxMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwMDFjMzcyYzA2NDQ1Mzg4MGZjMGU5NGZiZDczNTRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTM4LjczOTIsIC03MS4yNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QxMWU5YTQ0NGFlNDQzMmU5YmY4MTI0NmJiZGRjZDZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuMzY0Nzk1LCAtNjEuMzQyOTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDhkZGJjNmVmMWM0NDhiOGI5NjUzOTZhNTM3Mzc5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuNTg3NDQsIC01OS44MDIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZWQ2NjYyZDNmOTk0NDFkYjZmNGM2YjFiYmY0MmViNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjM5NTU2NiwgLTcyLjE5OTc5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjNiNGExNDk5YzFlNGY3N2E0MDY3YmY0YWVmY2E0ZTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuOTMxMSwgLTczLjkwNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmNWFhMmJhNjQ0ZDRmZmJiNmFmODhlYTNhZDJkOGIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE1LjExODgsIC02NS4zOTkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mM2VhNzBmOTU4ZWQ0N2ZiOGQ3ZmMwMjk0Njk0ZDlmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMC41NDU0LCAtNzUuMzE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMWUyODU2YTkwN2Q0ZWM0YjE1NDNhOWY3YTkxYzA3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjQ1MTM1OTk5OTk5OTk5OTgsIC03OC4xODkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZGUyZTY5MmNiMzQ0OTUyODk5ZWVmOTdmZWJmYWNlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuODM3NzIsIC01Ni44MzIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYTRjZjA2NWMwMjg0NDJiYjVmMTRlMjc0ZjVmMmFhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS41Mjk4LCAtNjMuOTY4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjI5YTFmZDAwOWJkNGE3M2EzMWE3MWUwYzIyYTQ5M2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjUuNjA1NTEsIC01Ny4wODgxNTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViNjU4ZWI3NjJjYjQ3MmQ4YWFlMjhiNTUxMTQ0MDFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEwLjIwMTIsIC03Mi4zMjA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MGQ0YTk5ZTZiZmI0MGE0OGRjMTM2ZGQ5OTEzYzFkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi4xMzMsIC02Ni43MTY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZGFkNGQ4Y2Q0MDU0MjI2OTgzZjUyODU1ZWE5YjY4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjEwNzc0LCAtNDcuNjMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjk3ZWM1ZGMxZTJiNDE2ZDgyNjg0NzAxNzkzZDU0ZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC45MTY5NzM5OTk5OTk5OTYsIC0zLjQzMDYxNjAwMDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlOWNkYzFlNDEwMDQ0YTU4MzRmNGJmZGZlYjU1NDQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMzQ5NCwgMzguMjIzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTkwZDkxMTg0YjhmNDFiNGI3NDdhMmYxNjA4MTU4NzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2JmNDYxN2JiODlmNGI5Mzk0NmRkNzBiYmJhY2U4ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS4wLCAzMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZjE0NTgyMzE2ZDQ0YThkODM4MTI4ZDNiYjI2MjAzNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjUsIC03LjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhOTVmMDIwOTkyNTQ4ODE4NTYzNGI1YmE3YmE2MzMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuODg4NCwgMTQuNDUwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWE3MjRkZGFiZTI3NGY4NmJlYTA5YjAxYzYzM2ZiOTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS4xMDU2LCAzNS4wMTc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZGYyNGIwZGRhNGQ0ZGU4ODg4NWFjM2E1NjU0NzZiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjI1MzQsIC0xNS4zODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM2NDUzNzAyNTY1OTRiZjJhYjBlNDAyNjcxNjlhMjBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTguMjU2MDUsIDM3LjYyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWY1ZDYxNWQ1NDYwNDQ2YzhjNWE5MWE2YjlhNzdjOTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi45NjM0LCAtMC41NTE4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTkzYmRmZTAwNTk0NGM3NmE4ZDE4NTQ3MGYyODlhOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYjU5MGQ5NGQ3MjQ0MmQ0YjMzZGIzZmFjZGU4MzY3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjI0NTIsIC0zLjc4OTM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZjM3MTcwYjY2NWY0MzA5YmFmYzIzOWM4ZGE3NjBjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYzLjQ4MzcsIC0xOS4wMjEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MTU5NTgwY2RlNTk0YTJhYjcxYzM0ODBhOTVmMGY2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjAsIC0xLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2NDMxZjMwZjk3MDQyODlhMDUwMDZiOWYxOWQwZjg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguNjQ4OTk5OTk5OTk5OTk0LCAxMi40Njc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTI5NzQ3NDQxZjM0Y2E1OWY3ZGRhZmE5Yjk5OThhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjAsIDIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGUzMDMzNWY0ZTlhNGEyY2FjNTVlZDViNWQyYThmNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS45MSwgLTguMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWU0MzYwOTI3NTY2NDIwMzk3ZGIzNzQ0NjE0NjllZmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDkzOTkzNDlhNTZjNGUxYThiOWY3NWNlNTA1ZDJiMWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zOTEzLCAyNC4yMjU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjZkMWU2OGFkNWI0MTY5OTk5N2U4N2ZmZTQxOWMwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1YzM3MTMzYzNkYzQ5ZGJiNTdiZDMxNThkZWFkNTQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzhlNzhkMTZiOGU0OTY1YTA4ZWRmNTM3MGYwYTNmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU1LjE0MjksIDIzLjk2MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmYjE5NWZiZmY5OTQyZTVhZDMyNjYzZmMwOGE3OTFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMCwgMjAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjA1YzE1MzU1ODE0NDFkYWFhYTZiYjc0ZjU4NzY3NTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zMjI0LCAyNC44Njk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZWFkNjQ3NjY4ZGM0NjEyYTVhOTE2NDgyMGViNWExMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjAsIDQ1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkYTM2OGJlY2VjNDRlNmRhZmY3YmVjMmEyOTFlYTM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjguNjU5MywgNTUuMTU4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTU3OTM0MjViM2Q3NDgzY2EyYjFiNjYzZDg0MTRmMjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS45MTUzLCA2OS40NTI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NjI1YTI1NjRmNGY0NTJiODBiMTc5OGQxZTFjMTJhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjE2NjgyNSwgNzQuMzMwNDU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZTAxOWI0ZmUxZGU0ZTY3OWE2MDUyN2Y3NjA2OTU0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI1LjAsIDc3LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjZTMzZjM0NTgwMzQ0YjJhYTM4Yjg0YTY1NjQwYzc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjQuMCwgOTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQyOWEwZTczYzcwNDUwMGI3NzQ4ODI4NmIxNzBhOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4LjAsIDgxLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y1MWNiYjllMjdiYzRlMGY4M2RiYmIxZWUxOWY5NWY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjc4NywgLTEuMzE2MjIwMDAwMDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2M5ZjE5YmJiMDdmNDIyMjg2MGM5MDNmOWI3ZjllOTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NC43NjI4LCAyNS41NTc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNWNlNjFlNWY3ZTg0MDNjODYzOGJiYjIzMDU4YzQzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU1LjgzMDcsIDQ4LjQwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODQzNTFkZmZiNDA5NGQxM2JhZTJlM2Y5NTIzNjBlODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NC4wNTI3LCA1NC45NDYwMDAwMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwOTViYWEyMjI0MTRhYzZiODFmMzVhYTYxOGY2ZDU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjdkODNhMjg2NmQwNGNhNjg2YjFmYmMzZDUxOGFkZGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Mi40MzA4LCA2Ni4xMjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjI4NjA3ZGI3NTI0ZTBkYjQ5ZDFmNjY1NzhiMzg5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY2LjE3NzUsIDcxLjAyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1NjNmNjU3NmFmMzQ1YWE5ZTAwOGNiYTNjNjc2NzM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzY2YjczMjQ2Y2YwNDg4NjgyNTc2M2U4YmJiODhhNjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC45Nzc3LCA0Ni40NzM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Y2QyYTg2NWYzZDg0YTJkOTQ4Mjg4ZmYyOTgxZTZkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjAsIDc0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4YTNkMWE5NzZlMzRlOTNhZGY0NjkxNzIwZjlkNDkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTUuNDg2OTk5OTk5OTk5OTk1LCA0Ny4xNjMwMDAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxNDg0YjhhMjJlNTQ0ZmRiMTk2MjllMDI2ZGNiYmRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjEuNjk3NCwgMTMzLjk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNGEwNDE2YzlmNmU0YTk3OGNiNTQzYzczNmEyYmQ5NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjMyNCwgMTA2LjI4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWRmMmRiNTE5Njc1NDBlOWFlNzhjOGRkZTA4NWI3YTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3MC42Njg3LCAxMzAuOTE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZjMzZmE0MDEyNDE0M2JkYTVlNjZlOGRhYmUwNDIxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzcwLjQ5OCwgMTU3Ljg1Mjk5OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MDgwYWM4ZTE1YzY0OGY5YjBiODliZmFjYWYwNGZiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjU5LCAxNDAuNjgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NGFiMGJmNjEzOGQ0M2FkYWMzMjI2YzI3OWIyZjNjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY4LjY0MzYsIDE3MC4wNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2OTQ4ZDcwYTViNjQ1NGQ4YWZhYjI0NDJmMTRkMTU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjMzNjU0LCAxNDIuNDYxNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY4ZTQ0Yzk3ZWMzNjQyMWU5MTllMTMxYTQ5OWJjNmRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjcuMjc4MjYzLCA5My42NzU1MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QyZWVmYTA2NzgxMTQ0YTdhZjVmYzRhODk1MjcxNGQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuNDc3MSwgMTA0LjAyNjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NDA2MGZmMDAwZmU0OWUxOTE0OTMwNzMyZWJkYjNiNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01LjA3NDQ0LCAxNDEuNzMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zODUwZjkzMTEzNmQ0NTk4YmRiMWMyYjkwYzJkNDdhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjIxMDYsIC0xMTAuMDgyMDAwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzNzUxMDI5NDAzNDRkZjhiMzEzY2YzMzQ3YzIyMWNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMC4zMDQxNiwgLTcwLjE2NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0NzFiMzcwMDlmMzQzYzE5MjljNGJkZTUwM2YxZDRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuMTU5MDAwMDAwMDAwMDAwMywgLTcyLjE0MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhZDc5YTA4MGNkNTQ1MjI5N2VhNmJiNzA4NDFiNTA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuOTM4NTQsIDEzLjA1MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0MmEzNmI0MDRlYzQwMWViOTA4ZGYyN2NmNGE3MDczID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNC43Nzg3MDQsIDQ1LjE1Mjg1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWQ0NTY3NjFmNDlmNGVhMGEwZjJjY2Q0Mjg2ZWViMWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjY0NzQ1LCAtMC40MzIyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTVhZDdiZDk3OTJhNGNhOTgxMGZhY2RmNGE1YmQ3ZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy45NTg5NSwgMTQuMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzUwNDg3YTk3MmI2NGY0Y2JiNTgwZGJjZjVlOTRiNjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjYxODk2LCAxNy42NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliNzA0Nzg0NWIxZDQyMGFiNjdiNWY0ZTE0N2VmNTJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjIuODE0MiwgMzEuODM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjVlYjI4YmVjNDBhNDhhOWJhOThlZjkxMWEyODYyZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2MS4xMTE5OTk5OTk5OTk5OTUsIDguODg2MDAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wN2ExYTA5MmI2MzI0MzJlYmJjM2NkNjMyYTdhYjBiOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MTNkMzEyNmYzMmQ0NGFmYWU3ZGQ3MGQzODAxNTRhMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjIxNjEsIDc0LjgyMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjMGM5ZjNkNDlmNjRiOTJhMzlmMjk5OWM3MjhlMWJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjkuODYyMSwgMTE5LjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGM1MTZhNTk3MGQ5NGViNmE3MTZkMGM0Yzc2NmU1M2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC43OTI2LCA5My45NjY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTcwMGU0MmI2NTk0NjhjOWU1ZTNjNDVkZjdiNGViYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3Ljk4NzIsIDk3LjcxMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiNmI3MDM2ZWYyNjQzYzA4NDJmZTAwN2RiNDQ5MjlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuNTQwNzksIDE0NS43Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmFlNDE2ZDkwMTAwNDc0Yjg3YTU2NTUwMjE3NzZkM2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS44MjI4LCAtMTIzLjMxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTRiOWFhNjk5OTRhNDM3YWI1Y2JiMDgzN2VlMjcyMWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC43ODczLCAtMTA2LjY2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjA3MjBhZDA4NWU5NGFjN2I4ZTBiMjJhZWZiMTMxMDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4yMjc0LCAtOTkuNTU2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmZhMzdjNjBiOTcyNDUyNzljNTZmYTkyOWZjMzRkNWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS43MzU3LCAtMTAwLjAxNzk5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zY2FjZTY1NmU1YTE0NGNmYTMwZDRjOTg2ZGQ0ODNiZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjA3NzcsIC05Ny41NDMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTYxYTMyNjQxNTA0MDcyODc2NGI0NmRlOGJiM2M1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjE1MTMsIDguNzgwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTU3YzcwY2JlYmQ3NDA0Mzk4ZGM5OTllY2E0YzAyODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs5LjMyMDQyLCA5LjQ2MTQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNzE1ODUzMTYxNjY0YWE2ODg5YmIxNWUxYjZiOThmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjE5OTQ4LCAzNS4yOTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMDA3YzNmZjM4OTQ0YTljODNmZjA2MWM5MzQ3MGZjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuOTIwNDgsIC05Ljk2MTI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNWU2ZTZkNWY1YjI0Nzc0ODE0OWIwYTgwZmE0ZDJmNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuMzQ3NTYsIC0xLjMzMjU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZmVkNWI1MmE0MDY0MTFjODE5NDljMzM4N2E3YTEzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuNjU0ODgsIC0wLjE4NTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZjA3YTljMzVhY2Y0YmFmYTU3NmE2OTNhODU5YTI1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuNDYwNjEsIDAuODE0OTc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YzYzZGVmNTZiZmQ0NDMzODNhMWI3ZjcwODExNDdiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQuNjI3MDUsIDcuMjM0NDEwMDAwMDAwMDAwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDc5MmJlYWVhMzUzNDIyODk1YWU2M2VkYzRmNjZiZWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjUuMzMwNSwgMzEuMzUxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTNjNWVlZTgxYTRhNDE4NDkxY2M3Njc4NjBjYWVjYjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjAyMjQ1LCAzMC44NjQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYjc1N2RiZThiYjM0OTYyOGZkZGViZDhjNTRlZWQ1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjkzMjk2LCAzNC40ODk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjMxYWFiZmUwMDI0YTA3YmRjNTVhMzMwNDM4M2ZjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjAzNjgsIDc1LjY3MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4Nzk5ZDQxZjI1MTRkMjk5MDYyM2E1OTc0YTMzNWM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMDIwOSwgMTE2LjIyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZThlYWRjNDY3MWJiNDYwMWExYTQ0MTRhYTYxOTM0YTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS4wLCAxMTYuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmFjYTk1ZGQxM2U3NDFiMTk5YTY4NzBlZjIwZmI5NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4zMTYzMSwgMTQ1Ljk5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjY2Y2Y3N2U0NjhjNDM5ZDg5MTg1YzA3YmNmNWE5ZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OC4zNjM3LCAtMTEwLjgzMjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZGEzY2Y2MjMyMDY0NzcwOGQ5OWMwNmY5OWZiZjBjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjkwNTMsIC0xMDYuMTI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80Y2E4MGY0MjI3ZjU0NjMxODgwNjkxZWE2NGZkOTEwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4LjA1NDEsIC05Ni42NjU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMGUzM2ViODI0YTE0ZjQwYTBlMDRlOGVhYTZjODNkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjk4MTksIDM2LjY5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxNDg3ZWZiZjYzMTQxNGZhNmYxMGUyZjk0NWUxYzQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjUzODIsIDIyLjI5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyZjNkYjIyMWEwYzQ0ZmI5MDNlMjFhNTQzNGFkNGFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuODg2MywgMTYuMzkxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzgzYzdkMmQ0MTFjNDRmZjhkN2NmMjNlNTY4NDQyM2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy4xNDE5LCAzNi40NTczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YmJjMjMxNDBlYzk0OTUzYWI1ZTdhYmI2NThjYWE0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIzLjAsIDExMy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOTkzYzU2NGNmZTE0YTNiOTIyZWZhZDgwNDI5ZmZjNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIxLjI3MDEsIDEwMC4yMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmM2NkNDk4ZjlkMzRhMjliZWRjNjE0NTBhZDRlZjEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjAuNjgxMTg4LCAxMDUuNzc0MDcwOTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlZGU5NTA1ZGU5NTRhYWVhM2NjOGEyOWE5MDZjOGM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjAuODMsIDEwMS4xN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDU5ZTVjMmU0NzgxNDBhODgzN2E5MDE5YTMxMTA2MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC4xMTY5LCAxMTAuMTA2MDAwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0ZTRmYzE3OGNjNTRlYmI5MGJjNGQ3MDExNTJlZGY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuMTkyLCAxMDAuNjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMDY1ZGI3NzljZGQ0N2I1YmIzY2ZlOTg0NzA2MzcxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI0Ljg0ODQsIDEwNi4xODcwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2EyYzVhZTVmYTAyNDU0NzkyMzVmYjhhNTcxZGMzNDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy42NjI4OSwgLTY5Ljg3MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwMmZlNmJkZGZlODQ0MzY4YTE5ZTQxODMyYTE3OTgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZGQ0MzBkNjg1N2Y0YTU4YWU5Njk5NzA5NjUxODRlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTk5ZmEyOTJkM2I0ZGEwOTA3MjI0NGQ2MTA5N2U4YSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTk5OWZhMjkyZDNiNGRhMDkwNzIyNDRkNjEwOTdlOGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb3JlMTI4MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb3JlYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWRkNDMwZDY4NTdmNGE1OGFlOTY5OTcwOTY1MTg0ZTEuc2V0Q29udGVudChodG1sX2E5OTlmYTI5MmQzYjRkYTA5MDcyMjQ0ZDYxMDk3ZThhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkwMmZlNmJkZGZlODQ0MzY4YTE5ZTQxODMyYTE3OTgzLmJpbmRQb3B1cChwb3B1cF8xZGQ0MzBkNjg1N2Y0YTU4YWU5Njk5NzA5NjUxODRlMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTY0MjFhYTk0ZjQyNGMxM2E3MzgwNDYyNzE1Y2YyODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2My43NTUxLCA4Ny41NDY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGRjMGIxNGMzOGIzNDJkNzg1NGJkMzZkOWFlZTQ1NjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDg4ZWMxYjdlYWE3NGIxNmIyMDU3MzU3NTEyNTE2MmMgPSAkKGA8ZGl2IGlkPSJodG1sX2Q4OGVjMWI3ZWFhNzRiMTZiMjA1NzM1NzUxMjUxNjJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2V0dDEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2V0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkYzBiMTRjMzhiMzQyZDc4NTRiZDM2ZDlhZWU0NTY1LnNldENvbnRlbnQoaHRtbF9kODhlYzFiN2VhYTc0YjE2YjIwNTczNTc1MTI1MTYyYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NjQyMWFhOTRmNDI0YzEzYTczODA0NjI3MTVjZjI4OC5iaW5kUG9wdXAocG9wdXBfOGRjMGIxNGMzOGIzNDJkNzg1NGJkMzZkOWFlZTQ1NjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RlYTY1ZWU0MmJlMDRhN2E4MGRiNmI1NzczOTllY2QzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMTMyOCwgNDcuMDgwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhZTk3N2I2NDE0MzQzNjZiZGEyMmRjNmZjNmUxNzkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3Y2VkYmU0MzI4YjRjNjhhNDE5MGMxNTAyYWRhOWU3ID0gJChgPGRpdiBpZD0iaHRtbF8wN2NlZGJlNDMyOGI0YzY4YTQxOTBjMTUwMmFkYTllNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xha2sxMjUyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxhazwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYWU5NzdiNjQxNDM0MzY2YmRhMjJkYzZmYzZlMTc5Mi5zZXRDb250ZW50KGh0bWxfMDdjZWRiZTQzMjhiNGM2OGE0MTkwYzE1MDJhZGE5ZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGVhNjVlZTQyYmUwNGE3YTgwZGI2YjU3NzM5OWVjZDMuYmluZFBvcHVwKHBvcHVwXzFhZTk3N2I2NDE0MzQzNjZiZGEyMmRjNmZjNmUxNzkyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMzVlYTFkNmVjY2M0MDJhYjMyNTE2NTMwMDg4OTQ0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NWQ5NmQzNmE2MGY0MTY0ODg0YmRlMTUwZWE3MjViZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDI1MDVlMjQ4ODQ0MmJjODMyZDFlZDY5MTgwMGI4MSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWQyNTA1ZTI0ODg0NDJiYzgzMmQxZWQ2OTE4MDBiODEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTVkOTZkMzZhNjBmNDE2NDg4NGJkZTE1MGVhNzI1YmQuc2V0Q29udGVudChodG1sXzlkMjUwNWUyNDg4NDQyYmM4MzJkMWVkNjkxODAwYjgxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YzNWVhMWQ2ZWNjYzQwMmFiMzI1MTY1MzAwODg5NDRhLmJpbmRQb3B1cChwb3B1cF81NWQ5NmQzNmE2MGY0MTY0ODg0YmRlMTUwZWE3MjViZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmYzN2M1ZjQxYzRiNGJlMTlhMTU0NDI4YWQxYmZhMDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS44NTAzOTY5OTk5OTk5OTQsIDQzLjc4NjEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTk0MDRjZDk0MGI5NDE0NWI3OGMxZTZkMWU2ZDY2ZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzFlZDJiY2I0MjNhNDkxNzg5YjNjZmFjNGFjODM3MWUgPSAkKGA8ZGl2IGlkPSJodG1sXzMxZWQyYmNiNDIzYTQ5MTc4OWIzY2ZhYzRhYzgzNzFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2VvcmdpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTk0MDRjZDk0MGI5NDE0NWI3OGMxZTZkMWU2ZDY2ZWEuc2V0Q29udGVudChodG1sXzMxZWQyYmNiNDIzYTQ5MTc4OWIzY2ZhYzRhYzgzNzFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmMzdjNWY0MWM0YjRiZTE5YTE1NDQyOGFkMWJmYTAyLmJpbmRQb3B1cChwb3B1cF81OTQwNGNkOTQwYjk0MTQ1Yjc4YzFlNmQxZTZkNjZlYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWMwNWRlOWQ3NjUxNDc5ZWJlYTQ5OGVmZjk3ZTdmYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC40NjQ0LCA4Ni40NjU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWEyODEyMzRmZTYzNDkwZmE5M2UxYjgwZGNiMGFjNjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjgxNGQyNzczZmM3NGNhYTg3ODk0OWUzMzg4ZGYwZDMgPSAkKGA8ZGl2IGlkPSJodG1sXzY4MTRkMjc3M2ZjNzRjYWE4Nzg5NDllMzM4OGRmMGQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva3VydTEzMDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S3VydWtoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhMjgxMjM0ZmU2MzQ5MGZhOTNlMWI4MGRjYjBhYzY0LnNldENvbnRlbnQoaHRtbF82ODE0ZDI3NzNmYzc0Y2FhODc4OTQ5ZTMzODhkZjBkMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYzA1ZGU5ZDc2NTE0NzllYmVhNDk4ZWZmOTdlN2ZjOC5iaW5kUG9wdXAocG9wdXBfOWEyODEyMzRmZTYzNDkwZmE5M2UxYjgwZGNiMGFjNjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YzN2EzYzQ4OWJjYjQ0NzdhZTE3ZjVhYTMzZTQ0NmRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTYuNDUyOSwgNzguNzAyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmMDU4NzZkMGVkNzRhYWY5MGNmN2E1MDU2NDgxMmJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3NDMzYzM5YzAzMzQyN2U5NTZiNjA5YmNlYTg3NzYyID0gJChgPGRpdiBpZD0iaHRtbF84NzQzM2MzOWMwMzM0MjdlOTU2YjYwOWJjZWE4Nzc2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RlbHUxMjYyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRlbHVndTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZjA1ODc2ZDBlZDc0YWFmOTBjZjdhNTA1NjQ4MTJiYi5zZXRDb250ZW50KGh0bWxfODc0MzNjMzljMDMzNDI3ZTk1NmI2MDliY2VhODc3NjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjM3YTNjNDg5YmNiNDQ3N2FlMTdmNWFhMzNlNDQ2ZGUuYmluZFBvcHVwKHBvcHVwXzhmMDU4NzZkMGVkNzRhYWY5MGNmN2E1MDU2NDgxMmJiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOGEwY2IxYjJhODA0MjQzYmYwYWIwMTA1Zjg0YzBjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjQ5NzgsIDc2LjkzODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZGQ0YjNjZTY0NGM0Nzg1ODcwMzYzMGYyZTI2YzZiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MWQ2NTRiMzhkNTk0YWVlOWNmNWYyZDI4ZWUyNTc0NyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDFkNjU0YjM4ZDU5NGFlZTljZjVmMmQyOGVlMjU3NDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb3RhMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb3RhIChJbmRpYSk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGRkNGIzY2U2NDRjNDc4NTg3MDM2MzBmMmUyNmM2YmIuc2V0Q29udGVudChodG1sXzQxZDY1NGIzOGQ1OTRhZWU5Y2Y1ZjJkMjhlZTI1NzQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I4YTBjYjFiMmE4MDQyNDNiZjBhYjAxMDVmODRjMGM2LmJpbmRQb3B1cChwb3B1cF8wZGQ0YjNjZTY0NGM0Nzg1ODcwMzYzMGYyZTI2YzZiYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTliZTUxZTNhNTc5NGRhMzg3N2UyZjQ3MjhjOWExMWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS4wMzkxLCA4Ny4xNzkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTk5ODFiNTZmZGRiNDQ4MThlZWI1MWZjMWIzMDdhOWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjE2ODI4ZmYyODk1NDUyMWFlOGM2YTQ1NDA3MmZjNzIgPSAkKGA8ZGl2IGlkPSJodG1sXzYxNjgyOGZmMjg5NTQ1MjFhZThjNmE0NTQwNzJmYzcyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbXVuZDEzMjAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TXVuZGFyaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOTk4MWI1NmZkZGI0NDgxOGVlYjUxZmMxYjMwN2E5ZS5zZXRDb250ZW50KGh0bWxfNjE2ODI4ZmYyODk1NDUyMWFlOGM2YTQ1NDA3MmZjNzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTliZTUxZTNhNTc5NGRhMzg3N2UyZjQ3MjhjOWExMWYuYmluZFBvcHVwKHBvcHVwX2U5OTgxYjU2ZmRkYjQ0ODE4ZWViNTFmYzFiMzA3YTllKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOGJkNTA4YjI2MDE0OWQxYjUwOWRhODJkYjFlODg0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIyLjM1NzEsIDg0LjM5MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMDkxMGQ0NTliNGY0OTg0OTlhYTY5OWYwYmQ4NDVlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMWM3ZmU3ZWVhZDA0YzMwYTg0NGVmMTFjYTMyZWE5OSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTFjN2ZlN2VlYWQwNGMzMGE4NDRlZjExY2EzMmVhOTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raGFyMTI4NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaGFyaWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzA5MTBkNDU5YjRmNDk4NDk5YWE2OTlmMGJkODQ1ZTQuc2V0Q29udGVudChodG1sXzExYzdmZTdlZWFkMDRjMzBhODQ0ZWYxMWNhMzJlYTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM4YmQ1MDhiMjYwMTQ5ZDFiNTA5ZGE4MmRiMWU4ODQxLmJpbmRQb3B1cChwb3B1cF8zMDkxMGQ0NTliNGY0OTg0OTlhYTY5OWYwYmQ4NDVlNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjM3ZTZlZDhhNzI0NDI3ZmFhZGIwN2NmNWU2ZDczNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC45NzY5OTk5OTk5OTk5OTcsIDkxLjk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZDg0ZTA3YjNlMTA0MGRiODIyNjQ3YTFkZmU2YTMwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YmQ3MmNmMGI2ODY0ZTk0OWQyNjAwYmY5MmUwOGI2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfOGJkNzJjZjBiNjg2NGU5NDlkMjYwMGJmOTJlMDhiNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raGFzMTI2OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaGFzaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZDg0ZTA3YjNlMTA0MGRiODIyNjQ3YTFkZmU2YTMwZS5zZXRDb250ZW50KGh0bWxfOGJkNzJjZjBiNjg2NGU5NDlkMjYwMGJmOTJlMDhiNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjM3ZTZlZDhhNzI0NDI3ZmFhZGIwN2NmNWU2ZDczNDIuYmluZFBvcHVwKHBvcHVwX2JkODRlMDdiM2UxMDQwZGI4MjI2NDdhMWRmZTZhMzBlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZTI1NDE1OGZkZDA0ODE4ODhjYzU5OGJjNGUyMGJmZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE0Ljc3OTMsIDEwOC4wMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjgyZjNhNTI3ZDM0ZGQ2YjZkZmQ1NzI4ODcxOWRjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MGYzYmU4N2IzNDQ0M2I0YjNmMDgwMGYzMjkzNjA3MyA9ICQoYDxkaXYgaWQ9Imh0bWxfODBmM2JlODdiMzQ0NDNiNGIzZjA4MDBmMzI5MzYwNzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zZWRhMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TZWRhbmc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTI4MmYzYTUyN2QzNGRkNmI2ZGZkNTcyODg3MTlkYzkuc2V0Q29udGVudChodG1sXzgwZjNiZTg3YjM0NDQzYjRiM2YwODAwZjMyOTM2MDczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzllMjU0MTU4ZmRkMDQ4MTg4OGNjNTk4YmM0ZTIwYmZlLmJpbmRQb3B1cChwb3B1cF8xMjgyZjNhNTI3ZDM0ZGQ2YjZkZmQ1NzI4ODcxOWRjOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTVhNWViY2Y3YWQxNGNhZTgyNDkzZmY0NTU0NWZlOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi4wNTE1LCAxMDUuMDE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODMyZDAxZGFiMWIxNDI0M2IxMTJjZjliZTIyOGE3ZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjY2YTEzMjVkNjY3NDJjZDhiMzJkZDhhYmRlZjg4N2YgPSAkKGA8ZGl2IGlkPSJodG1sXzI2NmExMzI1ZDY2NzQyY2Q4YjMyZGQ4YWJkZWY4ODdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2VudDE5ODkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2VudHJhbCBLaG1lcjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MzJkMDFkYWIxYjE0MjQzYjExMmNmOWJlMjI4YTdlYi5zZXRDb250ZW50KGh0bWxfMjY2YTEzMjVkNjY3NDJjZDhiMzJkZDhhYmRlZjg4N2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTVhNWViY2Y3YWQxNGNhZTgyNDkzZmY0NTU0NWZlOWQuYmluZFBvcHVwKHBvcHVwXzgzMmQwMWRhYjFiMTQyNDNiMTEyY2Y5YmUyMjhhN2ViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMjgxMTU2OTljZDQ0MjA2OWFjYjVmN2FiYWI0NjgyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI1LjI5NTQsIDkwLjQ2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwNjA5NjQzYWI3MTQ3MTVhMDUwOWM5ZmJhMzBlMjkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3MWZmZDcwOTM1ZDQzNzZhYzViMDZhMjM5M2Q4NmQ1ID0gJChgPGRpdiBpZD0iaHRtbF8zNzFmZmQ3MDkzNWQ0Mzc2YWM1YjA2YTIzOTNkODZkNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2dhcm8xMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdhcm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTA2MDk2NDNhYjcxNDcxNWEwNTA5YzlmYmEzMGUyOTMuc2V0Q29udGVudChodG1sXzM3MWZmZDcwOTM1ZDQzNzZhYzViMDZhMjM5M2Q4NmQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAyODExNTY5OWNkNDQyMDY5YWNiNWY3YWJhYjQ2ODIyLmJpbmRQb3B1cChwb3B1cF85MDYwOTY0M2FiNzE0NzE1YTA1MDljOWZiYTMwZTI5MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjZmZTMwMzZjYWU1NDExMzg5MTBiYjAxMmQ4OTRmNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC41MjA5LCAxMjEuMzg3OTk5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNzZhYjJmYWQ0MWM0NWFhODk4NzZmZGFmN2Q2OTIyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZjYzNzdkMzc1Y2E0ZTE5YTQ2NGU2MjM1ZTMyYjQ3NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWY2Mzc3ZDM3NWNhNGUxOWE0NjRlNjIzNWUzMmI0NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hdGF5MTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BdGF5YWw8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTc2YWIyZmFkNDFjNDVhYTg5ODc2ZmRhZjdkNjkyMjAuc2V0Q29udGVudChodG1sXzFmNjM3N2QzNzVjYTRlMTlhNDY0ZTYyMzVlMzJiNDc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI2ZmUzMDM2Y2FlNTQxMTM4OTEwYmIwMTJkODk0ZjQyLmJpbmRQb3B1cChwb3B1cF9lNzZhYjJmYWQ0MWM0NWFhODk4NzZmZGFmN2Q2OTIyMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDAwZTVhYTFjZGE1NDZkZGJjN2RjNGJlZDE5YjEzY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTkuNTkwNywgNDcuMTIxMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyODVjMDhjN2I5ZTRhNGE4MDFhNjRhNWNkMmJhMGQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxZmM0ZDZiY2RhMzQ3MDJiYWU0MTFjZTMyYmM3YWU3ID0gJChgPGRpdiBpZD0iaHRtbF83MWZjNGQ2YmNkYTM0NzAyYmFlNDExY2UzMmJjN2FlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BsYXQxMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBsYXRlYXUgTWFsYWdhc3k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzI4NWMwOGM3YjllNGE0YTgwMWE2NGE1Y2QyYmEwZDguc2V0Q29udGVudChodG1sXzcxZmM0ZDZiY2RhMzQ3MDJiYWU0MTFjZTMyYmM3YWU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwMGU1YWExY2RhNTQ2ZGRiYzdkYzRiZWQxOWIxM2NlLmJpbmRQb3B1cChwb3B1cF8zMjg1YzA4YzdiOWU0YTRhODAxYTY0YTVjZDJiYTBkOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjM3YjI3NTY0MDgyNDcxYzkwZDExMGYyNmNjMjA5YjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjA4ODk1OTk5OTk5OTk5OTcsIDEwMS42OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYTg3ZDQ1YjZhMGY0M2JiYjY1YzE5ZmNiN2ZiZTQ3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZjVjMTJiYTk4ZDU0YTY2OTBkNDhlYTIxZjE5Nzk0NCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWY1YzEyYmE5OGQ1NGE2NjkwZDQ4ZWEyMWYxOTc5NDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zdGFuMTMwNiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TdGFuZGFyZCBNYWxheTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYTg3ZDQ1YjZhMGY0M2JiYjY1YzE5ZmNiN2ZiZTQ3Yy5zZXRDb250ZW50KGh0bWxfYWY1YzEyYmE5OGQ1NGE2NjkwZDQ4ZWEyMWYxOTc5NDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjM3YjI3NTY0MDgyNDcxYzkwZDExMGYyNmNjMjA5YjIuYmluZFBvcHVwKHBvcHVwX2NhODdkNDViNmEwZjQzYmJiNjVjMTlmY2I3ZmJlNDdjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNDRiZGFkYzkwZDk0NjkxOGNiN2NlZTc2NDQ3OGNhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIuMzU0OTgsIDk5LjE3NjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80M2VkNmJiYjBjMjI0N2M3YWZiOTYwZmRiMDVhZWZlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOTRjYjc1MDJhZjY0M2ExYmY4YmIxMjNmZjg5MTRiNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDk0Y2I3NTAyYWY2NDNhMWJmOGJiMTIzZmY4OTE0YjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iYXRhMTI4OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CYXRhayBUb2JhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzZWQ2YmJiMGMyMjQ3YzdhZmI5NjBmZGIwNWFlZmViLnNldENvbnRlbnQoaHRtbF8wOTRjYjc1MDJhZjY0M2ExYmY4YmIxMjNmZjg5MTRiNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNDRiZGFkYzkwZDk0NjkxOGNiN2NlZTc2NDQ3OGNhOS5iaW5kUG9wdXAocG9wdXBfNDNlZDZiYmIwYzIyNDdjN2FmYjk2MGZkYjA1YWVmZWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0ZTBiMjlhZDQ5ODQ1MWJhODZlZjFkM2ZmYmJlMGU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMy41ODcyMzAwMDAwMDAwMDA0LCAxMTUuNjY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTQwODEyYThhOTMxNDQ0NzkzMDI2OGU2NWNkNzU5ZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjI2ZDg1OGMwYWNmNDQ0NThlYWFhMGI3NGEzNjM1NDYgPSAkKGA8ZGl2IGlkPSJodG1sXzIyNmQ4NThjMGFjZjQ0NDU4ZWFhYTBiNzRhMzYzNTQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FiYTEyNjUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2EnYmFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0MDgxMmE4YTkzMTQ0NDc5MzAyNjhlNjVjZDc1OWUxLnNldENvbnRlbnQoaHRtbF8yMjZkODU4YzBhY2Y0NDQ1OGVhYWEwYjc0YTM2MzU0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNGUwYjI5YWQ0OTg0NTFiYTg2ZWYxZDNmZmJiZTBlNC5iaW5kUG9wdXAocG9wdXBfNTQwODEyYThhOTMxNDQ0NzkzMDI2OGU2NWNkNzU5ZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2MzgwMDkwMjU4NDQ3YWFiZDJmZmQ4YmQ4MmNhYTAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuODk3MDgsIDEwNy4xMDYwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1NGM4MWRhMTNkODQxODA5MTg3NmE5Mzk1YjBhNDI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1ZDcyOTBmOGQ5MzQ5OWY4ZmY2MDk4OTdjZDljMTBmID0gJChgPGRpdiBpZD0iaHRtbF82NWQ3MjkwZjhkOTM0OTlmOGZmNjA5ODk3Y2Q5YzEwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N1bmQxMjUyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlN1bmRhbmVzZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NTRjODFkYTEzZDg0MTgwOTE4NzZhOTM5NWIwYTQyOC5zZXRDb250ZW50KGh0bWxfNjVkNzI5MGY4ZDkzNDk5ZjhmZjYwOTg5N2NkOWMxMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDYzODAwOTAyNTg0NDdhYWJkMmZmZDhiZDgyY2FhMDIuYmluZFBvcHVwKHBvcHVwXzk1NGM4MWRhMTNkODQxODA5MTg3NmE5Mzk1YjBhNDI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZmM5NzhlNGU2OTY0NzA2YThkZmVlOWYwMjlhM2RkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjU3MjMwNywgMTEwLjg4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2OGQ0NDM4ZjY4NjRkMTBhYWMyMmNjNTVjYTEyOWVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1MzZiMzBjZDgzNDRkMmRiMjI3ZTI4ODNiZDg0MmZmID0gJChgPGRpdiBpZD0iaHRtbF8xNTM2YjMwY2Q4MzQ0ZDJkYjIyN2UyODgzYmQ4NDJmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2phdmExMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkphdmFuZXNlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2OGQ0NDM4ZjY4NjRkMTBhYWMyMmNjNTVjYTEyOWVmLnNldENvbnRlbnQoaHRtbF8xNTM2YjMwY2Q4MzQ0ZDJkYjIyN2UyODgzYmQ4NDJmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZmM5NzhlNGU2OTY0NzA2YThkZmVlOWYwMjlhM2RkNi5iaW5kUG9wdXAocG9wdXBfMDY4ZDQ0MzhmNjg2NGQxMGFhYzIyY2M1NWNhMTI5ZWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y1NmQ4OTgxZTQyMDRiY2M5MGJlZjlhODMzYjNlMDllID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuMDYsIDEyMS43NDcwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0OWViOWYyMzY2YTRiNDk5NGRiOGRhM2NkNGMxMDE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5N2MxN2I0OTgwZDRlNjBhNTU0NzRlY2U2OTdmMDQ3ID0gJChgPGRpdiBpZD0iaHRtbF82OTdjMTdiNDk4MGQ0ZTYwYTU1NDc0ZWNlNjk3ZjA0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RhZ2ExMjcwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRhZ2Fsb2c8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQ5ZWI5ZjIzNjZhNGI0OTk0ZGI4ZGEzY2Q0YzEwMTkuc2V0Q29udGVudChodG1sXzY5N2MxN2I0OTgwZDRlNjBhNTU0NzRlY2U2OTdmMDQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y1NmQ4OTgxZTQyMDRiY2M5MGJlZjlhODMzYjNlMDllLmJpbmRQb3B1cChwb3B1cF9mNDllYjlmMjM2NmE0YjQ5OTRkYjhkYTNjZDRjMTAxOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDJjZDYwOTdlMmIxNDYzMWFhODM3ZmYyZTIzNjI5ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMy40MzgwMTEsIDE0NC43NDQ3Mzk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzNjc4ZGRmMGRlZTQ2NjM5MDAzYTJlNGU1MGQ1NWM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU1ZDYyOTgyMWY5ZjQ4MzA4ZGQxY2VjOWRlZTA2ZTk5ID0gJChgPGRpdiBpZD0iaHRtbF81NWQ2Mjk4MjFmOWY0ODMwOGRkMWNlYzlkZWUwNmU5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2NoYW0xMzEyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkNoYW1vcnJvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MzNjc4ZGRmMGRlZTQ2NjM5MDAzYTJlNGU1MGQ1NWM3LnNldENvbnRlbnQoaHRtbF81NWQ2Mjk4MjFmOWY0ODMwOGRkMWNlYzlkZWUwNmU5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMmNkNjA5N2UyYjE0NjMxYWE4MzdmZjJlMjM2MjlkYy5iaW5kUG9wdXAocG9wdXBfYzM2NzhkZGYwZGVlNDY2MzkwMDNhMmU0ZTUwZDU1YzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkYTdhOTM0NmUzOTQ5MDQ4M2E3Nzk4MmY4ZGE3OGM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjYzMDEsIDE2Ni41OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiMWY3MDVmYTZiMDQzMmQ5ZDZhMDE3ZjkyMWZhN2MwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlZGI2Yjc4NjA0MDRlODNhN2VhZGNkZWVkMDJkYTgwID0gJChgPGRpdiBpZD0iaHRtbF80ZWRiNmI3ODYwNDA0ZTgzYTdlYWRjZGVlZDAyZGE4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2lhYWkxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPklhYWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmIxZjcwNWZhNmIwNDMyZDlkNmEwMTdmOTIxZmE3YzAuc2V0Q29udGVudChodG1sXzRlZGI2Yjc4NjA0MDRlODNhN2VhZGNkZWVkMDJkYTgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkYTdhOTM0NmUzOTQ5MDQ4M2E3Nzk4MmY4ZGE3OGM1LmJpbmRQb3B1cChwb3B1cF8yYjFmNzA1ZmE2YjA0MzJkOWQ2YTAxN2Y5MjFmYTdjMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGJkOTZiN2I1YmQ1NDI4NDkyZDhjMGUyMGQwZDBmMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4zOTM5NCwgMTQ2LjI5Mzk5OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTY5NDY0NDYxMmMwNGE1OGIwMzVmYjU3YmYwMTdiZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODE5MDAyNTE4NzI2NGI5YzkxZDQwODAwNDE3YmVjNTIgPSAkKGA8ZGl2IGlkPSJodG1sXzgxOTAwMjUxODcyNjRiOWM5MWQ0MDgwMDQxN2JlYzUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR6ZTEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR6ZXJhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2OTQ2NDQ2MTJjMDRhNThiMDM1ZmI1N2JmMDE3YmUwLnNldENvbnRlbnQoaHRtbF84MTkwMDI1MTg3MjY0YjljOTFkNDA4MDA0MTdiZWM1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYmQ5NmI3YjViZDU0Mjg0OTJkOGMwZTIwZDBkMGYzMC5iaW5kUG9wdXAocG9wdXBfMTY5NDY0NDYxMmMwNGE1OGIwMzVmYjU3YmYwMTdiZTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2ZTA1MDU4NGE1ODRmNDU5MmE4NjI4Zjk0ZjM1MmFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTM4LjI4ODEsIDE3Ni41NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MWZjNDg5NGNmNDQ0YmIwYmIzYWQxOWZhYzE1MDc5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNmJiYTY0MjcwYWY0NGY4OGUzMWY5NTQyMTc1OGFjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjZiYmE2NDI3MGFmNDRmODhlMzFmOTU0MjE3NThhYzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYW9yMTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYW9yaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MWZjNDg5NGNmNDQ0YmIwYmIzYWQxOWZhYzE1MDc5YS5zZXRDb250ZW50KGh0bWxfZjZiYmE2NDI3MGFmNDRmODhlMzFmOTU0MjE3NThhYzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDZlMDUwNTg0YTU4NGY0NTkyYTg2MjhmOTRmMzUyYWMuYmluZFBvcHVwKHBvcHVwXzYxZmM0ODk0Y2Y0NDRiYjBiYjNhZDE5ZmFjMTUwNzlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MTkwZDJjOTJiMjg0ODkzODlhOWY1MWZjYmQ1NWQxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE5LjYyOTcsIC0xNTUuNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZmZhMjYxZTZjNmE0MGY0OWNhZTFiNGFlNGMxYjliOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZTM1NGRjYzQwNzg0MTg4YTg3NzU5ZjllNTc1YzE5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWUzNTRkY2M0MDc4NDE4OGE4Nzc1OWY5ZTU3NWMxOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYXdhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYXdhaWlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZmZhMjYxZTZjNmE0MGY0OWNhZTFiNGFlNGMxYjliOC5zZXRDb250ZW50KGh0bWxfOWUzNTRkY2M0MDc4NDE4OGE4Nzc1OWY5ZTU3NWMxOTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjE5MGQyYzkyYjI4NDg5Mzg5YTlmNTFmY2JkNTVkMWYuYmluZFBvcHVwKHBvcHVwXzBmZmEyNjFlNmM2YTQwZjQ5Y2FlMWI0YWU0YzFiOWI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YWQ1MDJjZjcwYzY0ZWE5ODRiMTk1YTFmMjhkMTYyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yNy4xMTUyLCAxMzQuODM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGFlMDM0YmI0ZDMwNGRmZDg2Yjc3NzQ0NjM1MTI5YzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzFmMTk2ODY4MmVhNDE3MGJkMmZjMTIzZmI4MzA0NGYgPSAkKGA8ZGl2IGlkPSJodG1sXzMxZjE5Njg2ODJlYTQxNzBiZDJmYzEyM2ZiODMwNDRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYW50YTEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QW50YWthcmlueWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGFlMDM0YmI0ZDMwNGRmZDg2Yjc3NzQ0NjM1MTI5Yzcuc2V0Q29udGVudChodG1sXzMxZjE5Njg2ODJlYTQxNzBiZDJmYzEyM2ZiODMwNDRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZhZDUwMmNmNzBjNjRlYTk4NGIxOTVhMWYyOGQxNjIyLmJpbmRQb3B1cChwb3B1cF80YWUwMzRiYjRkMzA0ZGZkODZiNzc3NDQ2MzUxMjljNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2RmNmI5MmMxOGEwNGE4Nzk0ZGUzNzg2OGMxMzc1NTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuNjI3MSwgMTIxLjM5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxNmNjZjMyNjdiOTQ5M2E5NmUwMTAzMGJmMTM5NWIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxMjJlZTEyNWY3YjRhZmI4MGI3NjliNmY2ZjI1ZDYxID0gJChgPGRpdiBpZD0iaHRtbF9lMTIyZWUxMjVmN2I0YWZiODBiNzY5YjZmNmYyNWQ2MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL255YW4xMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk55YW5ndW1hcnRhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxNmNjZjMyNjdiOTQ5M2E5NmUwMTAzMGJmMTM5NWIwLnNldENvbnRlbnQoaHRtbF9lMTIyZWUxMjVmN2I0YWZiODBiNzY5YjZmNmYyNWQ2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZGY2YjkyYzE4YTA0YTg3OTRkZTM3ODY4YzEzNzU1My5iaW5kUG9wdXAocG9wdXBfMDE2Y2NmMzI2N2I5NDkzYTk2ZTAxMDMwYmYxMzk1YjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlYzYyOGM1NzQwNzRmZDFiMjY5YjgzZTAyMjQ1MTM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTE2LjY4MDcsIDE0My41M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgzNmExZDE5ZDc5NzQ1NTI4MGQ1ZDdhNjdkZDMxNWNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxMDg4ZTllMjAwODQ4NWU4MmNiYjg0NDY0YTZjODY5ID0gJChgPGRpdiBpZD0iaHRtbF9lMTA4OGU5ZTIwMDg0ODVlODJjYmI4NDQ2NGE2Yzg2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2t1bmoxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkt1bmplbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MzZhMWQxOWQ3OTc0NTUyODBkNWQ3YTY3ZGQzMTVjYy5zZXRDb250ZW50KGh0bWxfZTEwODhlOWUyMDA4NDg1ZTgyY2JiODQ0NjRhNmM4NjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGVjNjI4YzU3NDA3NGZkMWIyNjliODNlMDIyNDUxMzYuYmluZFBvcHVwKHBvcHVwXzgzNmExZDE5ZDc5NzQ1NTI4MGQ1ZDdhNjdkZDMxNWNjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZTczYTgwMDBjYTA0ZTNkYjY1ZGU5NjdmYmE0ZmU1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMy42NzU0LCAxMzAuMTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjA3NzQ3MWE2Y2E0NDYxYTg4ZGIyYjYyZjI2NGFkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNWQ5NTY4MDhkOTU0ZDc0YTc2MGY3Y2I3NjcxN2M2MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjVkOTU2ODA4ZDk1NGQ3NGE3NjBmN2NiNzY3MTdjNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXJhMTM4NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXJhbnVuZ2d1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyMDc3NDcxYTZjYTQ0NjFhODhkYjJiNjJmMjY0YWRmLnNldENvbnRlbnQoaHRtbF8yNWQ5NTY4MDhkOTU0ZDc0YTc2MGY3Y2I3NjcxN2M2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZTczYTgwMDBjYTA0ZTNkYjY1ZGU5NjdmYmE0ZmU1ZS5iaW5kUG9wdXAocG9wdXBfMzIwNzc0NzFhNmNhNDQ2MWE4OGRiMmI2MmYyNjRhZGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkN2QxYzIyZGRhYjQ0ZWY4NjgyZTAwMDQ0MGYwMGJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjgzOTMsIDEzMy4xODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTBlMGNhNTUxMWE0Mjg4ODBmNzg4ZWQ2MjQ4Y2VjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNzE0NTkzNWY4ODU0OTU2ODRhMDU2YjNhNDY1YTM2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzcxNDU5MzVmODg1NDk1Njg0YTA1NmIzYTQ2NWEzNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXVuMTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXduZzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTBlMGNhNTUxMWE0Mjg4ODBmNzg4ZWQ2MjQ4Y2VjNy5zZXRDb250ZW50KGh0bWxfMzcxNDU5MzVmODg1NDk1Njg0YTA1NmIzYTQ2NWEzNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmQ3ZDFjMjJkZGFiNDRlZjg2ODJlMDAwNDQwZjAwYmYuYmluZFBvcHVwKHBvcHVwXzk5MGUwY2E1NTExYTQyODg4MGY3ODhlZDYyNDhjZWM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTY4NjRhZmJiNTc0ZjEwYmIzMjU3OWM3NmE5NDE3ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNC4yNjIzLCAxMzUuNzUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2VhNTIyOGE2NzdiNGY1NmExZGVkYThmNmY1ZWYwYTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmY3ZGNiNWQ1YTAzNDczY2IwYzg2MDJiZTY4YTVhYzAgPSAkKGA8ZGl2IGlkPSJodG1sX2ZmN2RjYjVkNWEwMzQ3M2NiMGM4NjAyYmU2OGE1YWMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVuZzEyOTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V3VidXk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VhNTIyOGE2NzdiNGY1NmExZGVkYThmNmY1ZWYwYTYuc2V0Q29udGVudChodG1sX2ZmN2RjYjVkNWEwMzQ3M2NiMGM4NjAyYmU2OGE1YWMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNhNjg2NGFmYmI1NzRmMTBiYjMyNTc5Yzc2YTk0MTdkLmJpbmRQb3B1cChwb3B1cF9jZWE1MjI4YTY3N2I0ZjU2YTFkZWRhOGY2ZjVlZjBhNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTAyNzgwNzU4ZGJmNGZkOGI1NTY0NTBlMmQ4YzY0ZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTUuNTQ1OCwgMTM0LjI4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczNTE3MWFjZWNmZDRkNzA4NmVkMjdiYTVhOGRiMmEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5M2VhMDhmZWMzOTQwNzQ5OTUyMTFkZDU0NzgyMDQ0ID0gJChgPGRpdiBpZD0iaHRtbF9mOTNlYTA4ZmVjMzk0MDc0OTk1MjExZGQ1NDc4MjA0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FsYXcxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFsYXdhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczNTE3MWFjZWNmZDRkNzA4NmVkMjdiYTVhOGRiMmEzLnNldENvbnRlbnQoaHRtbF9mOTNlYTA4ZmVjMzk0MDc0OTk1MjExZGQ1NDc4MjA0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMDI3ODA3NThkYmY0ZmQ4YjU1NjQ1MGUyZDhjNjRlNC5iaW5kUG9wdXAocG9wdXBfNzM1MTcxYWNlY2ZkNGQ3MDg2ZWQyN2JhNWE4ZGIyYTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2MzlhOWVmMDg2ZjRiYTg5ZmQ5M2E4MjZkNGVhZWZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEzLjk4MDUxLCAxNDEuODE2MTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MzAxYjhjZmJjOTk0NmQxYjIyYjdhYWZmNjVkYTZiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ODI0MjQ3NzMzYTk0YjEzODhlOTMyMTcxYzUyNzQxZCA9ICQoYDxkaXYgaWQ9Imh0bWxfODgyNDI0NzczM2E5NGIxMzg4ZTkzMjE3MWM1Mjc0MWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93aWttMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XaWstTXVuZ2thbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzAxYjhjZmJjOTk0NmQxYjIyYjdhYWZmNjVkYTZiNC5zZXRDb250ZW50KGh0bWxfODgyNDI0NzczM2E5NGIxMzg4ZTkzMjE3MWM1Mjc0MWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjYzOWE5ZWYwODZmNGJhODlmZDkzYTgyNmQ0ZWFlZmMuYmluZFBvcHVwKHBvcHVwXzUzMDFiOGNmYmM5OTQ2ZDFiMjJiN2FhZmY2NWRhNmI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MDQ2NmMzYjA3MzY0Mzg0OTgzZmUzZDA5ODgzMGJlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjYwMTMsIDE0MC41MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZGE1OTg4ZmNlNjE0MzRkYWUwOWM1Y2ZhNDM3ZDE1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNTliZDc3NTE2NGE0OGMwODVlYTQzOGNjMjhjMGFhYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDU5YmQ3NzUxNjRhNDhjMDg1ZWE0MzhjYzI4YzBhYWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTYzMiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TZW50YW5pPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkYTU5ODhmY2U2MTQzNGRhZTA5YzVjZmE0MzdkMTU3LnNldENvbnRlbnQoaHRtbF8wNTliZDc3NTE2NGE0OGMwODVlYTQzOGNjMjhjMGFhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MDQ2NmMzYjA3MzY0Mzg0OTgzZmUzZDA5ODgzMGJlNi5iaW5kUG9wdXAocG9wdXBfMmRhNTk4OGZjZTYxNDM0ZGFlMDljNWNmYTQzN2QxNTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5Y2E3ZmEyN2Q1YTRkZDg5M2MxNWY2YzkxMjU3NmY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTQuMDg3MjEsIDE0Mi42NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZWJlYzk2YzM4ZTQ0Y2VhYWI5ZTA0MThkZTBlZjEyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xM2EyZmI2NDljOTM0ZTEzYmI5MGQxMDUxNzM5NDRiMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTNhMmZiNjQ5YzkzNGUxM2JiOTBkMTA1MTczOTQ0YjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rd29tMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ld29tYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZWJlYzk2YzM4ZTQ0Y2VhYWI5ZTA0MThkZTBlZjEyNS5zZXRDb250ZW50KGh0bWxfMTNhMmZiNjQ5YzkzNGUxM2JiOTBkMTA1MTczOTQ0YjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzljYTdmYTI3ZDVhNGRkODkzYzE1ZjZjOTEyNTc2ZjUuYmluZFBvcHVwKHBvcHVwXzFlYmVjOTZjMzhlNDRjZWFhYjllMDQxOGRlMGVmMTI1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MmFjN2E1NTVlOWI0MDI1OWZhMGZmYTlmMTk1ZmU3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01LjU3OTYxOTk5OTk5OTk5OSwgMTM5LjIzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzExNjRmYzYzN2IzZDQyOWFiMGUwZjc4MzMxY2QzM2Q1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhZGRhYTkxZWVlMjQ0NThiMzg0ZGE2ZjExNjUxODI4ID0gJChgPGRpdiBpZD0iaHRtbF8wYWRkYWE5MWVlZTI0NDU4YjM4NGRhNmYxMTY1MTgyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RhbW4xMjM1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRhbW5pbSBDaXRhazwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTY0ZmM2MzdiM2Q0MjlhYjBlMGY3ODMzMWNkMzNkNS5zZXRDb250ZW50KGh0bWxfMGFkZGFhOTFlZWUyNDQ1OGIzODRkYTZmMTE2NTE4MjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTJhYzdhNTU1ZTliNDAyNTlmYTBmZmE5ZjE5NWZlN2EuYmluZFBvcHVwKHBvcHVwXzExNjRmYzYzN2IzZDQyOWFiMGUwZjc4MzMxY2QzM2Q1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZDEyYmYzOGVhN2E0YTY3OGViY2Q5YWI4OTU1YWViZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy04LjA5MzcxLCAxNDYuOTA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGQ0YjI5NTNhODVlNDEwMTk1NTg3NGVlMmY5Nzk5ZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBhMzYxMjlkYzZkNDU2N2I3ZmVkNDVhM2YzZThkYTYgPSAkKGA8ZGl2IGlkPSJodG1sX2UwYTM2MTI5ZGM2ZDQ1NjdiN2ZlZDQ1YTNmM2U4ZGE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva3VuaTEyNjciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S3VuaW1haXBhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkNGIyOTUzYTg1ZTQxMDE5NTU4NzRlZTJmOTc5OWZkLnNldENvbnRlbnQoaHRtbF9lMGEzNjEyOWRjNmQ0NTY3YjdmZWQ0NWEzZjNlOGRhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZDEyYmYzOGVhN2E0YTY3OGViY2Q5YWI4OTU1YWViZi5iaW5kUG9wdXAocG9wdXBfZGQ0YjI5NTNhODVlNDEwMTk1NTg3NGVlMmY5Nzk5ZmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y0OTg2NTI2MTM1NjQ4ZGM5ZGNkMzcxYzQ5MzllNTVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMDM1MzIsIDE0Ny4yMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzM2Y2NjOGJlYTU0NjNkOGRmNWM5NzgyNDM2MWM5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTRiYzQ4MzFjY2I0YWQ5ODQzNzljYWMyMzZjYTBlYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzE0YmM0ODMxY2NiNGFkOTg0Mzc5Y2FjMjM2Y2EwZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zZWxlMTI1MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TZWxlcGV0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzMzZjY2M4YmVhNTQ2M2Q4ZGY1Yzk3ODI0MzYxYzk1LnNldENvbnRlbnQoaHRtbF83MTRiYzQ4MzFjY2I0YWQ5ODQzNzljYWMyMzZjYTBlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNDk4NjUyNjEzNTY0OGRjOWRjZDM3MWM0OTM5ZTU1Zi5iaW5kUG9wdXAocG9wdXBfOTMzNmNjYzhiZWE1NDYzZDhkZjVjOTc4MjQzNjFjOTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1NDU2NmI3ODBkZjQzYWU5ZDI3NDBiN2Y3N2NlOWNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuNDYwMjIsIDE1NS42MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YTM3MWEwMDZhYmU0ZjdhYTM2ZDY5Y2VhMzJkOWM1NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNTU1ODU5MTFlYjA0Yzg5YTRjYTY4MTg1YTAwNDVjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDU1NTg1OTExZWIwNGM4OWE0Y2E2ODE4NWEwMDQ1YzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uYWFzMTI0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OYWFzaW9pPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhMzcxYTAwNmFiZTRmN2FhMzZkNjljZWEzMmQ5YzU0LnNldENvbnRlbnQoaHRtbF8wNTU1ODU5MTFlYjA0Yzg5YTRjYTY4MTg1YTAwNDVjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNTQ1NjZiNzgwZGY0M2FlOWQyNzQwYjdmNzdjZTljYS5iaW5kUG9wdXAocG9wdXBfNGEzNzFhMDA2YWJlNGY3YWEzNmQ2OWNlYTMyZDljNTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4MzJkMGU3Y2ZjYjQ0Yzg5MTY4NjEzOTEzMWRmNmJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMTIyOCwgLTE3NC4yOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0ZDZlZGRkNWI4NTQyMWE4MTIzNTYzMzRkMjA2M2YxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhZmFmY2Y3ODIyOTQ4MzRiZDZhNWM1YWQ1YTI2MjgyID0gJChgPGRpdiBpZD0iaHRtbF8wYWZhZmNmNzgyMjk0ODM0YmQ2YTVjNWFkNWEyNjI4MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FsZXUxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFsZXV0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0ZDZlZGRkNWI4NTQyMWE4MTIzNTYzMzRkMjA2M2YxLnNldENvbnRlbnQoaHRtbF8wYWZhZmNmNzgyMjk0ODM0YmQ2YTVjNWFkNWEyNjI4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zODMyZDBlN2NmY2I0NGM4OTE2ODYxMzkxMzFkZjZiYy5iaW5kUG9wdXAocG9wdXBfYjRkNmVkZGQ1Yjg1NDIxYTgxMjM1NjMzNGQyMDYzZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyMjU2ZjAwNDE5YTQ5N2FiZGQwMjI4ODhmN2VlMTJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjkuMzc2MSwgLTUyLjg2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljYjcxM2E2OTIxNjQ4MzFiMGVhOGQ3ODNmNjJlOTA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2NGYwZjFmNDc0YTRhMDQ5NTQzZTQ5YWNhZDhjOTY0ID0gJChgPGRpdiBpZD0iaHRtbF8yNjRmMGYxZjQ3NGE0YTA0OTU0M2U0OWFjYWQ4Yzk2NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thbGExMzk5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthbGFhbGxpc3V0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljYjcxM2E2OTIxNjQ4MzFiMGVhOGQ3ODNmNjJlOTA4LnNldENvbnRlbnQoaHRtbF8yNjRmMGYxZjQ3NGE0YTA0OTU0M2U0OWFjYWQ4Yzk2NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MjI1NmYwMDQxOWE0OTdhYmRkMDIyODg4ZjdlZTEyZC5iaW5kUG9wdXAocG9wdXBfOWNiNzEzYTY5MjE2NDgzMWIwZWE4ZDc4M2Y2MmU5MDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhMzU4ZGM2YmI2YjQ3NDViZTc0MjZkODY1NjcwODRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuOTE5MiwgLTEyNC4xXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjM0NGQ0YjZhMGZhNGM1M2FhYWM1NTI5OTEzNWUwN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTdiZmY1YjcxN2Q0NDM3MWFhN2MwZDVmMjQxYzU3MTkgPSAkKGA8ZGl2IGlkPSJodG1sX2U3YmZmNWI3MTdkNDQzNzFhYTdjMGQ1ZjI0MWM1NzE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdG9sbzEyNTkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VG9sb3dhLUNoZXRjbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMzQ0ZDRiNmEwZmE0YzUzYWFhYzU1Mjk5MTM1ZTA3Yy5zZXRDb250ZW50KGh0bWxfZTdiZmY1YjcxN2Q0NDM3MWFhN2MwZDVmMjQxYzU3MTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGEzNThkYzZiYjZiNDc0NWJlNzQyNmQ4NjU2NzA4NGUuYmluZFBvcHVwKHBvcHVwX2YzNDRkNGI2YTBmYTRjNTNhYWFjNTUyOTkxMzVlMDdjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZjRjNmRhMGU0MGE0NWE1ODA0NGM3MWZiNDJlNzhlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjA5ODIsIC0xMjMuNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Y2UzNDI3Y2FmZDI0NzhkYTdkMDEyMzkzMzhmMmMzNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMmQyMGRlZmM5NjU0YjNhYTQwODkyMzU1YWI2MjNhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzJkMjBkZWZjOTY1NGIzYWE0MDg5MjM1NWFiNjIzYTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9odXBhMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IdXBhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljZTM0MjdjYWZkMjQ3OGRhN2QwMTIzOTMzOGYyYzM2LnNldENvbnRlbnQoaHRtbF9jMmQyMGRlZmM5NjU0YjNhYTQwODkyMzU1YWI2MjNhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZjRjNmRhMGU0MGE0NWE1ODA0NGM3MWZiNDJlNzhlOC5iaW5kUG9wdXAocG9wdXBfOWNlMzQyN2NhZmQyNDc4ZGE3ZDAxMjM5MzM4ZjJjMzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3ODI4MzViOTAxZjRhNjU5MDdkODlmYzlhZjZiNGZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuMDA0NTMyLCAtMTMyLjA3OTI1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhYjk3ZDZjNmYxZDRlMDRhODVkODFlMDg1NDkzYTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxNjM1YzhiODk2MTQxNDU4YTRiNDQ2NDEyZjhkMDU1ID0gJChgPGRpdiBpZD0iaHRtbF8zMTYzNWM4Yjg5NjE0MTQ1OGE0YjQ0NjQxMmY4ZDA1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25vcnQyOTM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcnRoZXJuIEhhaWRhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhYjk3ZDZjNmYxZDRlMDRhODVkODFlMDg1NDkzYTUzLnNldENvbnRlbnQoaHRtbF8zMTYzNWM4Yjg5NjE0MTQ1OGE0YjQ0NjQxMmY4ZDA1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NzgyODM1YjkwMWY0YTY1OTA3ZDg5ZmM5YWY2YjRmZi5iaW5kUG9wdXAocG9wdXBfYWFiOTdkNmM2ZjFkNGUwNGE4NWQ4MWUwODU0OTNhNTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3ODRiYjZlNzVjNTRiYWRhMzY3YjJlMjRhZjgyMmQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuMzIzMSwgLTEyMy4wMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjk4ZGMyODI0MDE0NzI0ODFhNjViYmU1ZDZjZTMyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYTk5OGQ5YzNiMGI0MWQwODJlMDk1ZGEwY2VkNTYxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMGE5OThkOWMzYjBiNDFkMDgyZTA5NWRhMGNlZDU2MTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zcXVhMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TcXVhbWlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjk4ZGMyODI0MDE0NzI0ODFhNjViYmU1ZDZjZTMyMS5zZXRDb250ZW50KGh0bWxfMGE5OThkOWMzYjBiNDFkMDgyZTA5NWRhMGNlZDU2MTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjc4NGJiNmU3NWM1NGJhZGEzNjdiMmUyNGFmODIyZDQuYmluZFBvcHVwKHBvcHVwXzEyOThkYzI4MjQwMTQ3MjQ4MWE2NWJiZTVkNmNlMzIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTBjNjhmMTMxMmI0ZjgxYjk2ZDZlMzI5YzA1M2Q5NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ5LjY3LCAtMTI2LjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDRkYzE1YTUxZGI5NGQxYTk0YjYyMjk0OTk5NjMwNzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWVkZDU0MmVlMzVkNGI2MDlmZTRhZGM4NWU1OGQ3NTMgPSAkKGA8ZGl2IGlkPSJodG1sXzFlZGQ1NDJlZTM1ZDRiNjA5ZmU0YWRjODVlNThkNzUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnV1YzEyMzYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TnV1LWNoYWgtbnVsdGg8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDRkYzE1YTUxZGI5NGQxYTk0YjYyMjk0OTk5NjMwNzIuc2V0Q29udGVudChodG1sXzFlZGQ1NDJlZTM1ZDRiNjA5ZmU0YWRjODVlNThkNzUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlMGM2OGYxMzEyYjRmODFiOTZkNmUzMjljMDUzZDk3LmJpbmRQb3B1cChwb3B1cF8wNGRjMTVhNTFkYjk0ZDFhOTRiNjIyOTQ5OTk2MzA3MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTY4OTMxM2I1NjM3NDE3MDhlMDc3ZmY4NDQ4ZjViNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC45MjY5LCAtMTI3LjMwNzk5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjk5MTE2NzUzODA1NGM5Yzg4NTZkMjFiZDU5MzEwOGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2E3YmQ0MWZmNWNiNDY4YmFhNWVjMGRmYzE3MzAzOWIgPSAkKGA8ZGl2IGlkPSJodG1sXzdhN2JkNDFmZjVjYjQ2OGJhYTVlYzBkZmMxNzMwMzliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva3dhazEyNjkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S3dhayd3YWxhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5OTExNjc1MzgwNTRjOWM4ODU2ZDIxYmQ1OTMxMDhmLnNldENvbnRlbnQoaHRtbF83YTdiZDQxZmY1Y2I0NjhiYWE1ZWMwZGZjMTczMDM5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNjg5MzEzYjU2Mzc0MTcwOGUwNzdmZjg0NDhmNWI2OS5iaW5kUG9wdXAocG9wdXBfMjk5MTE2NzUzODA1NGM5Yzg4NTZkMjFiZDU5MzEwOGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk2MjIyNzM4Njc4MzQ3MmY4M2RiMjllNzA5ZTUwMmJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDExMiwgLTc5Ljc1MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDAzNmIwZDM4ZjM0NjZlOGU5OTVkNjNjYTQ1MDM4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NTk4ZmQ4NmExMjU0ZTA0YWE0MGEzNTI2MWI0ZTY4NyA9ICQoYDxkaXYgaWQ9Imh0bWxfODU5OGZkODZhMTI1NGUwNGFhNDBhMzUyNjFiNGU2ODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9lYXN0MjU0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5FYXN0ZXJuIE9qaWJ3YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDAzNmIwZDM4ZjM0NjZlOGU5OTVkNjNjYTQ1MDM4Zi5zZXRDb250ZW50KGh0bWxfODU5OGZkODZhMTI1NGUwNGFhNDBhMzUyNjFiNGU2ODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTYyMjI3Mzg2NzgzNDcyZjgzZGIyOWU3MDllNTAyYmMuYmluZFBvcHVwKHBvcHVwXzRkMDM2YjBkMzhmMzQ2NmU4ZTk5NWQ2M2NhNDUwMzhmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YmM2NjJiYWFmZDU0NGU5OWVkZTVjNjY1OTFiZGE5ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAyNjQsIC05OC4zMjAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2IxZTcyY2Q2N2QxNDRjYzkzZGRmMzIyMDY2NDFmMTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM1YTI4ZDA5YWNhNGE1Yjk0YjkxOTY4Y2YzYWUzZTYgPSAkKGA8ZGl2IGlkPSJodG1sX2IzNWEyOGQwOWFjYTRhNWI5NGI5MTk2OGNmM2FlM2U2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdW5hbTEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VW5hbWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2IxZTcyY2Q2N2QxNDRjYzkzZGRmMzIyMDY2NDFmMTEuc2V0Q29udGVudChodG1sX2IzNWEyOGQwOWFjYTRhNWI5NGI5MTk2OGNmM2FlM2U2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZiYzY2MmJhYWZkNTQ0ZTk5ZWRlNWM2NjU5MWJkYTllLmJpbmRQb3B1cChwb3B1cF9jYjFlNzJjZDY3ZDE0NGNjOTNkZGYzMjIwNjY0MWYxMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmY1Y2JlNTMxNmVhNDFmYmE5MzIzYTdhYjZmNDYzNTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4wNjY1LCAtOTguMTgzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhNzM1M2Y3MDYzNjRiNGNhN2VkZDI3YmQ0ZDU0OGQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlODMwMTE1YmZkNjRlM2NhMDJkMTdhYjJiZmNlMmZlID0gJChgPGRpdiBpZD0iaHRtbF83ZTgzMDExNWJmZDY0ZTNjYTAyZDE3YWIyYmZjZTJmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dpY2gxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldpY2hpdGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGE3MzUzZjcwNjM2NGI0Y2E3ZWRkMjdiZDRkNTQ4ZDQuc2V0Q29udGVudChodG1sXzdlODMwMTE1YmZkNjRlM2NhMDJkMTdhYjJiZmNlMmZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZmNWNiZTUzMTZlYTQxZmJhOTMyM2E3YWI2ZjQ2MzUwLmJpbmRQb3B1cChwb3B1cF9kYTczNTNmNzA2MzY0YjRjYTdlZGQyN2JkNGQ1NDhkNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjdkMWI1YWVkMjRhNGNlZDg3ODlmMzU0NGNhMGE3MTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjVjOGFmZjgzNjgzNDk3ZGE0OGZjMDRmODhhYzNhNDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGQ2ZGU0OTliNDM4NDkxYzkwNjY2ZmNkNDA2MGY0ZTUgPSAkKGA8ZGl2IGlkPSJodG1sXzhkNmRlNDk5YjQzODQ5MWM5MDY2NmZjZDQwNjBmNGU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrbzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrb3RhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1YzhhZmY4MzY4MzQ5N2RhNDhmYzA0Zjg4YWMzYTQxLnNldENvbnRlbnQoaHRtbF84ZDZkZTQ5OWI0Mzg0OTFjOTA2NjZmY2Q0MDYwZjRlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iN2QxYjVhZWQyNGE0Y2VkODc4OWYzNTQ0Y2EwYTcxMy5iaW5kUG9wdXAocG9wdXBfMjVjOGFmZjgzNjgzNDk3ZGE0OGZjMDRmODhhYzNhNDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmYTEzNDkzZTg0NTQzNGJhOTBmOTM2Zjc0MzM5YWViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNTYsIC03Ny41M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkNjdlMzAxMjUzYzRjY2FiZGM5OGY2ODA3NTBiYzM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1OGJjYmFmNjU5MTRjOTU4NzVmOWQzZjk0NmZhNWQyID0gJChgPGRpdiBpZD0iaHRtbF80NThiY2JhZjY1OTE0Yzk1ODc1ZjlkM2Y5NDZmYTVkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NlbmUxMjY0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNlbmVjYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZDY3ZTMwMTI1M2M0Y2NhYmRjOThmNjgwNzUwYmMzOC5zZXRDb250ZW50KGh0bWxfNDU4YmNiYWY2NTkxNGM5NTg3NWY5ZDNmOTQ2ZmE1ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWZhMTM0OTNlODQ1NDM0YmE5MGY5MzZmNzQzMzlhZWIuYmluZFBvcHVwKHBvcHVwXzJkNjdlMzAxMjUzYzRjY2FiZGM5OGY2ODA3NTBiYzM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjAxMTQ1ODcwMWI0M2FlYTJiNGYwZmE2MGY1NjQ5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQzODc0MiwgLTc1LjcwODEwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NjYTY4ODQ1YzIyNjQ4N2ViNmMwYTliM2M2MjYxYmUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4MWFlODFjODY5YTQzYTE4ZDc4NmFhYTkzODcwODFlID0gJChgPGRpdiBpZD0iaHRtbF8zODFhZTgxYzg2OWE0M2ExOGQ3ODZhYWE5Mzg3MDgxZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL29uZWkxMjQ5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk9uZWlkYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jY2E2ODg0NWMyMjY0ODdlYjZjMGE5YjNjNjI2MWJlMS5zZXRDb250ZW50KGh0bWxfMzgxYWU4MWM4NjlhNDNhMThkNzg2YWFhOTM4NzA4MWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmIwMTE0NTg3MDFiNDNhZWEyYjRmMGZhNjBmNTY0OWQuYmluZFBvcHVwKHBvcHVwX2NjYTY4ODQ1YzIyNjQ4N2ViNmMwYTliM2M2MjYxYmUxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMGQxMDg0YzQzNjQ0ZmM1OTVlNzNmNDU0ODQ2ZGY5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1Ljk2MTQ1OTk5OTk5OTk5NSwgLTk1LjAzOTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzA0MTIxMTQzMDQyNDJhZDg1MzlmMTgyZmU1ZTkzZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDBiZTg3YmM3YWZhNDhkNGFkOTBjYzVjNzY2MDg1MjIgPSAkKGA8ZGl2IGlkPSJodG1sX2QwYmU4N2JjN2FmYTQ4ZDRhZDkwY2M1Yzc2NjA4NTIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjaDEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjaGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzA0MTIxMTQzMDQyNDJhZDg1MzlmMTgyZmU1ZTkzZWEuc2V0Q29udGVudChodG1sX2QwYmU4N2JjN2FmYTQ4ZDRhZDkwY2M1Yzc2NjA4NTIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UwZDEwODRjNDM2NDRmYzU5NWU3M2Y0NTQ4NDZkZjk4LmJpbmRQb3B1cChwb3B1cF83MDQxMjExNDMwNDI0MmFkODUzOWYxODJmZTVlOTNlYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDQ5MjgyM2Y3ODg4NDhmOWEzNWQzMmRiZTI2ODk0NWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMC43NjczOCwgLTk0LjYyODQ4MDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjMxMzA0MmRlYzFhNGI1NWEwMWQ0OTA5NmNkZWEyNzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZlMzI1OWJhYTRkNGVmY2IxZjQ4MzUwMTY5MGQyYzggPSAkKGA8ZGl2IGlkPSJodG1sX2I2ZTMyNTliYWE0ZDRlZmNiMWY0ODM1MDE2OTBkMmM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWxhYjEyMzciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWxhYmFtYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMzEzMDQyZGVjMWE0YjU1YTAxZDQ5MDk2Y2RlYTI3OC5zZXRDb250ZW50KGh0bWxfYjZlMzI1OWJhYTRkNGVmY2IxZjQ4MzUwMTY5MGQyYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDQ5MjgyM2Y3ODg4NDhmOWEzNWQzMmRiZTI2ODk0NWIuYmluZFBvcHVwKHBvcHVwXzIzMTMwNDJkZWMxYTRiNTVhMDFkNDkwOTZjZGVhMjc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMjQ2NDU5NDJiM2E0OTA4YTI1NTE1MzdmOTBjNTMxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMwLjk4ODgsIC05Mi41NDAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTlhN2E0OGFjMzU5NDlhMTlmMmEyOGZlZjdjNjUwMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjAxYmE4MmJlYmViNDAwYWI4MTExOTY5N2MzMjM4MTQgPSAkKGA8ZGl2IGlkPSJodG1sXzIwMWJhODJiZWJlYjQwMGFiODExMTk2OTdjMzIzODE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHVuaTEyNTIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVuaWNhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5YTdhNDhhYzM1OTQ5YTE5ZjJhMjhmZWY3YzY1MDEzLnNldENvbnRlbnQoaHRtbF8yMDFiYTgyYmViZWI0MDBhYjgxMTE5Njk3YzMyMzgxNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMjQ2NDU5NDJiM2E0OTA4YTI1NTE1MzdmOTBjNTMxOC5iaW5kUG9wdXAocG9wdXBfZTlhN2E0OGFjMzU5NDlhMTlmMmEyOGZlZjdjNjUwMTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5Yzc3NGE5YTc3YzQ1MjZiOTNjNTk0ZGM1ZDRiZTE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzA3MywgLTExNi40MDc5OTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyYzMxZDg1MGExYjRlZjk5NTE3OGY5MjI5NmExOWQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyZTY2ZjI2NGZjOTRjMmY4NzczMzA2MjBkODlkYWQyID0gJChgPGRpdiBpZD0iaHRtbF83MmU2NmYyNjRmYzk0YzJmODc3MzMwNjIwZDg5ZGFkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25lenAxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5leiBQZXJjZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmMzMWQ4NTBhMWI0ZWY5OTUxNzhmOTIyOTZhMTlkNi5zZXRDb250ZW50KGh0bWxfNzJlNjZmMjY0ZmM5NGMyZjg3NzMzMDYyMGQ4OWRhZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDljNzc0YTlhNzdjNDUyNmI5M2M1OTRkYzVkNGJlMTcuYmluZFBvcHVwKHBvcHVwXzQyYzMxZDg1MGExYjRlZjk5NTE3OGY5MjI5NmExOWQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNWJkM2Q1MjY3OWY0MmMwODc0M2NlZWRhMTE1OTdhMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQxMDIsIC0xMjAuNjQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODk4ZTEzMzIzZjdiNDk5NDgxNmI5MzU0ZDVjNWEzMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2NkMTE3YjM5N2M5NDExMWI4YWU1Yjk3MzA3YmY5ZTkgPSAkKGA8ZGl2IGlkPSJodG1sXzNjZDExN2IzOTdjOTQxMTFiOGFlNWI5NzMwN2JmOWU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9ydDI5NTIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9ydGhlYXN0IE1haWR1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5OGUxMzMyM2Y3YjQ5OTQ4MTZiOTM1NGQ1YzVhMzEyLnNldENvbnRlbnQoaHRtbF8zY2QxMTdiMzk3Yzk0MTExYjhhZTViOTczMDdiZjllOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNWJkM2Q1MjY3OWY0MmMwODc0M2NlZWRhMTE1OTdhMS5iaW5kUG9wdXAocG9wdXBfODk4ZTEzMzIzZjdiNDk5NDgxNmI5MzU0ZDVjNWEzMTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3ZDVlN2RmMzdmNzQ1ZDNiNTc1MThhOWIxY2FiMjk5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTcuMjE1NywgLTkzLjMxODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDAwYjc1MmE1ODU0YjQyODY0NmVlYmZhNGRmZWRlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZWQ3NmMwMmMxYmY0NDgxYWNhMGI1ZjA1YzUwN2FhYiA9ICQoYDxkaXYgaWQ9Imh0bWxfY2VkNzZjMDJjMWJmNDQ4MWFjYTBiNWYwNWM1MDdhYWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jb3BhMTIzNiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Db3BhaW5hbMOhIFpvcXVlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ0MDBiNzUyYTU4NTRiNDI4NjQ2ZWViZmE0ZGZlZGUxLnNldENvbnRlbnQoaHRtbF9jZWQ3NmMwMmMxYmY0NDgxYWNhMGI1ZjA1YzUwN2FhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83N2Q1ZTdkZjM3Zjc0NWQzYjU3NTE4YTliMWNhYjI5OS5iaW5kUG9wdXAocG9wdXBfNDQwMGI3NTJhNTg1NGI0Mjg2NDZlZWJmYTRkZmVkZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwMDk4ZDI2MjE0NjRlZTliMTdhNjJmOGYxNzJhZmNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjAuNTY3MSwgLTk3LjI1NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTFiZGI2MTEzZjI0ODUyYmE5YmE1NWEwNGQ5YWMyYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NWU0Mjg4YmY0Nzg0OWE2YmJmZjlhOTFjM2IzNWE4NiA9ICQoYDxkaXYgaWQ9Imh0bWxfODVlNDI4OGJmNDc4NDlhNmJiZmY5YTkxYzNiMzVhODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wYXBhMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5QYXBhbnRsYSBUb3RvbmFjPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlMWJkYjYxMTNmMjQ4NTJiYTliYTU1YTA0ZDlhYzJiLnNldENvbnRlbnQoaHRtbF84NWU0Mjg4YmY0Nzg0OWE2YmJmZjlhOTFjM2IzNWE4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMDA5OGQyNjIxNDY0ZWU5YjE3YTYyZjhmMTcyYWZjYi5iaW5kUG9wdXAocG9wdXBfMmUxYmRiNjExM2YyNDg1MmJhOWJhNTVhMDRkOWFjMmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3OWI5YWU5NTg3YzQ2NDliY2RjMjE5MDgwNGE0NzVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTguMTcxMywgLTkyLjczNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZDE4ODc0MTFmOTQ0OTQyOWIyNmY5NDZjMTUwYTViNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZWRlYWI1OTMwMTk0MjQ3OWRlYmZiNmUzNjlmNTAyMSA9ICQoYDxkaXYgaWQ9Imh0bWxfOGVkZWFiNTkzMDE5NDI0NzlkZWJmYjZlMzY5ZjUwMjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90YWJhMTI2NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UYWJhc2NvIENob250YWw8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQxODg3NDExZjk0NDk0MjliMjZmOTQ2YzE1MGE1YjQuc2V0Q29udGVudChodG1sXzhlZGVhYjU5MzAxOTQyNDc5ZGViZmI2ZTM2OWY1MDIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI3OWI5YWU5NTg3YzQ2NDliY2RjMjE5MDgwNGE0NzVkLmJpbmRQb3B1cChwb3B1cF84ZDE4ODc0MTFmOTQ0OTQyOWIyNmY5NDZjMTUwYTViNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjdkZWM1MGYyOTUxNGI0NjgwMTgzMDRlZTBhNjRkZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNi42Mzg0LCAtOTIuMjc4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxY2ZkNGVkZTEyNTQ3ODY5MjY5YjUzNzM5MjNmMWEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzNGIyZDU1NTViMzQxY2RiN2JkNzQ5NDQ4NTQyMGQzID0gJChgPGRpdiBpZD0iaHRtbF9mMzRiMmQ1NTU1YjM0MWNkYjdiZDc0OTQ0ODU0MjBkMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3R6ZWwxMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR6ZWx0YWw8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzFjZmQ0ZWRlMTI1NDc4NjkyNjliNTM3MzkyM2YxYTAuc2V0Q29udGVudChodG1sX2YzNGIyZDU1NTViMzQxY2RiN2JkNzQ5NDQ4NTQyMGQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3ZGVjNTBmMjk1MTRiNDY4MDE4MzA0ZWUwYTY0ZGQ4LmJpbmRQb3B1cChwb3B1cF9jMWNmZDRlZGUxMjU0Nzg2OTI2OWI1MzczOTIzZjFhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGIyYWQ1YWQ4N2UzNDMxNGI1MTE1YzYxYzYyM2Q0MjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS4yNDY3LCAtMTAxLjYzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzExNGU1YWYwNjA2ZDQ1YzVhMWVkNjNlNGVjYWRhMTEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjMTI5MDU4MGE5NzRlMGU4ZTM3MzJhMmQzNDJlZWQ0ID0gJChgPGRpdiBpZD0iaHRtbF8wYzEyOTA1ODBhOTc0ZTBlOGUzNzMyYTJkMzQyZWVkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3B1cmUxMjQyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlB1cmVwZWNoYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTRlNWFmMDYwNmQ0NWM1YTFlZDYzZTRlY2FkYTExMC5zZXRDb250ZW50KGh0bWxfMGMxMjkwNTgwYTk3NGUwZThlMzczMmEyZDM0MmVlZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGIyYWQ1YWQ4N2UzNDMxNGI1MTE1YzYxYzYyM2Q0MjUuYmluZFBvcHVwKHBvcHVwXzExNGU1YWYwNjA2ZDQ1YzVhMWVkNjNlNGVjYWRhMTEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYzVmMDc2YWU0NGQ0M2Y2YmYyY2VlOWZjNTY0YjZmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkzNTQsIC0xMjIuNTk4OTk5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMTRlY2ZhOGEzMmM0N2YwOGJjZjYxYjEyZjFhYTJjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMjcxMTc4ZDMyMGM0YzE1OTkzMDhjYjI3MWViZTg2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjI3MTE3OGQzMjBjNGMxNTk5MzA4Y2IyNzFlYmU4NmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zb3V0Mjk4MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Tb3V0aGVhc3Rlcm4gUG9tbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTRlY2ZhOGEzMmM0N2YwOGJjZjYxYjEyZjFhYTJjOS5zZXRDb250ZW50KGh0bWxfYjI3MTE3OGQzMjBjNGMxNTk5MzA4Y2IyNzFlYmU4NmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGM1ZjA3NmFlNDRkNDNmNmJmMmNlZTlmYzU2NGI2ZmMuYmluZFBvcHVwKHBvcHVwXzAxNGVjZmE4YTMyYzQ3ZjA4YmNmNjFiMTJmMWFhMmM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZWNhOGVjMmI0OWE0NDQ0YjMxOWZhOTRlZmM1NjQ1ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjMzMDk5OTk5OTk5OTk5NiwgLTExNi42MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODA5ZjZmODcyMTU0NDA0YTMzMGIyZDU5YWQ4MTg4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ODgxNWE4ZDM5MGU0Y2VhYTdjOTI4OTBmYjc3YmRjYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzg4MTVhOGQzOTBlNGNlYWE3YzkyODkwZmI3N2JkY2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rdW1pMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UaXBhaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iODA5ZjZmODcyMTU0NDA0YTMzMGIyZDU5YWQ4MTg4Ni5zZXRDb250ZW50KGh0bWxfNzg4MTVhOGQzOTBlNGNlYWE3YzkyODkwZmI3N2JkY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWVjYThlYzJiNDlhNDQ0NGIzMTlmYTk0ZWZjNTY0NWQuYmluZFBvcHVwKHBvcHVwX2I4MDlmNmY4NzIxNTQ0MDRhMzMwYjJkNTlhZDgxODg2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZmUxMGM5M2Y4MjY0ZDk2YmYwZDM3OGM3YWViYjY1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAwNTYsIC0xMDguNzgyMDAwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMmM3YjA0M2NjNTA0MWYwYjIxNDdkYTExNjY4OTkzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YTk1YmRmZWE5MzU0ZTNiYTE2NzU3MWU2MTg5MzlhYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNGE5NWJkZmVhOTM1NGUzYmExNjc1NzFlNjE4OTM5YWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC96dW5pMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5adW5pPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyYzdiMDQzY2M1MDQxZjBiMjE0N2RhMTE2Njg5OTNkLnNldENvbnRlbnQoaHRtbF80YTk1YmRmZWE5MzU0ZTNiYTE2NzU3MWU2MTg5MzlhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZmUxMGM5M2Y4MjY0ZDk2YmYwZDM3OGM3YWViYjY1Mi5iaW5kUG9wdXAocG9wdXBfMzJjN2IwNDNjYzUwNDFmMGIyMTQ3ZGExMTY2ODk5M2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmMzhkYjM0YjlmNjQxZGNiYmViY2U5ZjM3NjdjMjZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuMzE4NCwgLTExNi45MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZjJjMzY4MDZmZWM0ODcxOWQyNGZmYTdmZmZmMjhmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDhjNTM1YWUxMzY0MTg2OTk2YWVmOGZhNDZiMWVjYSA9ICQoYDxkaXYgaWQ9Imh0bWxfODQ4YzUzNWFlMTM2NDE4Njk5NmFlZjhmYTQ2YjFlY2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sdWlzMTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MdWlzZW5vPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmMmMzNjgwNmZlYzQ4NzE5ZDI0ZmZhN2ZmZmYyOGY4LnNldENvbnRlbnQoaHRtbF84NDhjNTM1YWUxMzY0MTg2OTk2YWVmOGZhNDZiMWVjYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZjM4ZGIzNGI5ZjY0MWRjYmJlYmNlOWYzNzY3YzI2ZS5iaW5kUG9wdXAocG9wdXBfNWYyYzM2ODA2ZmVjNDg3MTlkMjRmZmE3ZmZmZjI4ZjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkY2EwMzIzZTA1NDQ5YmM4MjJjMzllNWQ0ZDMxN2UyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuNzY1MywgLTExMC41MzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjRhZDQ0NTUzNzI0YmJkYjk2NmM0MWI3OWE4Y2E5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOGEyZmM4YTMzYzQ0MWE5YjA2ZDAyOTY2NTc2ODUyNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYjhhMmZjOGEzM2M0NDFhOWIwNmQwMjk2NjU3Njg1MjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ob3BpMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ib3BpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyNGFkNDQ1NTM3MjRiYmRiOTY2YzQxYjc5YThjYTk5LnNldENvbnRlbnQoaHRtbF9iOGEyZmM4YTMzYzQ0MWE5YjA2ZDAyOTY2NTc2ODUyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZGNhMDMyM2UwNTQ0OWJjODIyYzM5ZTVkNGQzMTdlMi5iaW5kUG9wdXAocG9wdXBfMDI0YWQ0NDU1MzcyNGJiZGI5NjZjNDFiNzlhOGNhOTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxN2MxMDQ4OTc2ZDQ3ZGZhMzY1NmI0YWRjNWNjYWVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzEuNzk3MywgLTExMS45OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYjM3NWJiZDgxMTc0YjdlYTQ1ZWMzZDhjY2QwZTNjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NGNkZDI0MmQ2M2I0OTgzYTA0YTEyMzFhOWY3ZmEwOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzRjZGQyNDJkNjNiNDk4M2EwNGExMjMxYTlmN2ZhMDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90b2hvMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ub2hvbm8gTydvZGhhbTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYjM3NWJiZDgxMTc0YjdlYTQ1ZWMzZDhjY2QwZTNjMi5zZXRDb250ZW50KGh0bWxfNzRjZGQyNDJkNjNiNDk4M2EwNGExMjMxYTlmN2ZhMDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzE3YzEwNDg5NzZkNDdkZmEzNjU2YjRhZGM1Y2NhZWUuYmluZFBvcHVwKHBvcHVwX2ZiMzc1YmJkODExNzRiN2VhNDVlYzNkOGNjZDBlM2MyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMjhjNzEzYWZlMjE0OTY5OTkzMWQ5NWNkMWM1NDkzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzAuNzE0ODg5OTk5OTk5OTk5OSwgLTc5LjA1MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjI3ZTM3ZDQzMWI0OTYzOGIyOTE1ZWE5NGYzZjI2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMjE3YmNlNWQwZWI0MWFjOThlYmE2NGFiNmEwMDYwZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzIxN2JjZTVkMGViNDFhYzk4ZWJhNjRhYjZhMDA2MGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jaGFjMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DaGEncGFsYWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzIyN2UzN2Q0MzFiNDk2MzhiMjkxNWVhOTRmM2YyNmUuc2V0Q29udGVudChodG1sX2MyMTdiY2U1ZDBlYjQxYWM5OGViYTY0YWI2YTAwNjBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EyOGM3MTNhZmUyMTQ5Njk5OTMxZDk1Y2QxYzU0OTNkLmJpbmRQb3B1cChwb3B1cF9jMjI3ZTM3ZDQzMWI0OTYzOGIyOTE1ZWE5NGYzZjI2ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGVlZjExMzMyOGE2NGJmMjgyN2I4OWIzNWNjYmY4ODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjYxNTE2LCAtNzYuMzEyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5YTVhNTE4NGUyNjRmZjBiNzJkMmZkNDYxZTYzZjdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1NjM0Nzg3Mjg1YTRjMGRhNDE2Y2NjMTdjZDk3MzM0ID0gJChgPGRpdiBpZD0iaHRtbF9hNTYzNDc4NzI4NWE0YzBkYTQxNmNjYzE3Y2Q5NzMzNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BhZXoxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlDDoWV6PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5YTVhNTE4NGUyNjRmZjBiNzJkMmZkNDYxZTYzZjdiLnNldENvbnRlbnQoaHRtbF9hNTYzNDc4NzI4NWE0YzBkYTQxNmNjYzE3Y2Q5NzMzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZWVmMTEzMzI4YTY0YmYyODI3Yjg5YjM1Y2NiZjg4Ny5iaW5kUG9wdXAocG9wdXBfYTlhNWE1MTg0ZTI2NGZmMGI3MmQyZmQ0NjFlNjNmN2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyMjdlYTk2MDEyODQ0OGZiNTI3Zjg3ZmM2YzRlYWViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjgwNDMxMDAwMDAwMDAwMSwgLTY0LjM1NzQ4MDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjY0YTU5MjU3NjE3NDlmMmE0NDQyMDJiM2I1NDEyYzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWE4YTcxZmQyZTQ4NGQyMjgwYTE1MDA5ZDc1MGU4YTIgPSAkKGA8ZGl2IGlkPSJodG1sX2FhOGE3MWZkMmU0ODRkMjI4MGExNTAwOWQ3NTBlOGEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXRvbjEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXRvbmFtYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNjRhNTkyNTc2MTc0OWYyYTQ0NDIwMmIzYjU0MTJjMS5zZXRDb250ZW50KGh0bWxfYWE4YTcxZmQyZTQ4NGQyMjgwYTE1MDA5ZDc1MGU4YTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjIyN2VhOTYwMTI4NDQ4ZmI1MjdmODdmYzZjNGVhZWIuYmluZFBvcHVwKHBvcHVwX2I2NGE1OTI1NzYxNzQ5ZjJhNDQ0MjAyYjNiNTQxMmMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYzBkOWM4MGY3NGQ0YzRjOGVmNTk4N2JlOGVhYTIwYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMC45MjAxLCAtNjYuMzMzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1YmM3NGYxN2RlMjRlOTY4YzBlYWZjYTlkOTQyZjM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5MGIzMTY2OTkzZTQ1YmY5MDk2MzZhMmJkZjg3NThmID0gJChgPGRpdiBpZD0iaHRtbF9mOTBiMzE2Njk5M2U0NWJmOTA5NjM2YTJiZGY4NzU4ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NvdXQyOTkxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNvdXRoIEJvbGl2aWFuIFF1ZWNodWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjViYzc0ZjE3ZGUyNGU5NjhjMGVhZmNhOWQ5NDJmMzcuc2V0Q29udGVudChodG1sX2Y5MGIzMTY2OTkzZTQ1YmY5MDk2MzZhMmJkZjg3NThmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjMGQ5YzgwZjc0ZDRjNGM4ZWY1OTg3YmU4ZWFhMjBhLmJpbmRQb3B1cChwb3B1cF82NWJjNzRmMTdkZTI0ZTk2OGMwZWFmY2E5ZDk0MmYzNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWRiNjA3OTA0MjA3NDE0MzhkZjQ4NmI4ODVkNTFkYWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTIuNzQxOTM5LCAtNzUuODA5MjMxMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZTc0ODYyZTE3NmM0NWM0ODI5NTE2YjE4YzA5OGE5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjcyYWUzMTExZDA0NmUyYjhhZDEzN2E4YmE5ZWRkYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTI3MmFlMzExMWQwNDZlMmI4YWQxMzdhOGJhOWVkZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9qYXFhMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KYXFhcnU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWU3NDg2MmUxNzZjNDVjNDgyOTUxNmIxOGMwOThhOWEuc2V0Q29udGVudChodG1sXzUyNzJhZTMxMTFkMDQ2ZTJiOGFkMTM3YThiYTllZGRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVkYjYwNzkwNDIwNzQxNDM4ZGY0ODZiODg1ZDUxZGFkLmJpbmRQb3B1cChwb3B1cF85ZTc0ODYyZTE3NmM0NWM0ODI5NTE2YjE4YzA5OGE5YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTY0NmZiNGQ4MTI4NDc1ZTk1Yzg5Yjc2MmNkMmMyNWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwZGZkZDYwNzY2OTQ3ZTZhODVlMDNmYjViNTIzZWU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxY2VmZDMzYWY3ODRhMjNiZDFkNWUxOWIwMGRmNmYzID0gJChgPGRpdiBpZD0iaHRtbF8zMWNlZmQzM2FmNzg0YTIzYmQxZDVlMTliMDBkZjZmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcHVkdW5ndW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDBkZmRkNjA3NjY5NDdlNmE4NWUwM2ZiNWI1MjNlZTcuc2V0Q29udGVudChodG1sXzMxY2VmZDMzYWY3ODRhMjNiZDFkNWUxOWIwMGRmNmYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2NDZmYjRkODEyODQ3NWU5NWM4OWI3NjJjZDJjMjVjLmJpbmRQb3B1cChwb3B1cF80MGRmZGQ2MDc2Njk0N2U2YTg1ZTAzZmI1YjUyM2VlNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjQyNTE5YmIyNDA4NDYwNzk4ZTA5MTNlMTY1MTNjMjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4zNjQ3OTUsIC02MS4zNDI5NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZGYyMTA5MTE5Y2Y0MGVjYjA2ZTcwNjZlNmJlOGM2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNWRjOGMwMDEzZjg0MDMzYjAwNDQ5NWJlNzE1MGQxMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjVkYzhjMDAxM2Y4NDAzM2IwMDQ0OTViZTcxNTBkMTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pc2xhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Jc2xhbmQgQ2FyaWI8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWRmMjEwOTExOWNmNDBlY2IwNmU3MDY2ZTZiZThjNjcuc2V0Q29udGVudChodG1sX2I1ZGM4YzAwMTNmODQwMzNiMDA0NDk1YmU3MTUwZDEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y0MjUxOWJiMjQwODQ2MDc5OGUwOTEzZTE2NTEzYzIzLmJpbmRQb3B1cChwb3B1cF8xZGYyMTA5MTE5Y2Y0MGVjYjA2ZTcwNjZlNmJlOGM2NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTE2NDY1MGVmYzhkNGEwODkwZWMyYmJiODIyN2M1MGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyLjU4NzQ0LCAtNTkuODAyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0M2RiYjlmOWMzOTQ0Mjc4MmQzZmRiNTAyZDQ3NDQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwYjcwOTkxYzY2NzQ0ZjE5ZDU3MzI0M2E1ZTJlODgxID0gJChgPGRpdiBpZD0iaHRtbF83MGI3MDk5MWM2Njc0NGYxOWQ1NzMyNDNhNWUyZTg4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dhcGkxMjUzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldhcGlzaGFuYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDNkYmI5ZjljMzk0NDI3ODJkM2ZkYjUwMmQ0NzQ0Ny5zZXRDb250ZW50KGh0bWxfNzBiNzA5OTFjNjY3NDRmMTlkNTczMjQzYTVlMmU4ODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTE2NDY1MGVmYzhkNGEwODkwZWMyYmJiODIyN2M1MGIuYmluZFBvcHVwKHBvcHVwXzQ0M2RiYjlmOWMzOTQ0Mjc4MmQzZmRiNTAyZDQ3NDQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMTM2MzYyODMwZGE0OTVmODc5OTEyMWM0Mjk5MjczMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjM5NTU2NiwgLTcyLjE5OTc5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmZjU1ZDUwZmUzMzRkMWE5YjllNDBiZWU1NzVhMTAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwMWQ3MmZmYjNjODQxYjU5NTEwMzBmNDBjODM1ZjMyID0gJChgPGRpdiBpZD0iaHRtbF9jMDFkNzJmZmIzYzg0MWI1OTUxMDMwZjQwYzgzNWYzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dheXUxMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldheXV1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmZjU1ZDUwZmUzMzRkMWE5YjllNDBiZWU1NzVhMTAyLnNldENvbnRlbnQoaHRtbF9jMDFkNzJmZmIzYzg0MWI1OTUxMDMwZjQwYzgzNWYzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTM2MzYyODMwZGE0OTVmODc5OTEyMWM0Mjk5MjczMy5iaW5kUG9wdXAocG9wdXBfN2ZmNTVkNTBmZTMzNGQxYTliOWU0MGJlZTU3NWExMDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4YmFhMGMyZWViNTQ1ZDA4NmRjYjk5ZWYxMzc2NDk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjkzMTEsIC03My45MDczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDM2YTcyM2JlMWNhNDA3MjhlYjA2YzBjMGVlNDVkOGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzM2Yzk3YmNjYmQxNGE5YTg2NTkyOTYxNjI1NmY1NjEgPSAkKGA8ZGl2IGlkPSJodG1sX2MzNmM5N2JjY2JkMTRhOWE4NjU5Mjk2MTYyNTZmNTYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYXNoYTEyNDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QXNow6FuaW5rYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MzZhNzIzYmUxY2E0MDcyOGViMDZjMGMwZWU0NWQ4Yi5zZXRDb250ZW50KGh0bWxfYzM2Yzk3YmNjYmQxNGE5YTg2NTkyOTYxNjI1NmY1NjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDhiYWEwYzJlZWI1NDVkMDg2ZGNiOTllZjEzNzY0OTUuYmluZFBvcHVwKHBvcHVwXzQzNmE3MjNiZTFjYTQwNzI4ZWIwNmMwYzBlZTQ1ZDhiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOTQxNTBhNmMxZTc0Y2FhYTQyN2I0MTYzNDIzMTM3ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNS4xMTg4LCAtNjUuMzk5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwM2I2Y2U3OTkwYTQwMTE4YmZhYzU4ZWE0ZmExZTI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MyZGIzNDI1MmE2MzQxOTNiNjUxMjE2NGQwZjgxOWFmID0gJChgPGRpdiBpZD0iaHRtbF9jMmRiMzQyNTJhNjM0MTkzYjY1MTIxNjRkMGY4MTlhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2lnbmExMjQ2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPklnbmFjaWFubzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDNiNmNlNzk5MGE0MDExOGJmYWM1OGVhNGZhMWUyOC5zZXRDb250ZW50KGh0bWxfYzJkYjM0MjUyYTYzNDE5M2I2NTEyMTY0ZDBmODE5YWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDk0MTUwYTZjMWU3NGNhYWE0MjdiNDE2MzQyMzEzN2QuYmluZFBvcHVwKHBvcHVwXzAwM2I2Y2U3OTkwYTQwMTE4YmZhYzU4ZWE0ZmExZTI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYTAyMWRlZDRiMTM0ZGFiYjNkZmFjNTdkMzEzN2ZhYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMC41NDU0LCAtNzUuMzE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGMxM2M5ZGE0YmIzNDIzNWFkNGEyN2RmYjAzOTdhZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2YwYmUzOTkxYjkyNDQzOThkZjMxZWZiZmZlNGFiMzUgPSAkKGA8ZGl2IGlkPSJodG1sXzNmMGJlMzk5MWI5MjQ0Mzk4ZGYzMWVmYmZmZTRhYjM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveWFuZTEyMzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WWFuZXNoYSc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGMxM2M5ZGE0YmIzNDIzNWFkNGEyN2RmYjAzOTdhZTguc2V0Q29udGVudChodG1sXzNmMGJlMzk5MWI5MjQ0Mzk4ZGYzMWVmYmZmZTRhYjM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JhMDIxZGVkNGIxMzRkYWJiM2RmYWM1N2QzMTM3ZmFjLmJpbmRQb3B1cChwb3B1cF8wYzEzYzlkYTRiYjM0MjM1YWQ0YTI3ZGZiMDM5N2FlOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGUyZTdlYmRkOTI3NDBiMWI2N2MxZGMzNzAyZDgwZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy40NTEzNTk5OTk5OTk5OTk4LCAtNzguMTg5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmMGQzZDVhODQzODQ2MzFiZDczYWZiZDRlNWRlZTkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlZjExNjBmODhjYjQzN2JiNTNjYzNkZTc4MDE3Y2FiID0gJChgPGRpdiBpZD0iaHRtbF8wZWYxMTYwZjg4Y2I0MzdiYjUzY2MzZGU3ODAxN2NhYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NodWExMjU3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNodWFyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmMGQzZDVhODQzODQ2MzFiZDczYWZiZDRlNWRlZTkxLnNldENvbnRlbnQoaHRtbF8wZWYxMTYwZjg4Y2I0MzdiYjUzY2MzZGU3ODAxN2NhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZTJlN2ViZGQ5Mjc0MGIxYjY3YzFkYzM3MDJkODBkOC5iaW5kUG9wdXAocG9wdXBfY2YwZDNkNWE4NDM4NDYzMWJkNzNhZmJkNGU1ZGVlOTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg2OGFkZWY0YjhlNzRlYzM4N2UwZTcxYWNiZThhNjM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNS44Mzc3MiwgLTU2LjgzMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OGM3ZDdlMjhhOGM0ZmM3YmQ1MzhlMmYyMTdlNDIxMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NzljNjUwZmQ4NGE0MTMyYjMwM2MxMDQxMWIxM2IwMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzc5YzY1MGZkODRhNDEzMmIzMDNjMTA0MTFiMTNiMDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9nYWxpMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HYWxpYmkgQ2FyaWI8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjhjN2Q3ZTI4YThjNGZjN2JkNTM4ZTJmMjE3ZTQyMTAuc2V0Q29udGVudChodG1sXzc3OWM2NTBmZDg0YTQxMzJiMzAzYzEwNDExYjEzYjAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg2OGFkZWY0YjhlNzRlYzM4N2UwZTcxYWNiZThhNjM5LmJpbmRQb3B1cChwb3B1cF82OGM3ZDdlMjhhOGM0ZmM3YmQ1MzhlMmYyMTdlNDIxMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmNjZjFkYTVmNjMxNDdlYTliMmQxZTBhYjZlNzNkNzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTUuNTI5OCwgLTYzLjk2ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNDVkY2M2MzlmNDA0NzdlYjM2NmU4MWM4MDZjYzdiOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80M2IwYTYwODBlOWE0NGVjOTc2YWY4YjIxZTZlZmQzZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDNiMGE2MDgwZTlhNDRlYzk3NmFmOGIyMWU2ZWZkM2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zaXJpMTI3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TaXJpb27DszwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNDVkY2M2MzlmNDA0NzdlYjM2NmU4MWM4MDZjYzdiOS5zZXRDb250ZW50KGh0bWxfNDNiMGE2MDgwZTlhNDRlYzk3NmFmOGIyMWU2ZWZkM2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmNjZjFkYTVmNjMxNDdlYTliMmQxZTBhYjZlNzNkNzIuYmluZFBvcHVwKHBvcHVwXzE0NWRjYzYzOWY0MDQ3N2ViMzY2ZTgxYzgwNmNjN2I5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MzY1MjY3ZWZhNmM0YmRkYjcxNGIxN2RjZmNlOTM5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yNS42MDU1MSwgLTU3LjA4ODE1OTk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyYzE4YjM3M2I3OTQzN2U4ZWZkMDFkNDYxNTRkYzIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjMGVjZWEyZTJlYzRmNWNiNjBlZDdhNGNjYjJjOWM5ID0gJChgPGRpdiBpZD0iaHRtbF8zYzBlY2VhMmUyZWM0ZjVjYjYwZWQ3YTRjY2IyYzljOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BhcmExMzExIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBhcmFndWF5YW4gR3VhcmFuw608L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjJjMThiMzczYjc5NDM3ZThlZmQwMWQ0NjE1NGRjMjEuc2V0Q29udGVudChodG1sXzNjMGVjZWEyZTJlYzRmNWNiNjBlZDdhNGNjYjJjOWM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzczNjUyNjdlZmE2YzRiZGRiNzE0YjE3ZGNmY2U5MzkzLmJpbmRQb3B1cChwb3B1cF82MmMxOGIzNzNiNzk0MzdlOGVmZDAxZDQ2MTU0ZGMyMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzMxZGU2MzNmZDIxNDkzOTgyZTA5NTMxYjg2MzZkOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTAuMjAxMiwgLTcyLjMyMDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZjM0NmExM2IyMjk0ZGIwYmZmMzJhYTA0N2ViZWJkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MzA4ODg0YTk0NDg0ZDUzOGNmMWQzMzc5MzE0ZWFiZSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTMwODg4NGE5NDQ4NGQ1MzhjZjFkMzM3OTMxNGVhYmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hbWFoMTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BbWFodWFjYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZjM0NmExM2IyMjk0ZGIwYmZmMzJhYTA0N2ViZWJkMS5zZXRDb250ZW50KGh0bWxfOTMwODg4NGE5NDQ4NGQ1MzhjZjFkMzM3OTMxNGVhYmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzMxZGU2MzNmZDIxNDkzOTgyZTA5NTMxYjg2MzZkOGUuYmluZFBvcHVwKHBvcHVwXzFmMzQ2YTEzYjIyOTRkYjBiZmYzMmFhMDQ3ZWJlYmQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGViYzMwZWZjZTU0OTcyYjk3NzM5MzU0NDNhMTFmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi4xMzMsIC02Ni43MTY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTgxYzhlNjYxZTVjNDc0YjgxOWRjMjc1ODhiMThlZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDk2YWYwODJkNDlmNDZkOGI5MzJjYWNjYzA5NDAzZWMgPSAkKGA8ZGl2IGlkPSJodG1sXzQ5NmFmMDgyZDQ5ZjQ2ZDhiOTMyY2FjY2MwOTQwM2VjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2hhYzEyNTEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2jDoWNvYm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTgxYzhlNjYxZTVjNDc0YjgxOWRjMjc1ODhiMThlZTQuc2V0Q29udGVudChodG1sXzQ5NmFmMDgyZDQ5ZjQ2ZDhiOTMyY2FjY2MwOTQwM2VjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY4ZWJjMzBlZmNlNTQ5NzJiOTc3MzkzNTQ0M2ExMWYzLmJpbmRQb3B1cChwb3B1cF81ODFjOGU2NjFlNWM0NzRiODE5ZGMyNzU4OGIxOGVlNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ZmODIzZmEzNzBhNDYxMThkMGVkZjY4MTM0YmZhNTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNi4xMDc3NCwgLTQ3LjYzMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMjhjODIzZDViNWQ0N2I2ODYwNzdkMjJlZGVmODdkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84N2ZkOTdiYTMwZDI0Njg4ODY5NjJiNzM0ZGIyMjMxNCA9ICQoYDxkaXYgaWQ9Imh0bWxfODdmZDk3YmEzMGQyNDY4ODg2OTYyYjczNGRiMjIzMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hcGluMTI0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BcGluYXnDqTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMjhjODIzZDViNWQ0N2I2ODYwNzdkMjJlZGVmODdkYS5zZXRDb250ZW50KGh0bWxfODdmZDk3YmEzMGQyNDY4ODg2OTYyYjczNGRiMjIzMTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ZmODIzZmEzNzBhNDYxMThkMGVkZjY4MTM0YmZhNTYuYmluZFBvcHVwKHBvcHVwXzIyOGM4MjNkNWI1ZDQ3YjY4NjA3N2QyMmVkZWY4N2RhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzQwM2VmYjdmNWU0ZGQ4YjI1ZmZjNzYzZDY2YTZjMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjkxNjk3Mzk5OTk5OTk5NiwgLTMuNDMwNjE2MDAwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4MzY4NzNkNzM5ZjQzNWY5MjIyZjA3NjQ1YjJkOTMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE2YjYzNzFjYjU5NjQwNjRhNDgxYTgxN2YyZTUxZjFlID0gJChgPGRpdiBpZD0iaHRtbF8xNmI2MzcxY2I1OTY0MDY0YTQ4MWE4MTdmMmU1MWYxZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RhcmkxMjYzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRhcmlmaXl0LUJlbmktSXpuYXNlbi1FYXN0ZXJuIE1pZGRsZSBBdGxhcyBCZXJiZXI8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTgzNjg3M2Q3MzlmNDM1ZjkyMjJmMDc2NDViMmQ5MzIuc2V0Q29udGVudChodG1sXzE2YjYzNzFjYjU5NjQwNjRhNDgxYTgxN2YyZTUxZjFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y3NDAzZWZiN2Y1ZTRkZDhiMjVmZmM3NjNkNjZhNmMzLmJpbmRQb3B1cChwb3B1cF9hODM2ODczZDczOWY0MzVmOTIyMmYwNzY0NWIyZDkzMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmNhMmZiMjlmYWIyNGJkMjkxMTdiYmQ1NjQ4ZjZiOGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy4zNDk0LCAzOC4yMjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjczM2ZmMzRhMGI0NGQzMzlhMmU3ZTkyZDk1N2VkNDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTVjOTZiMTYxYzBhNDNkZmJiMDJhMzQ2ZTgwZGZjNWEgPSAkKGA8ZGl2IGlkPSJodG1sX2E1Yzk2YjE2MWMwYTQzZGZiYjAyYTM0NmU4MGRmYzVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGlncjEyNzAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGlncmU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjczM2ZmMzRhMGI0NGQzMzlhMmU3ZTkyZDk1N2VkNDguc2V0Q29udGVudChodG1sX2E1Yzk2YjE2MWMwYTQzZGZiYjAyYTM0NmU4MGRmYzVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjYTJmYjI5ZmFiMjRiZDI5MTE3YmJkNTY0OGY2YjhiLmJpbmRQb3B1cChwb3B1cF8yNzMzZmYzNGEwYjQ0ZDMzOWEyZTdlOTJkOTU3ZWQ0OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWFjOGYxYzY4NjIzNGMzYzgyM2UzNjY3Y2Y2MDViY2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzExMjVhYTdjY2Y3ZjQyMmRiN2VjMjk2Njc1OTc1ZWNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkMzIyYjA3ZTNmYzQ4OWRhMWJjZjMzZmI0MWIyMTIzID0gJChgPGRpdiBpZD0iaHRtbF84ZDMyMmIwN2UzZmM0ODlkYTFiY2YzM2ZiNDFiMjEyMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FtaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtaGFyaWM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTEyNWFhN2NjZjdmNDIyZGI3ZWMyOTY2NzU5NzVlY2Muc2V0Q29udGVudChodG1sXzhkMzIyYjA3ZTNmYzQ4OWRhMWJjZjMzZmI0MWIyMTIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVhYzhmMWM2ODYyMzRjM2M4MjNlMzY2N2NmNjA1YmNjLmJpbmRQb3B1cChwb3B1cF8xMTI1YWE3Y2NmN2Y0MjJkYjdlYzI5NjY3NTk3NWVjYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTI2YTJkZDg2MDcxNDg0YjkyY2Q1NWFjYjA4YmRkOTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMS4wLCAzMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjhkNWM3YWExNTZkNDQyODg1NDhlZTQzMTYyNTRlMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBhNjk5NjkwNWYzNDdjZWFhMjgzNzRmMWFiZjU2MzMgPSAkKGA8ZGl2IGlkPSJodG1sXzcwYTY5OTY5MDVmMzQ3Y2VhYTI4Mzc0ZjFhYmY1NjMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZWd5cDEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RWd5cHRpYW4gQXJhYmljPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4ZDVjN2FhMTU2ZDQ0Mjg4NTQ4ZWU0MzE2MjU0ZTI3LnNldENvbnRlbnQoaHRtbF83MGE2OTk2OTA1ZjM0N2NlYWEyODM3NGYxYWJmNTYzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MjZhMmRkODYwNzE0ODRiOTJjZDU1YWNiMDhiZGQ5MC5iaW5kUG9wdXAocG9wdXBfYjhkNWM3YWExNTZkNDQyODg1NDhlZTQzMTYyNTRlMjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwMzI5ZDVhZjM0NDQ4MWI4MzAxNGE1YTU2NmRlMmFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuNSwgLTcuNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjZjBkYmZhYzlkNjQ3MTVhODczN2I0ZTI4NzUyMWNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxMGVlZmNkOTMzMDQyNTRiMGE0NjlmZGNhMGNmZmE0ID0gJChgPGRpdiBpZD0iaHRtbF9mMTBlZWZjZDkzMzA0MjU0YjBhNDY5ZmRjYTBjZmZhNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21vcm8xMjkyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1vcm9jY2FuIEFyYWJpYzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xY2YwZGJmYWM5ZDY0NzE1YTg3MzdiNGUyODc1MjFjZi5zZXRDb250ZW50KGh0bWxfZjEwZWVmY2Q5MzMwNDI1NGIwYTQ2OWZkY2EwY2ZmYTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjAzMjlkNWFmMzQ0NDgxYjgzMDE0YTVhNTY2ZGUyYWYuYmluZFBvcHVwKHBvcHVwXzFjZjBkYmZhYzlkNjQ3MTVhODczN2I0ZTI4NzUyMWNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZWI0MzU0OGRkNDA0ZjViODczYzc3MTM5NzQwMmE0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1Ljg4ODQsIDE0LjQ1MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZTgyM2FmNDE3NzY0MmIwYWViNjA1ZGNlZjM1MzdhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YWNmMjAzZWM4Mzk0NjBlOTBmNzk3NzBkY2Y4OWE0ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmFjZjIwM2VjODM5NDYwZTkwZjc5NzcwZGNmODlhNGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYWx0MTI1NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYWx0ZXNlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllODIzYWY0MTc3NjQyYjBhZWI2MDVkY2VmMzUzN2FjLnNldENvbnRlbnQoaHRtbF82YWNmMjAzZWM4Mzk0NjBlOTBmNzk3NzBkY2Y4OWE0ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZWI0MzU0OGRkNDA0ZjViODczYzc3MTM5NzQwMmE0Yy5iaW5kUG9wdXAocG9wdXBfOWU4MjNhZjQxNzc2NDJiMGFlYjYwNWRjZWYzNTM3YWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhNTdlZTQ0Mjg0ZTRmMWU4MjczMDYwMGFkNjA1OWNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzEuMTA1NiwgMzUuMDE3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyZGZkYTU0ZmM1OTQ2YjM4YmM5OTY1N2NhNDA2NjUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwNGY3MmNiMzIyMTQ1MmM4OGJlNDg0MTRkODU2ZTU5ID0gJChgPGRpdiBpZD0iaHRtbF9hMDRmNzJjYjMyMjE0NTJjODhiZTQ4NDE0ZDg1NmU1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hlYnIxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1vZGVybiBIZWJyZXc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjJkZmRhNTRmYzU5NDZiMzhiYzk5NjU3Y2E0MDY2NTMuc2V0Q29udGVudChodG1sX2EwNGY3MmNiMzIyMTQ1MmM4OGJlNDg0MTRkODU2ZTU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VhNTdlZTQ0Mjg0ZTRmMWU4MjczMDYwMGFkNjA1OWNkLmJpbmRQb3B1cChwb3B1cF8yMmRmZGE1NGZjNTk0NmIzOGJjOTk2NTdjYTQwNjY1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTBkNTk4Y2ZlNmM0NGIyNzgxMTA1ZjBjZjk5ZDdmMDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4yNTM0LCAtMTUuMzgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQ5NzExYTIxNjRlNGMzNGE2Mzc0MGNiZWExYjYyYmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2M4ZDU4ZWEyZDNiNDJjOGJmOWFiOWQ0MjkzM2UxMDIgPSAkKGA8ZGl2IGlkPSJodG1sXzdjOGQ1OGVhMmQzYjQyYzhiZjlhYjlkNDI5MzNlMTAyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V29sb2Y8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQ5NzExYTIxNjRlNGMzNGE2Mzc0MGNiZWExYjYyYmMuc2V0Q29udGVudChodG1sXzdjOGQ1OGVhMmQzYjQyYzhiZjlhYjlkNDI5MzNlMTAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwZDU5OGNmZTZjNDRiMjc4MTEwNWYwY2Y5OWQ3ZjAyLmJpbmRQb3B1cChwb3B1cF83NDk3MTFhMjE2NGU0YzM0YTYzNzQwY2JlYTFiNjJiYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjExMzUwNWQ3MjhhNGY0MWFjNjVmODAwZjk3OThkMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstOC4yNTYwNSwgMzcuNjI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWVmMTA5ZTEyM2YwNDkxYzg2OTZjNDVjOWEwMzRiYTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjhlZWU2N2JkYzFhNDY0NzhmNjhmNzg1ZWM3NDA0ZGEgPSAkKGA8ZGl2IGlkPSJodG1sX2I4ZWVlNjdiZGMxYTQ2NDc4ZjY4Zjc4NWVjNzQwNGRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3dhaDEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3dhaGlsaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZWYxMDllMTIzZjA0OTFjODY5NmM0NWM5YTAzNGJhMy5zZXRDb250ZW50KGh0bWxfYjhlZWU2N2JkYzFhNDY0NzhmNjhmNzg1ZWM3NDA0ZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjExMzUwNWQ3MjhhNGY0MWFjNjVmODAwZjk3OThkMGQuYmluZFBvcHVwKHBvcHVwX2FlZjEwOWUxMjNmMDQ5MWM4Njk2YzQ1YzlhMDM0YmEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzdhYTU1MDQwMDg0ZmUwYmVkYzNmNjRiNTkxZDg5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2Ljk2MzQsIC0wLjU1MTg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWVmMDdlNGMzNWYyNDE2ODkyZjVhNTQ3MjkzZGNhODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjNmNGExYTQyOWU4NGJjMGIwOWYzZWZlMWRmMmE1NWQgPSAkKGA8ZGl2IGlkPSJodG1sX2YzZjRhMWE0MjllODRiYzBiMDlmM2VmZTFkZjJhNTVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva295cjEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S295cmFib3JvIFNlbm5pIFNvbmdoYWk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWVmMDdlNGMzNWYyNDE2ODkyZjVhNTQ3MjkzZGNhODMuc2V0Q29udGVudChodG1sX2YzZjRhMWE0MjllODRiYzBiMDlmM2VmZTFkZjJhNTVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3N2FhNTUwNDAwODRmZTBiZWRjM2Y2NGI1OTFkODkyLmJpbmRQb3B1cChwb3B1cF85ZWYwN2U0YzM1ZjI0MTY4OTJmNWE1NDcyOTNkY2E4MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODQ4MzM1Y2EzOTE4NDM0NGI4NTQwMDI0YWEyYzY5MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzUwNzNmN2RmZTY0NDFkZjgyMGNkZDAwY2MxZWE3ZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDA4YWFhMmIyOTU2NGY2YjgzZjJiODZiMzkxMjFiYzkgPSAkKGA8ZGl2IGlkPSJodG1sX2QwOGFhYTJiMjk1NjRmNmI4M2YyYjg2YjM5MTIxYmM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXJpczEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXJpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzUwNzNmN2RmZTY0NDFkZjgyMGNkZDAwY2MxZWE3ZmEuc2V0Q29udGVudChodG1sX2QwOGFhYTJiMjk1NjRmNmI4M2YyYjg2YjM5MTIxYmM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0ODMzNWNhMzkxODQzNDRiODU0MDAyNGFhMmM2OTFkLmJpbmRQb3B1cChwb3B1cF9jNTA3M2Y3ZGZlNjQ0MWRmODIwY2RkMDBjYzFlYTdmYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzk0Mzc3ZGU0ZGI0NDg4ODhmMWNlOTI4ODhlN2ExNTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4yNDUyLCAtMy43ODkzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzYTQwODgxMGFjNzRmMzFiNDVhMmQxN2QxOGI5NjRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiNzE1YWJkNzU1NjQyMWNhODliMDY3ZGUwMWE5M2M2ID0gJChgPGRpdiBpZD0iaHRtbF8zYjcxNWFiZDc1NTY0MjFjYTg5YjA2N2RlMDFhOTNjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2JyZXQxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJyZXRvbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kM2E0MDg4MTBhYzc0ZjMxYjQ1YTJkMTdkMThiOTY0Yi5zZXRDb250ZW50KGh0bWxfM2I3MTVhYmQ3NTU2NDIxY2E4OWIwNjdkZTAxYTkzYzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzk0Mzc3ZGU0ZGI0NDg4ODhmMWNlOTI4ODhlN2ExNTMuYmluZFBvcHVwKHBvcHVwX2QzYTQwODgxMGFjNzRmMzFiNDVhMmQxN2QxOGI5NjRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMWFkY2Y0ZGFiNjY0ZGQ2OGViYjkxZjQzOGZmZWMwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYzLjQ4MzcsIC0xOS4wMjEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjVmMGQyZGE4YWRiNGNiZjk2YzI1ZjY1MDNjNDliYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzdlMmJlYWI4NmNhNGNjM2FhNWJlODNiYjBlNzI0ZjEgPSAkKGA8ZGl2IGlkPSJodG1sX2M3ZTJiZWFiODZjYTRjYzNhYTViZTgzYmIwZTcyNGYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaWNlbDEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SWNlbGFuZGljPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1ZjBkMmRhOGFkYjRjYmY5NmMyNWY2NTAzYzQ5YmM5LnNldENvbnRlbnQoaHRtbF9jN2UyYmVhYjg2Y2E0Y2MzYWE1YmU4M2JiMGU3MjRmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMWFkY2Y0ZGFiNjY0ZGQ2OGViYjkxZjQzOGZmZWMwMy5iaW5kUG9wdXAocG9wdXBfYjVmMGQyZGE4YWRiNGNiZjk2YzI1ZjY1MDNjNDliYzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwYWIxMTk3MTY2MzQyYWJiMmMyMjA5NGQ2NDc3NTYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyODVkN2UyNjRiNjQ3ZWZiNDU3Zjk2NDcyMWVhMDcxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkMjlmMWI5MGNhMTQyYjM4OTg4MjdkMWFhYWRhMDk2ID0gJChgPGRpdiBpZD0iaHRtbF8yZDI5ZjFiOTBjYTE0MmIzODk4ODI3ZDFhYWFkYTA5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjkzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVuZ2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTI4NWQ3ZTI2NGI2NDdlZmI0NTdmOTY0NzIxZWEwNzEuc2V0Q29udGVudChodG1sXzJkMjlmMWI5MGNhMTQyYjM4OTg4MjdkMWFhYWRhMDk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UwYWIxMTk3MTY2MzQyYWJiMmMyMjA5NGQ2NDc3NTYxLmJpbmRQb3B1cChwb3B1cF81Mjg1ZDdlMjY0YjY0N2VmYjQ1N2Y5NjQ3MjFlYTA3MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWY5NWI0Y2NmNTc4NGQ1NGFkOTNmYzc1Zjk1M2MzOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC42NDg5OTk5OTk5OTk5OTQsIDEyLjQ2NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYmExMGIyNTIxZTI0ZGQ4YWIyZjVhNmU5NmM3NzdjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZDU4NDQzYmVhOGY0NzRlOTlmYzgwMTVkNjJhMmNhNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNmQ1ODQ0M2JlYThmNDc0ZTk5ZmM4MDE1ZDYyYTJjYTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zdGFuMTI5NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HZXJtYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmJhMTBiMjUyMWUyNGRkOGFiMmY1YTZlOTZjNzc3YzAuc2V0Q29udGVudChodG1sXzZkNTg0NDNiZWE4ZjQ3NGU5OWZjODAxNWQ2MmEyY2E2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FmOTViNGNjZjU3ODRkNTRhZDkzZmM3NWY5NTNjMzlhLmJpbmRQb3B1cChwb3B1cF9mYmExMGIyNTIxZTI0ZGQ4YWIyZjVhNmU5NmM3NzdjMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjdjMTU2YWM5MTVhNGYwNWI4Yjc0OTU5N2FlYTExNTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYzJlYTYzOGRjOTI0ZGNhYjI2NGVkMWQ1NzMzOTBjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMDRhMzk5MTczOTM0NGIwYWUwNWEzZjVhNjI4NjY2MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTA0YTM5OTE3MzkzNDRiMGFlMDVhM2Y1YTYyODY2NjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zdGFuMTI5MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GcmVuY2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWMyZWE2MzhkYzkyNGRjYWIyNjRlZDFkNTczMzkwYzAuc2V0Q29udGVudChodG1sXzEwNGEzOTkxNzM5MzQ0YjBhZTA1YTNmNWE2Mjg2NjYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3YzE1NmFjOTE1YTRmMDViOGI3NDk1OTdhZWExMTUzLmJpbmRQb3B1cChwb3B1cF9hYzJlYTYzOGRjOTI0ZGNhYjI2NGVkMWQ1NzMzOTBjMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTM0ZDllYmExMmVjNGI4ZDgwZjhkOWNlY2U4MWUzOWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS45MSwgLTguMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwMGY1NTQ3MGNhYTQ2Zjg4YjExNDlhY2NhYTQyZWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhZmFjYWI5ZjdhMDQ0ZTRiYjMwMjNiNDE5ZmU1YjEzID0gJChgPGRpdiBpZD0iaHRtbF9jYWZhY2FiOWY3YTA0NGU0YmIzMDIzYjQxOWZlNWIxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvcnQxMjgzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvcnR1Z3Vlc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjAwZjU1NDcwY2FhNDZmODhiMTE0OWFjY2FhNDJlYzIuc2V0Q29udGVudChodG1sX2NhZmFjYWI5ZjdhMDQ0ZTRiYjMwMjNiNDE5ZmU1YjEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EzNGQ5ZWJhMTJlYzRiOGQ4MGY4ZDljZWNlODFlMzljLmJpbmRQb3B1cChwb3B1cF9mMDBmNTU0NzBjYWE0NmY4OGIxMTQ5YWNjYWE0MmVjMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmQyY2JiNjMzZmVhNDUyZTg3YmFlOTZkNTQ1ODVmM2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5NDYxYTdjZWViYTRkODhhNTRmMzNhZTdiZTU4ZmE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3MTY1Yzk5OTQwMDRiNzZhNjY3NDliN2U0OTI4MWJlID0gJChgPGRpdiBpZD0iaHRtbF81NzE2NWM5OTk0MDA0Yjc2YTY2NzQ5YjdlNDkyODFiZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjg4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNwYW5pc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjk0NjFhN2NlZWJhNGQ4OGE1NGYzM2FlN2JlNThmYTQuc2V0Q29udGVudChodG1sXzU3MTY1Yzk5OTQwMDRiNzZhNjY3NDliN2U0OTI4MWJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJkMmNiYjYzM2ZlYTQ1MmU4N2JhZTk2ZDU0NTg1ZjNiLmJpbmRQb3B1cChwb3B1cF9mOTQ2MWE3Y2VlYmE0ZDg4YTU0ZjMzYWU3YmU1OGZhNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDBiMzcyZGY3YzhlNDJiNThmYWUxMjIzMjUwZGRkNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zOTEzLCAyNC4yMjU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2JlZmMyYjNiYmM3NDFkNTkyN2QxZTg3YmY2MzEyYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjJmMzY4ODUwMmMyNDhiYjk2NzUwYWZmZjI3MWJlYTggPSAkKGA8ZGl2IGlkPSJodG1sX2YyZjM2ODg1MDJjMjQ4YmI5Njc1MGFmZmYyNzFiZWE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcm9tYTEzMjciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Um9tYW5pYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2JlZmMyYjNiYmM3NDFkNTkyN2QxZTg3YmY2MzEyYjUuc2V0Q29udGVudChodG1sX2YyZjM2ODg1MDJjMjQ4YmI5Njc1MGFmZmYyNzFiZWE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwYjM3MmRmN2M4ZTQyYjU4ZmFlMTIyMzI1MGRkZDZiLmJpbmRQb3B1cChwb3B1cF83YmVmYzJiM2JiYzc0MWQ1OTI3ZDFlODdiZjYzMTJiNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGJjMGMyZmM1MWM4NDgxODkxYTIxMmZjNGQyYjI3ZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdhYTc3ODhhMGQwNDk0M2EzMTFmYTU3MmY2OGM5YTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDM0ZjY2NTQxNDZmNDg1NjkzZWU0MzdkNWM1NmY0ODkgPSAkKGA8ZGl2IGlkPSJodG1sX2QzNGY2NjU0MTQ2ZjQ4NTY5M2VlNDM3ZDVjNTZmNDg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcnVzczEyNjMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UnVzc2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jN2FhNzc4OGEwZDA0OTQzYTMxMWZhNTcyZjY4YzlhMy5zZXRDb250ZW50KGh0bWxfZDM0ZjY2NTQxNDZmNDg1NjkzZWU0MzdkNWM1NmY0ODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGJjMGMyZmM1MWM4NDgxODkxYTIxMmZjNGQyYjI3ZjAuYmluZFBvcHVwKHBvcHVwX2M3YWE3Nzg4YTBkMDQ5NDNhMzExZmE1NzJmNjhjOWEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZDI3NDQzMmNlMTQ0M2ZhYWFhNDI4MzI0ZTEwYmIzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM2NDYsIDI1LjA0Njk5OTk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4NGJlYjlkZTJiNDRjNWE4MGNhZGQ1YzQwOWQ1ZWM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdiM2Y2NDEwOTFiMDRmZTFhNmM1NTEwYzBjNDhmY2RhID0gJChgPGRpdiBpZD0iaHRtbF83YjNmNjQxMDkxYjA0ZmUxYTZjNTUxMGMwYzQ4ZmNkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2J1bGcxMjYyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJ1bGdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODRiZWI5ZGUyYjQ0YzVhODBjYWRkNWM0MDlkNWVjNC5zZXRDb250ZW50KGh0bWxfN2IzZjY0MTA5MWIwNGZlMWE2YzU1MTBjMGM0OGZjZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGQyNzQ0MzJjZTE0NDNmYWFhYTQyODMyNGUxMGJiMzIuYmluZFBvcHVwKHBvcHVwXzI4NGJlYjlkZTJiNDRjNWE4MGNhZGQ1YzQwOWQ1ZWM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wM2Q3N2U0MjFlZTU0YjkwYWYzNmNlMTBmOTE1Yzk0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU1LjE0MjksIDIzLjk2MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNDRlMzU4NGYyYzA0ODQyOGEzN2E1Y2IzMzljNmQ1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTVlZGYzODQxYzI0N2JhYjI0ZjAyMTFiODRjZWFkMCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWE1ZWRmMzg0MWMyNDdiYWIyNGYwMjExYjg0Y2VhZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9saXRoMTI1MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MaXRodWFuaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0NGUzNTg0ZjJjMDQ4NDI4YTM3YTVjYjMzOWM2ZDVhLnNldENvbnRlbnQoaHRtbF85YTVlZGYzODQxYzI0N2JhYjI0ZjAyMTFiODRjZWFkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wM2Q3N2U0MjFlZTU0YjkwYWYzNmNlMTBmOTE1Yzk0ZC5iaW5kUG9wdXAocG9wdXBfYjQ0ZTM1ODRmMmMwNDg0MjhhMzdhNWNiMzM5YzZkNWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4OGYzMDc0MTBlZDQ5NmFhZjhlMDUzMjg2ZDkzYmMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMCwgMjAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhNjNmYWIxYzBiMTQ2ZjFhNzY0NDEzMDA2ZDJhMjRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4YTEwOWE0YTg5MDQ0YzdhMTc5M2IxZjRlNzQwOGViID0gJChgPGRpdiBpZD0iaHRtbF8xOGExMDlhNGE4OTA0NGM3YTE3OTNiMWY0ZTc0MDhlYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rvc2sxMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcnRoZXJuIFRvc2sgQWxiYW5pYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWE2M2ZhYjFjMGIxNDZmMWE3NjQ0MTMwMDZkMmEyNGUuc2V0Q29udGVudChodG1sXzE4YTEwOWE0YTg5MDQ0YzdhMTc5M2IxZjRlNzQwOGViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ4OGYzMDc0MTBlZDQ5NmFhZjhlMDUzMjg2ZDkzYmMwLmJpbmRQb3B1cChwb3B1cF8xYTYzZmFiMWMwYjE0NmYxYTc2NDQxMzAwNmQyYTI0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNThmMjczMDE0MTYwNGU3ODg1MjNlMDk2YmU4OTQ0NTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zMjI0LCAyNC44Njk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTBmMTYyZmEyYmMyNDUyYThjYjU5M2Q2YTRiOWNhNmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTQzODgwNDM0M2RlNGQ4NmJjMzM4MDM1ZjczNjEzZTcgPSAkKGA8ZGl2IGlkPSJodG1sXzk0Mzg4MDQzNDNkZTRkODZiYzMzODAzNWY3MzYxM2U3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbW9kZTEyNDgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TW9kZXJuIEdyZWVrPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwZjE2MmZhMmJjMjQ1MmE4Y2I1OTNkNmE0YjljYTZhLnNldENvbnRlbnQoaHRtbF85NDM4ODA0MzQzZGU0ZDg2YmMzMzgwMzVmNzM2MTNlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OGYyNzMwMTQxNjA0ZTc4ODUyM2UwOTZiZTg5NDQ1My5iaW5kUG9wdXAocG9wdXBfNTBmMTYyZmEyYmMyNDUyYThjYjU5M2Q2YTRiOWNhNmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzOGM3MGYxZWEzNzRhZTQ4ZGQ0M2NjNDdiNDdhZjRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMCwgNDUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3NzAyY2M3OTlkNjQ3ZTk4OGY3MjlmZTZlZGVkNjQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1ZWJjMTY3YjlkNzRhNTdhNTM4ZGExYmM0Y2Q5YzZhID0gJChgPGRpdiBpZD0iaHRtbF84NWViYzE2N2I5ZDc0YTU3YTUzOGRhMWJjNGNkOWM2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMjM1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVhc3Rlcm4gQXJtZW5pYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjc3MDJjYzc5OWQ2NDdlOTg4ZjcyOWZlNmVkZWQ2NDYuc2V0Q29udGVudChodG1sXzg1ZWJjMTY3YjlkNzRhNTdhNTM4ZGExYmM0Y2Q5YzZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzOGM3MGYxZWEzNzRhZTQ4ZGQ0M2NjNDdiNDdhZjRhLmJpbmRQb3B1cChwb3B1cF82NzcwMmNjNzk5ZDY0N2U5ODhmNzI5ZmU2ZWRlZDY0NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ZiZTk0Zjg4OGQ0NDkwYmFiM2E1YjM4ZTM0Njg5M2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyOC42NTkzLCA1NS4xNTg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWIzZmI1MGEyMDFlNDAxMmJmNTJkYjY2N2M4YjAzM2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTNjMzY1ZmU5MzYyNDFmYWFjMWZjYzVhYTExODc3NzcgPSAkKGA8ZGl2IGlkPSJodG1sX2UzYzM2NWZlOTM2MjQxZmFhYzFmY2M1YWExMTg3Nzc3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvd2VzdDIzNjkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V2VzdGVybiBGYXJzaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YjNmYjUwYTIwMWU0MDEyYmY1MmRiNjY3YzhiMDMzZS5zZXRDb250ZW50KGh0bWxfZTNjMzY1ZmU5MzYyNDFmYWFjMWZjYzVhYTExODc3NzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ZiZTk0Zjg4OGQ0NDkwYmFiM2E1YjM4ZTM0Njg5M2IuYmluZFBvcHVwKHBvcHVwXzViM2ZiNTBhMjAxZTQwMTJiZjUyZGI2NjdjOGIwMzNlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOGZkM2Y0YjM2MzI0OWM5OTBhMDcwN2NmZmExYzY0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMxLjkxNTMsIDY5LjQ1MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYWM4NDE5MzA5NGU0NzJlYmZkZTU1ZTFiZWM5ODJlNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNDVkMTY3ZTc5N2I0ZmEyOGI5ODEwMTkzYjNhMDkwMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTQ1ZDE2N2U3OTdiNGZhMjhiOTgxMDE5M2IzYTA5MDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jZW50MTk3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DZW50cmFsIFBhc2h0bzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYWM4NDE5MzA5NGU0NzJlYmZkZTU1ZTFiZWM5ODJlNS5zZXRDb250ZW50KGh0bWxfMTQ1ZDE2N2U3OTdiNGZhMjhiOTgxMDE5M2IzYTA5MDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzhmZDNmNGIzNjMyNDljOTkwYTA3MDdjZmZhMWM2NGMuYmluZFBvcHVwKHBvcHVwX2NhYzg0MTkzMDk0ZTQ3MmViZmRlNTVlMWJlYzk4MmU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZWE5ZTM1NjZiNWY0MWZiYTg2MjFlYzM1ZGQzYTRjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjE2NjgyNSwgNzQuMzMwNDU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2EzNjZkM2YwOTU5NDk1YTg2Y2U1MDY0ZTZmYWI4MzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjYzMjg0OTUxZDdlNDZmYmI2NGEwODNiMzVhNWFjNDMgPSAkKGA8ZGl2IGlkPSJodG1sX2I2MzI4NDk1MWQ3ZTQ2ZmJiNjRhMDgzYjM1YTVhYzQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FzaDEyNzciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FzaG1pcmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2EzNjZkM2YwOTU5NDk1YTg2Y2U1MDY0ZTZmYWI4Mzcuc2V0Q29udGVudChodG1sX2I2MzI4NDk1MWQ3ZTQ2ZmJiNjRhMDgzYjM1YTVhYzQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFlYTllMzU2NmI1ZjQxZmJhODYyMWVjMzVkZDNhNGMwLmJpbmRQb3B1cChwb3B1cF8zYTM2NmQzZjA5NTk0OTVhODZjZTUwNjRlNmZhYjgzNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRmNDEwZDk2YzZjNDQ0NmEyZDdhZjY5N2JlMzJjMTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNS4wLCA3Ny4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjQ2NTZmNzQ2MTE1NDI0OTk4MjZmNjBhNTQzMDNlZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGI1MTI2ZWQ4YzNmNGY5NjlkMjIyMmFmZjlmNjQ1MzEgPSAkKGA8ZGl2IGlkPSJodG1sXzhiNTEyNmVkOGMzZjRmOTY5ZDIyMjJhZmY5ZjY0NTMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaGluZDEyNjkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SGluZGk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjQ2NTZmNzQ2MTE1NDI0OTk4MjZmNjBhNTQzMDNlZDkuc2V0Q29udGVudChodG1sXzhiNTEyNmVkOGMzZjRmOTY5ZDIyMjJhZmY5ZjY0NTMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0ZjQxMGQ5NmM2YzQ0NDZhMmQ3YWY2OTdiZTMyYzE5LmJpbmRQb3B1cChwb3B1cF82NDY1NmY3NDYxMTU0MjQ5OTgyNmY2MGE1NDMwM2VkOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2E0MTZiNTdmNzJmNDYyMWIzNGEzZGExZDhkYzMxYWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyNC4wLCA5MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGMwOTU4Yzg4MDA5NGMxMjg0YjdhYTBlODQ3NzY0NjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDBjNTFiNjY4ZmIxNGY0MjhhYjAyZmNhMWFkMDdhZTcgPSAkKGA8ZGl2IGlkPSJodG1sXzAwYzUxYjY2OGZiMTRmNDI4YWIwMmZjYTFhZDA3YWU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYmVuZzEyODAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QmVuZ2FsaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzA5NThjODgwMDk0YzEyODRiN2FhMGU4NDc3NjQ2OS5zZXRDb250ZW50KGh0bWxfMDBjNTFiNjY4ZmIxNGY0MjhhYjAyZmNhMWFkMDdhZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2E0MTZiNTdmNzJmNDYyMWIzNGEzZGExZDhkYzMxYWEuYmluZFBvcHVwKHBvcHVwXzBjMDk1OGM4ODAwOTRjMTI4NGI3YWEwZTg0Nzc2NDY5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMGJhNGYzMTFmZGQ0MjQ1OWJlZWRlN2I3ZmJiZTMwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzguMCwgODEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiYjkzMmRkZGRjYjQzZGNhMGM5NTY0YTY4ZWUzYzdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmYjRhMjA1OTc3NzQwZTRhODZhZGZhZWEwMTc3NTgxID0gJChgPGRpdiBpZD0iaHRtbF8zZmI0YTIwNTk3Nzc0MGU0YTg2YWRmYWVhMDE3NzU4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NpbmgxMjQ2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNpbmhhbGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGJiOTMyZGRkZGNiNDNkY2EwYzk1NjRhNjhlZTNjN2Yuc2V0Q29udGVudChodG1sXzNmYjRhMjA1OTc3NzQwZTRhODZhZGZhZWEwMTc3NTgxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YwYmE0ZjMxMWZkZDQyNDU5YmVlZGU3YjdmYmJlMzA1LmJpbmRQb3B1cChwb3B1cF84YmI5MzJkZGRkY2I0M2RjYTBjOTU2NGE2OGVlM2M3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDI5YWYyMmJiN2E3NDYwNGFhNjdkN2I5ZWU2ZGE2NmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4yNzg3LCAtMS4zMTYyMjAwMDAwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWZmYTgyNjFlMTlhNGFkOGJlYzg3MWJlYzIxMjkzNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDQ3YjI2YTI3MmZkNGI5M2JkNzAyYjRiN2JkYWZhMjMgPSAkKGA8ZGl2IGlkPSJodG1sXzA0N2IyNmEyNzJmZDRiOTNiZDcwMmI0YjdiZGFmYTIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYmFzcTEyNDgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QmFzcXVlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VmZmE4MjYxZTE5YTRhZDhiZWM4NzFiZWMyMTI5MzcwLnNldENvbnRlbnQoaHRtbF8wNDdiMjZhMjcyZmQ0YjkzYmQ3MDJiNGI3YmRhZmEyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMjlhZjIyYmI3YTc0NjA0YWE2N2Q3YjllZTZkYTY2Yy5iaW5kUG9wdXAocG9wdXBfZWZmYTgyNjFlMTlhNGFkOGJlYzg3MWJlYzIxMjkzNzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0ZDU3YjkzZTZiNzQwNDg5MmIwOTA0NjMxNmVhNGM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjQuNzYyOCwgMjUuNTU3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlZTM0MDIyNjU5ODQ1MjhhYjkyNGNmYWNlMDZhZDQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1MWI1YjQwODI3YTRjYjQ5OTE0ZmUxMjg0NzQ1NjEzID0gJChgPGRpdiBpZD0iaHRtbF9jNTFiNWI0MDgyN2E0Y2I0OTkxNGZlMTI4NDc0NTYxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Zpbm4xMzE4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZpbm5pc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGVlMzQwMjI2NTk4NDUyOGFiOTI0Y2ZhY2UwNmFkNDAuc2V0Q29udGVudChodG1sX2M1MWI1YjQwODI3YTRjYjQ5OTE0ZmUxMjg0NzQ1NjEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0ZDU3YjkzZTZiNzQwNDg5MmIwOTA0NjMxNmVhNGM4LmJpbmRQb3B1cChwb3B1cF8wZWUzNDAyMjY1OTg0NTI4YWI5MjRjZmFjZTA2YWQ0MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTlhZTRhNDliY2Q3NDYyZGFjYzMzMzE1NjE0ZDQ0Y2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1NS44MzA3LCA0OC40MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MGFjYjhkNzIxOTg0YTVkOWU5MGFhMmMzM2VhOGM0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTg5M2E4YjUwMTE0NGM0ODVmOTJjNjYwNzM2OTRhMyA9ICQoYDxkaXYgaWQ9Imh0bWxfOGE4OTNhOGI1MDExNDRjNDg1ZjkyYzY2MDczNjk0YTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9lYXN0MjMyOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5FYXN0ZXJuIE1hcmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODBhY2I4ZDcyMTk4NGE1ZDllOTBhYTJjMzNlYThjNGUuc2V0Q29udGVudChodG1sXzhhODkzYThiNTAxMTQ0YzQ4NWY5MmM2NjA3MzY5NGEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U5YWU0YTQ5YmNkNzQ2MmRhY2MzMzMxNTYxNGQ0NGNlLmJpbmRQb3B1cChwb3B1cF84MGFjYjhkNzIxOTg0YTVkOWU5MGFhMmMzM2VhOGM0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGY5MTcyYmM4NWQ4NDA3ZGFlM2IwMjNlZDQ2NDFkNjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NC4wNTI3LCA1NC45NDYwMDAwMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MmQyMDA2NjkxZGM0ZDk5YjI2MmQzZWFkZWYwNDY3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOGNjZTFlNzFiZDA0MGIzOWVlMDRkZjMxZjY3YmQ1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMThjY2UxZTcxYmQwNDBiMzllZTA0ZGYzMWY2N2JkNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb21pMTI2OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb21pLVp5cmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MmQyMDA2NjkxZGM0ZDk5YjI2MmQzZWFkZWYwNDY3ZS5zZXRDb250ZW50KGh0bWxfMThjY2UxZTcxYmQwNDBiMzllZTA0ZGYzMWY2N2JkNWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGY5MTcyYmM4NWQ4NDA3ZGFlM2IwMjNlZDQ2NDFkNjEuYmluZFBvcHVwKHBvcHVwXzYyZDIwMDY2OTFkYzRkOTliMjYyZDNlYWRlZjA0NjdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZDFjYjY1Yzk1ZmI0Nzk1OWYwMzJiYmYwYjhjODQ2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MDFiZmVhZGZjY2I0YjlhOTZjYzViMzY1NmY3ODkwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZmZiMWNiMGM0YmY0MGY5OGNlZTYyMTJlMWQzNzkzZSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2ZmYjFjYjBjNGJmNDBmOThjZWU2MjEyZTFkMzc5M2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9odW5nMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IdW5nYXJpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzAxYmZlYWRmY2NiNGI5YTk2Y2M1YjM2NTZmNzg5MGIuc2V0Q29udGVudChodG1sXzNmZmIxY2IwYzRiZjQwZjk4Y2VlNjIxMmUxZDM3OTNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFkMWNiNjVjOTVmYjQ3OTU5ZjAzMmJiZjBiOGM4NDY3LmJpbmRQb3B1cChwb3B1cF83MDFiZmVhZGZjY2I0YjlhOTZjYzViMzY1NmY3ODkwYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg0MTU0MDY3NjJlNDU0MTgwOGEyOTA2NTU1ZmI0OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2Mi40MzA4LCA2Ni4xMjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODMyNDg4ZjAzYzZhNDVmM2IxMDQ1ZTAyZWJjMjQxM2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjMyYzIxN2ZhYTBlNDA1Zjg5OWYwMzQyOTdiN2YzYzIgPSAkKGA8ZGl2IGlkPSJodG1sXzYzMmMyMTdmYWEwZTQwNWY4OTlmMDM0Mjk3YjdmM2MyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2hhbjEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2F6eW0tQmVyZXpvdmVyLVN1cnlza2FyZXIgS2hhbnR5PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzMjQ4OGYwM2M2YTQ1ZjNiMTA0NWUwMmViYzI0MTNkLnNldENvbnRlbnQoaHRtbF82MzJjMjE3ZmFhMGU0MDVmODk5ZjAzNDI5N2I3ZjNjMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iODQxNTQwNjc2MmU0NTQxODA4YTI5MDY1NTVmYjQ4ZS5iaW5kUG9wdXAocG9wdXBfODMyNDg4ZjAzYzZhNDVmM2IxMDQ1ZTAyZWJjMjQxM2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhZThkZmVkZDMyZDQ2ZTBiNjE2NWYxZDM1ZjFlMWYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjYuMTc3NSwgNzEuMDIzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxMGZlNGYyZWZmNjQzM2M5NzQzNmZkZGY5OTc5MjQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzN2QxOGVmM2ZkYjQ3MmM4NzE4ZTdmZjk3MjJjZGE3ID0gJChgPGRpdiBpZD0iaHRtbF8zMzdkMThlZjNmZGI0NzJjODcxOGU3ZmY5NzIyY2RhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25lbmUxMjQ5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1bmRyYSBOZW5ldHM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDEwZmU0ZjJlZmY2NDMzYzk3NDM2ZmRkZjk5NzkyNDIuc2V0Q29udGVudChodG1sXzMzN2QxOGVmM2ZkYjQ3MmM4NzE4ZTdmZjk3MjJjZGE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhhZThkZmVkZDMyZDQ2ZTBiNjE2NWYxZDM1ZjFlMWYwLmJpbmRQb3B1cChwb3B1cF8wMTBmZTRmMmVmZjY0MzNjOTc0MzZmZGRmOTk3OTI0MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzFmZjllYWI4Mzg1NDExOGFhY2Q2ODM1N2Q2ZDJiYWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGExNTdmYzI2NTVkNDdkOWEzNzA1YzE0ZWM2OWQxMTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzlmOWQ3ZTgzMDc1NGUyN2EwZjg2N2E4YzgzMmM5YjYgPSAkKGA8ZGl2IGlkPSJodG1sXzc5ZjlkN2U4MzA3NTRlMjdhMGY4NjdhOGM4MzJjOWI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVya2lzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYTE1N2ZjMjY1NWQ0N2Q5YTM3MDVjMTRlYzY5ZDExNS5zZXRDb250ZW50KGh0bWxfNzlmOWQ3ZTgzMDc1NGUyN2EwZjg2N2E4YzgzMmM5YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzFmZjllYWI4Mzg1NDExOGFhY2Q2ODM1N2Q2ZDJiYWUuYmluZFBvcHVwKHBvcHVwXzBhMTU3ZmMyNjU1ZDQ3ZDlhMzcwNWMxNGVjNjlkMTE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjNjNTA4OTI1NWM0ZmJlODZjMjkxYTQ1YWM0MjNmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjk3NzcsIDQ2LjQ3MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MmUwZDJhM2M2OWQ0OTY0YmQ1NjZjZGYzZmVlYmYyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZjIxMzY1ODAxZDc0MDZkYWRiOTMwZTIxYTc0YTQ4OSA9ICQoYDxkaXYgaWQ9Imh0bWxfOGYyMTM2NTgwMWQ3NDA2ZGFkYjkzMGUyMWE3NGE0ODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ub3J0MjY5NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ob3J0aCBBemVyYmFpamFuaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmUwZDJhM2M2OWQ0OTY0YmQ1NjZjZGYzZmVlYmYyNi5zZXRDb250ZW50KGh0bWxfOGYyMTM2NTgwMWQ3NDA2ZGFkYjkzMGUyMWE3NGE0ODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWIzYzUwODkyNTVjNGZiZTg2YzI5MWE0NWFjNDIzZjguYmluZFBvcHVwKHBvcHVwXzQyZTBkMmEzYzY5ZDQ5NjRiZDU2NmNkZjNmZWViZjI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzU5ZDE4OTg3ZDE0ZGY4YjAxZGU1OGFjNzI5MjZiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjAsIDc0LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZmU3ZTgwOWU0MDA0OTVkYmM4NWZlNWYxYWM1ZTBiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MGIwOTgyZGIwNGE0ZGUyOTY2OGNhNGM5OGYzMWI2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTBiMDk4MmRiMDRhNGRlMjk2NjhjYTRjOThmMzFiNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raXJnMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaXJnaGl6PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmZTdlODA5ZTQwMDQ5NWRiYzg1ZmU1ZjFhYzVlMGI0LnNldENvbnRlbnQoaHRtbF81MGIwOTgyZGIwNGE0ZGUyOTY2OGNhNGM5OGYzMWI2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNzU5ZDE4OTg3ZDE0ZGY4YjAxZGU1OGFjNzI5MjZiYi5iaW5kUG9wdXAocG9wdXBfOGZlN2U4MDllNDAwNDk1ZGJjODVmZTVmMWFjNWUwYjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EzYjg0MjFmZjBlZjQ2ZTZiYmI2MGU3NmMyYTM4NGM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTUuNDg2OTk5OTk5OTk5OTk1LCA0Ny4xNjMwMDAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZjMwODUzYTk2OTg0NzBmYjdlZjA2MTk3YzRkZWM4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOTdhYjdkMzQwYmY0YWFlOTVhOGI3OWE2OWVhNDA2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTk3YWI3ZDM0MGJmNGFhZTk1YThiNzlhNjllYTQwNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jaHV2MTI1NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DaHV2YXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmMzA4NTNhOTY5ODQ3MGZiN2VmMDYxOTdjNGRlYzg5LnNldENvbnRlbnQoaHRtbF8xOTdhYjdkMzQwYmY0YWFlOTVhOGI3OWE2OWVhNDA2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hM2I4NDIxZmYwZWY0NmU2YmJiNjBlNzZjMmEzODRjOS5iaW5kUG9wdXAocG9wdXBfZGYzMDg1M2E5Njk4NDcwZmI3ZWYwNjE5N2M0ZGVjODkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRhYjY1Y2RlZmMyYTRmZjRhZjdiNDEyNGFhMDIyMDE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjEuNjk3NCwgMTMzLjk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmMyOTZiOTNlMmM5NDZjNDhiY2MzNjNlMDk0YjM0MjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWJiM2U5ODE2ZDQwNGU3MDgwOTZiOTAyYjVmOGUwNTYgPSAkKGA8ZGl2IGlkPSJodG1sX2ViYjNlOTgxNmQ0MDRlNzA4MDk2YjkwMmI1ZjhlMDU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveWFrdTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FraGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmMyOTZiOTNlMmM5NDZjNDhiY2MzNjNlMDk0YjM0MjYuc2V0Q29udGVudChodG1sX2ViYjNlOTgxNmQ0MDRlNzA4MDk2YjkwMmI1ZjhlMDU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRhYjY1Y2RlZmMyYTRmZjRhZjdiNDEyNGFhMDIyMDE0LmJpbmRQb3B1cChwb3B1cF82YzI5NmI5M2UyYzk0NmM0OGJjYzM2M2UwOTRiMzQyNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzg0ZmMzNjY1ZjM3NDdiNWFiOTVlYjQ5MzIzZjVjYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4zMjQsIDEwNi4yODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTY3YWY5Njk3ODg0MGUyYjM5Y2MwNDZmZjdmNWUxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NzU3NzVlOTNiNzE0N2ZkODhmYTI0ZmQ5YmMwNDZiOSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzc1Nzc1ZTkzYjcxNDdmZDg4ZmEyNGZkOWJjMDQ2YjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYWxoMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYWxoIE1vbmdvbGlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YTY3YWY5Njk3ODg0MGUyYjM5Y2MwNDZmZjdmNWUxOS5zZXRDb250ZW50KGh0bWxfNzc1Nzc1ZTkzYjcxNDdmZDg4ZmEyNGZkOWJjMDQ2YjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzg0ZmMzNjY1ZjM3NDdiNWFiOTVlYjQ5MzIzZjVjYjMuYmluZFBvcHVwKHBvcHVwXzdhNjdhZjk2OTc4ODQwZTJiMzljYzA0NmZmN2Y1ZTE5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMzA5MjIwMjEwOGM0NTJlYmU5ZTZmZjVkYzkxYTI2OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzcwLjY2ODcsIDEzMC45MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODNmN2YyYzI4NmY0OGExOGIwMGRiNWNjZGZiMGE1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NjA0NzI1YzA0YWY0NDc3OWQ2MTM0ZGRhNDM2N2Y0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDYwNDcyNWMwNGFmNDQ3NzlkNjEzNGRkYTQzNjdmNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ldmVuMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5FdmVuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4M2Y3ZjJjMjg2ZjQ4YTE4YjAwZGI1Y2NkZmIwYTUwLnNldENvbnRlbnQoaHRtbF80NjA0NzI1YzA0YWY0NDc3OWQ2MTM0ZGRhNDM2N2Y0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMzA5MjIwMjEwOGM0NTJlYmU5ZTZmZjVkYzkxYTI2OC5iaW5kUG9wdXAocG9wdXBfMjgzZjdmMmMyODZmNDhhMThiMDBkYjVjY2RmYjBhNTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE3NWUzMjVjMTM5MjQ3NGI4MjY1MDgxYjAyZDgwMWMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNzAuNDk4LCAxNTcuODUyOTk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNmZjMTBmOWM3MzM0OTRjODk0YWNlZmYzYTM1NjZlZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YzQzZGVlYjRjMmU0NWNlOTY5MTg1N2QwYzAzYWFlNyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWM0M2RlZWI0YzJlNDVjZTk2OTE4NTdkMGMwM2FhZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ub3J0Mjc0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ob3J0aGVybiBZdWthZ2hpcjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNmZjMTBmOWM3MzM0OTRjODk0YWNlZmYzYTM1NjZlZC5zZXRDb250ZW50KGh0bWxfOWM0M2RlZWI0YzJlNDVjZTk2OTE4NTdkMGMwM2FhZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTc1ZTMyNWMxMzkyNDc0YjgyNjUwODFiMDJkODAxYzEuYmluZFBvcHVwKHBvcHVwXzI2ZmMxMGY5YzczMzQ5NGM4OTRhY2VmZjNhMzU2NmVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNWYzMTBkNDE5Mzg0MWMyOGU5OGRjZjlmMmQ1MjE5YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjU5LCAxNDAuNjgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTliM2E4Y2ZiZmZkNDU0OGE1ZWJlYzVlYjhjYzcyNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTFjZTRkYjYwYzRjNGU2OGEyMDliMWRkNjFhNjQwN2MgPSAkKGA8ZGl2IGlkPSJodG1sX2ExY2U0ZGI2MGM0YzRlNjhhMjA5YjFkZDYxYTY0MDdjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZ2lseTEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tml2a2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTliM2E4Y2ZiZmZkNDU0OGE1ZWJlYzVlYjhjYzcyNGEuc2V0Q29udGVudChodG1sX2ExY2U0ZGI2MGM0YzRlNjhhMjA5YjFkZDYxYTY0MDdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM1ZjMxMGQ0MTkzODQxYzI4ZTk4ZGNmOWYyZDUyMTlhLmJpbmRQb3B1cChwb3B1cF81OWIzYThjZmJmZmQ0NTQ4YTVlYmVjNWViOGNjNzI0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDFkZmQwZDZmN2JmNGJmZTliNDY3ZTFkZjUxY2M4YjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2OC42NDM2LCAxNzAuMDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODA2ZWIwODYxNjk2NDJjMWExZGRlN2ViYTc1ZGU1OWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGEwNjlkYWJlMGNlNDA1NDkwYTFiNTZlOTY2ODU3Y2MgPSAkKGA8ZGl2IGlkPSJodG1sXzBhMDY5ZGFiZTBjZTQwNTQ5MGExYjU2ZTk2Njg1N2NjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2h1azEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2h1a2NoaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MDZlYjA4NjE2OTY0MmMxYTFkZGU3ZWJhNzVkZTU5Yy5zZXRDb250ZW50KGh0bWxfMGEwNjlkYWJlMGNlNDA1NDkwYTFiNTZlOTY2ODU3Y2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDFkZmQwZDZmN2JmNGJmZTliNDY3ZTFkZjUxY2M4YjAuYmluZFBvcHVwKHBvcHVwXzgwNmViMDg2MTY5NjQyYzFhMWRkZTdlYmE3NWRlNTljKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNDMzNzNhNDY0NjM0YTlmOGUzNTMzM2NmZjcwZjUzNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYzMzY1NCwgMTQyLjQ2MTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzk2M2U1YTQ1MmYzNDZjMDgwMWRlYzAyMmZjZmY3MGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWFmNDliOWZmNjMzNGNhYzhhOGRmNzZmZTc3YTdkMjkgPSAkKGA8ZGl2IGlkPSJodG1sX2FhZjQ5YjlmZjYzMzRjYWM4YThkZjc2ZmU3N2E3ZDI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWludTEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SG9ra2FpZG8gQWludTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OTYzZTVhNDUyZjM0NmMwODAxZGVjMDIyZmNmZjcwZC5zZXRDb250ZW50KGh0bWxfYWFmNDliOWZmNjMzNGNhYzhhOGRmNzZmZTc3YTdkMjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTQzMzczYTQ2NDYzNGE5ZjhlMzUzMzNjZmY3MGY1MzUuYmluZFBvcHVwKHBvcHVwXzc5NjNlNWE0NTJmMzQ2YzA4MDFkZWMwMjJmY2ZmNzBkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjgzZWYyMTFhMjc0OGE1YmIwYTE0Mzc0YjI5ZGMxMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI3LjI3ODI2MywgOTMuNjc1NTI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZjN2M3IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODJhNWYxNzgwODVhNDJhMWE3M2Y2NzM2Y2U0MGQxMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTRhNTJlOWI3YzcyNDEzN2FmNmE2YWNlMTUxZTg2NzAgPSAkKGA8ZGl2IGlkPSJodG1sXzk0YTUyZTliN2M3MjQxMzdhZjZhNmFjZTE1MWU4NjcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnlpczEyMzYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tnlpc2hpLUhpbGwgTWlyaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MmE1ZjE3ODA4NWE0MmExYTczZjY3MzZjZTQwZDEyZC5zZXRDb250ZW50KGh0bWxfOTRhNTJlOWI3YzcyNDEzN2FmNmE2YWNlMTUxZTg2NzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGY4M2VmMjExYTI3NDhhNWJiMGExNDM3NGIyOWRjMTEuYmluZFBvcHVwKHBvcHVwXzgyYTVmMTc4MDg1YTQyYTFhNzNmNjczNmNlNDBkMTJkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMzZkMTQwYmRmZTc0NDEzOGU5YmFhOGY5ZjVjNGZhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjQ3NzEsIDEwNC4wMjYwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYzdjNyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2MDI3NTUxOGY3NDRkMmI5OWVjNGRkNzBjM2MzYTE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0NjBkNzA1OWNkZTQ2NmE5MzAwZmFiODBmNDA1YzcxID0gJChgPGRpdiBpZD0iaHRtbF9jNDYwZDcwNTljZGU0NjZhOTMwMGZhYjgwZjQwNWM3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dlc3QyNjUwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldlc3Rlcm4gQ2hhbTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NjAyNzU1MThmNzQ0ZDJiOTllYzRkZDcwYzNjM2ExNC5zZXRDb250ZW50KGh0bWxfYzQ2MGQ3MDU5Y2RlNDY2YTkzMDBmYWI4MGY0MDVjNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTM2ZDE0MGJkZmU3NDQxMzhlOWJhYThmOWY1YzRmYTkuYmluZFBvcHVwKHBvcHVwXzg2MDI3NTUxOGY3NDRkMmI5OWVjNGRkNzBjM2MzYTE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjAwNTc2YzgzOWI0YjVkODQyZDk4NTk3NjVlOTc4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01LjA3NDQ0LCAxNDEuNzMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZjN2M3IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWJhZjQ3YzUzOWVhNDkyNGJhYzg2ZGI1Mjg0MGMxMmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzY0OThiNjQwMjMyNDhjN2E5ZTJjMjdhZjQ1ZjFkZmEgPSAkKGA8ZGl2IGlkPSJodG1sX2M2NDk4YjY0MDIzMjQ4YzdhOWUyYzI3YWY0NWYxZGZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGVsZTEyNTYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGVsZWZvbDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYmFmNDdjNTM5ZWE0OTI0YmFjODZkYjUyODQwYzEyYy5zZXRDb250ZW50KGh0bWxfYzY0OThiNjQwMjMyNDhjN2E5ZTJjMjdhZjQ1ZjFkZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmIwMDU3NmM4MzliNGI1ZDg0MmQ5ODU5NzY1ZTk3OGMuYmluZFBvcHVwKHBvcHVwXzFiYWY0N2M1MzllYTQ5MjRiYWM4NmRiNTI4NDBjMTJjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzUwODBkMjZlNzQ0ZGFlOTNhYWYwYTg3ZmJmYjI0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjIxMDYsIC0xMTAuMDgyMDAwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmM3YzciLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NDA3OTRkZmQ3Y2M0NjI4OTljZGM1YmM0MGYzMGU2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Y2U5ODM0ZGNkOTA0Y2ZhYWExY2FjYTNkYjk4ZDhkNyA9ICQoYDxkaXYgaWQ9Imh0bWxfN2NlOTgzNGRjZDkwNGNmYWFhMWNhY2EzZGI5OGQ4ZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uYXZhMTI0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OYXZham88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQwNzk0ZGZkN2NjNDYyODk5Y2RjNWJjNDBmMzBlNmIuc2V0Q29udGVudChodG1sXzdjZTk4MzRkY2Q5MDRjZmFhYTFjYWNhM2RiOThkOGQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE3NTA4MGQyNmU3NDRkYWU5M2FhZjBhODdmYmZiMjQxLmJpbmRQb3B1cChwb3B1cF85NDA3OTRkZmQ3Y2M0NjI4OTljZGM1YmM0MGYzMGU2YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDBlOTgwMzgyMzliNDY2ZmJlNzQ1OTNiNmE2YzY0NWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFswLjMwNDE2LCAtNzAuMTY0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYzdjNyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzMzIzMDc1N2ZjNTQ0ZTRhZGQ0ODkwM2U0Mzc1MmU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1MTgxYTE3MGE5NjRhZDdhYWQ2ZjZlOTdhODE3NmU3ID0gJChgPGRpdiBpZD0iaHRtbF80NTE4MWExNzBhOTY0YWQ3YWFkNmY2ZTk3YTgxNzZlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dhaW0xMjU1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldhaW1haGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTMzMjMwNzU3ZmM1NDRlNGFkZDQ4OTAzZTQzNzUyZTkuc2V0Q29udGVudChodG1sXzQ1MTgxYTE3MGE5NjRhZDdhYWQ2ZjZlOTdhODE3NmU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwZTk4MDM4MjM5YjQ2NmZiZTc0NTkzYjZhNmM2NDVkLmJpbmRQb3B1cChwb3B1cF9lMzMyMzA3NTdmYzU0NGU0YWRkNDg5MDNlNDM3NTJlOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQ4YzY0ZDVkMjIyNDY2NWExMjkxNTY5YmYxODZhYzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMi4xNTkwMDAwMDAwMDAwMDAzLCAtNzIuMTQyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYzdjNyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1YjFkOTJmNzBkOTQxYmJhOWYxMmFkY2MzOWYxYmE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmNzk5ODcwZTIzMDQ2ZGY4MDIxZjk3NzNkY2RkYmJkID0gJChgPGRpdiBpZD0iaHRtbF85Zjc5OTg3MGUyMzA0NmRmODAyMWY5NzczZGNkZGJiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL29jYWkxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk9jYWluYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NWIxZDkyZjcwZDk0MWJiYTlmMTJhZGNjMzlmMWJhNy5zZXRDb250ZW50KGh0bWxfOWY3OTk4NzBlMjMwNDZkZjgwMjFmOTc3M2RjZGRiYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGQ4YzY0ZDVkMjIyNDY2NWExMjkxNTY5YmYxODZhYzYuYmluZFBvcHVwKHBvcHVwXzg1YjFkOTJmNzBkOTQxYmJhOWYxMmFkY2MzOWYxYmE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OGJjZGI5NzgzYmU0NTc3YjY3ZThkMTJkOTNkZDgyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjkzODU0LCAxMy4wNTIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZjN2M3IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjgyZjQxYmE0MTcxNGYwYWIxMmRkMWYwMGFkOTg0NGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2MxMWY0NjcyNDI2NDA5MGE1YmU0ZjE0MjQ2NTNlMmMgPSAkKGA8ZGl2IGlkPSJodG1sXzNjMTFmNDY3MjQyNjQwOTBhNWJlNGYxNDI0NjUzZTJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFyZzEyNjUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFyZ2hpIENlbnRyYWw8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjgyZjQxYmE0MTcxNGYwYWIxMmRkMWYwMGFkOTg0NGYuc2V0Q29udGVudChodG1sXzNjMTFmNDY3MjQyNjQwOTBhNWJlNGYxNDI0NjUzZTJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ4YmNkYjk3ODNiZTQ1NzdiNjdlOGQxMmQ5M2RkODI2LmJpbmRQb3B1cChwb3B1cF8yODJmNDFiYTQxNzE0ZjBhYjEyZGQxZjAwYWQ5ODQ0ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmNiNjg1MDEwNjIzNGIzYjgyOTE4YjcwMjg1NTEyNzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ljc3ODcwNCwgNDUuMTUyODU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZjN2M3IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjEzMjg4ZmNhZTgxNGNhMmJmMWZkNzczMWY3OWU2ZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDFlYTk1NDQwZmEzNDJmNDhhMzgyNjMyNzViZmVhMzIgPSAkKGA8ZGl2IGlkPSJodG1sX2QxZWE5NTQ0MGZhMzQyZjQ4YTM4MjYzMjc1YmZlYTMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc29tYTEyNTUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U29tYWxpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYxMzI4OGZjYWU4MTRjYTJiZjFmZDc3MzFmNzllNmY1LnNldENvbnRlbnQoaHRtbF9kMWVhOTU0NDBmYTM0MmY0OGEzODI2MzI3NWJmZWEzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mY2I2ODUwMTA2MjM0YjNiODI5MThiNzAyODU1MTI3MC5iaW5kUG9wdXAocG9wdXBfNjEzMjg4ZmNhZTgxNGNhMmJmMWZkNzczMWY3OWU2ZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2ZWNhMTdjNmNiZTQ1ODE5ZjBhOWJjZDMxODhkMzc0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS42NDc0NSwgLTAuNDMyMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmM3YzciLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNmQ0ZjIzMWU3NjA0Y2IyYTQ4MjgxYjcwYWQ1NWZlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNzFlOGNhZTI2Zjc0OTBmODk3YzViYzE5YWE4Y2Y3MSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjcxZThjYWUyNmY3NDkwZjg5N2M1YmMxOWFhOGNmNzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9kYWdiMTI0NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5EYWdiYW5pPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2ZDRmMjMxZTc2MDRjYjJhNDgyODFiNzBhZDU1ZmUwLnNldENvbnRlbnQoaHRtbF8yNzFlOGNhZTI2Zjc0OTBmODk3YzViYzE5YWE4Y2Y3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNmVjYTE3YzZjYmU0NTgxOWYwYTliY2QzMTg4ZDM3NC5iaW5kUG9wdXAocG9wdXBfYjZkNGYyMzFlNzYwNGNiMmE0ODI4MWI3MGFkNTVmZTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViNTc3ZDA5ODc2ODQyOTBiZmM2NjE1MTU1MjU0Y2Y4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTMuOTU4OTUsIDE0LjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmM3YzciLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDIzZWY4YWMwMzc0NzliYTAwMjBmMmNjYjVmYTVlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzIyYzM0MjBkNmE0MTljOTg1NWU0MmI0NjlkMDEyMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTcyMmMzNDIwZDZhNDE5Yzk4NTVlNDJiNDY5ZDAxMjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iZWVtMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CZWVtYmU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjQyM2VmOGFjMDM3NDc5YmEwMDIwZjJjY2I1ZmE1ZTAuc2V0Q29udGVudChodG1sX2U3MjJjMzQyMGQ2YTQxOWM5ODU1ZTQyYjQ2OWQwMTIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViNTc3ZDA5ODc2ODQyOTBiZmM2NjE1MTU1MjU0Y2Y4LmJpbmRQb3B1cChwb3B1cF8yNDIzZWY4YWMwMzc0NzliYTAwMjBmMmNjYjVmYTVlMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGNlYTE1NTMwNGVjNDYzZDgwMjBiZTExMWY4MzhiZjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjYxODk2LCAxNy42NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmM3YzciLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZjRiMzQ5YzI1YzI0ZjI5OTIzMzY2OGE0YjFlOTc1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NGRiMjM2MzNhNzI0YWRhOTc3ODIwNjM4YTdlM2E1NyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzRkYjIzNjMzYTcyNGFkYTk3NzgyMDYzOGE3ZTNhNTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9nYmF5MTI4NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HYmF5YS1Cb3NzYW5nb2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmY0YjM0OWMyNWMyNGYyOTkyMzM2NjhhNGIxZTk3NWEuc2V0Q29udGVudChodG1sXzc0ZGIyMzYzM2E3MjRhZGE5Nzc4MjA2MzhhN2UzYTU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhjZWExNTUzMDRlYzQ2M2Q4MDIwYmUxMTFmODM4YmY2LmJpbmRQb3B1cChwb3B1cF8yZjRiMzQ5YzI1YzI0ZjI5OTIzMzY2OGE0YjFlOTc1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzkzMGE1MzFiZDc4NDllN2JhZDFkYjVlODBkYzQ4ZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMi44MTQyLCAzMS44Mzc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZjN2M3IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2M2NjlmNTBkOWI2NDU5NGIwYTk4NzJlZWM1ZTU1YTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzUzOGVmZmEyYjlhNDkzMGE2Y2MxNzAyZTI1NDRlNzEgPSAkKGA8ZGl2IGlkPSJodG1sX2M1MzhlZmZhMmI5YTQ5MzBhNmNjMTcwMmUyNTQ0ZTcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9iaTEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9iaWluPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjNjY5ZjUwZDliNjQ1OTRiMGE5ODcyZWVjNWU1NWE2LnNldENvbnRlbnQoaHRtbF9jNTM4ZWZmYTJiOWE0OTMwYTZjYzE3MDJlMjU0NGU3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOTMwYTUzMWJkNzg0OWU3YmFkMWRiNWU4MGRjNDhkNy5iaW5kUG9wdXAocG9wdXBfN2M2NjlmNTBkOWI2NDU5NGIwYTk4NzJlZWM1ZTU1YTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiNjUyMGM4MGU2MjQ3Y2I5ZWU5OGQzNDU3MWM2OGNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjEuMTExOTk5OTk5OTk5OTk1LCA4Ljg4NjAwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYzdjNyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiYTgwODhhZWU0MzRiYzdhMzY0YjFhNTk1YzE0NmQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzNGRjZDUwMTYzYTQ3NzBhNzRjMmE5ZmZhMTc5OWY2ID0gJChgPGRpdiBpZD0iaHRtbF80MzRkY2Q1MDE2M2E0NzcwYTc0YzJhOWZmYTE3OTlmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25vcncxMjU5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcndlZ2lhbiBCb2ttw6VsPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiYTgwODhhZWU0MzRiYzdhMzY0YjFhNTk1YzE0NmQ4LnNldENvbnRlbnQoaHRtbF80MzRkY2Q1MDE2M2E0NzcwYTc0YzJhOWZmYTE3OTlmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYjY1MjBjODBlNjI0N2NiOWVlOThkMzQ1NzFjNjhjYi5iaW5kUG9wdXAocG9wdXBfMmJhODA4OGFlZTQzNGJjN2EzNjRiMWE1OTVjMTQ2ZDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdhMmNkMjg2YjU0ZTRiODE5ZDU5NzZkMDM0OGIyMmZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMCwgMTM1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmM3YzciLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MjFiZjQxMGQzMGM0OTAyOTZhNTM2NmI0OGExNTk5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82M2Y1Zjk2ZmFjMmQ0YTAzOWJjYWYxZTliMjY2ZDhkNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjNmNWY5NmZhYzJkNGEwMzliY2FmMWU5YjI2NmQ4ZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTY0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KYXBhbmVzZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MjFiZjQxMGQzMGM0OTAyOTZhNTM2NmI0OGExNTk5ZC5zZXRDb250ZW50KGh0bWxfNjNmNWY5NmZhYzJkNGEwMzliY2FmMWU5YjI2NmQ4ZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2EyY2QyODZiNTRlNGI4MTlkNTk3NmQwMzQ4YjIyZmUuYmluZFBvcHVwKHBvcHVwXzcyMWJmNDEwZDMwYzQ5MDI5NmE1MzY2YjQ4YTE1OTlkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZTJkMWIxNTdhZDc0YzUzOGYyZmViNTM0Y2Q3NDhkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjIxNjEsIDc0LjgyMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmFhYWEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YjNkZTY5NzhkNmM0Mjc3YWJkOGE4NjM0YzhiZjgyOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTBiYzllYzIzOGM0NTZmYjE2MGZiMDI3ODI5ZGVjNCA9ICQoYDxkaXYgaWQ9Imh0bWxfNWUwYmM5ZWMyMzhjNDU2ZmIxNjBmYjAyNzgyOWRlYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9idXJ1MTI5NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CdXJ1c2hhc2tpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViM2RlNjk3OGQ2YzQyNzdhYmQ4YTg2MzRjOGJmODI5LnNldENvbnRlbnQoaHRtbF81ZTBiYzllYzIzOGM0NTZmYjE2MGZiMDI3ODI5ZGVjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZTJkMWIxNTdhZDc0YzUzOGYyZmViNTM0Y2Q3NDhkYS5iaW5kUG9wdXAocG9wdXBfNWIzZGU2OTc4ZDZjNDI3N2FiZDhhODYzNGM4YmY4MjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4OTg4ODg0N2E0OTQwODdiMDcxNjUxYWQ2MjMzYmE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjkuODYyMSwgMTE5LjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczMDVkMTJjZTJjMDQ4MzE4Mjk2YmFjODU5Y2ViNzQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUyMjViMGU4Yjk3MTQ3NGVhNTkxODk2ZDU2OTNjNzQ0ID0gJChgPGRpdiBpZD0iaHRtbF81MjI1YjBlOGI5NzE0NzRlYTU5MTg5NmQ1NjkzYzc0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3d1Y2gxMjM2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPld1IENoaW5lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzMwNWQxMmNlMmMwNDgzMTgyOTZiYWM4NTljZWI3NDUuc2V0Q29udGVudChodG1sXzUyMjViMGU4Yjk3MTQ3NGVhNTkxODk2ZDU2OTNjNzQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4OTg4ODg0N2E0OTQwODdiMDcxNjUxYWQ2MjMzYmE4LmJpbmRQb3B1cChwb3B1cF83MzA1ZDEyY2UyYzA0ODMxODI5NmJhYzg1OWNlYjc0NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDM1YWIwMDFkMmJkNDI3ODk4NzU3NDNiOThhMGM5Y2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC43OTI2LCA5My45NjY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZhYWFhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjM3ZDRhMWQzYjdmNGZjYWEwYmYwNjUwMTEzZGRhNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVlYWM0ODE2OTUzNDkxMTlhNGVmMzExMDNjMjRjMGIgPSAkKGA8ZGl2IGlkPSJodG1sXzVlZWFjNDgxNjk1MzQ5MTE5YTRlZjMxMTAzYzI0YzBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnVybWVzZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMzdkNGExZDNiN2Y0ZmNhYTBiZjA2NTAxMTNkZGE2OC5zZXRDb250ZW50KGh0bWxfNWVlYWM0ODE2OTUzNDkxMTlhNGVmMzExMDNjMjRjMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDM1YWIwMDFkMmJkNDI3ODk4NzU3NDNiOThhMGM5Y2QuYmluZFBvcHVwKHBvcHVwX2YzN2Q0YTFkM2I3ZjRmY2FhMGJmMDY1MDExM2RkYTY4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZGI1MDIyYjJmZjE0ZDNjYjlkZDkyMjgzNjgwMDUwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3Ljk4NzIsIDk3LjcxMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmFhYWEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDlkNjhmZGMyOTQ0NzA5OTlmOWM5ZmMyM2UzOTJjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDU4YzJhZmM4N2M0ZmY3ODRiMWFkZjI1ZGVmOTgwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDQ1OGMyYWZjODdjNGZmNzg0YjFhZGYyNWRlZjk4MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zZ2F3MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TJ2dhdyBLYXJlbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDlkNjhmZGMyOTQ0NzA5OTlmOWM5ZmMyM2UzOTJjYS5zZXRDb250ZW50KGh0bWxfNDQ1OGMyYWZjODdjNGZmNzg0YjFhZGYyNWRlZjk4MDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2RiNTAyMmIyZmYxNGQzY2I5ZGQ5MjI4MzY4MDA1MDguYmluZFBvcHVwKHBvcHVwX2Q0OWQ2OGZkYzI5NDQ3MDk5OWY5YzlmYzIzZTM5MmNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNjliYWIxN2VkYzE0YTlkOWQ1NzcxODJiMzVlZTA5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy02LjU0MDc5LCAxNDUuNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmFhYWEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NGU5ZTNlMWE5NmM0ZjVmODVhNzU5NDlmN2NjMDY0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NWQ2YjhjMmZmNmY0Njc1OTYwMWFkMzQzYjgxN2MyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfODVkNmI4YzJmZjZmNDY3NTk2MDFhZDM0M2I4MTdjMmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hd2l5MTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Bd2l5YWFuYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NGU5ZTNlMWE5NmM0ZjVmODVhNzU5NDlmN2NjMDY0ZC5zZXRDb250ZW50KGh0bWxfODVkNmI4YzJmZjZmNDY3NTk2MDFhZDM0M2I4MTdjMmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjY5YmFiMTdlZGMxNGE5ZDlkNTc3MTgyYjM1ZWUwOTMuYmluZFBvcHVwKHBvcHVwXzU0ZTllM2UxYTk2YzRmNWY4NWE3NTk0OWY3Y2MwNjRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZjQ0MDY5MWE0Njc0M2VhYWU3MzdjNGJjMmVhMWMyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjgyMjgsIC0xMjMuMzE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZhYWFhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTcyMTcwODljMWZmNDNlNmEyM2M2Mzc5MWZiNWJmODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2M5YTg4NTEwZTI4NGI4YmFkNWUwZTBkMGI3OTc1OTkgPSAkKGA8ZGl2IGlkPSJodG1sXzdjOWE4ODUxMGUyODRiOGJhZDVlMGUwZDBiNzk3NTk5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FybzEzMDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2Fyb2s8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTcyMTcwODljMWZmNDNlNmEyM2M2Mzc5MWZiNWJmODUuc2V0Q29udGVudChodG1sXzdjOWE4ODUxMGUyODRiOGJhZDVlMGUwZDBiNzk3NTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNmNDQwNjkxYTQ2NzQzZWFhZTczN2M0YmMyZWExYzI5LmJpbmRQb3B1cChwb3B1cF9hNzIxNzA4OWMxZmY0M2U2YTIzYzYzNzkxZmI1YmY4NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTFlNzUwYmE0YTk1NGExOWI4MGYyNjdjMGRiOWZkYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC43ODczLCAtMTA2LjY2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4MDk5YWIxZDg2NzQzZTRiYzBkZThmMTFhMTJlYjNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwYzY1Njk5ZjU5YzQzOGRhY2RmZTU2NzQxYzI5MjliID0gJChgPGRpdiBpZD0iaHRtbF9hMGM2NTY5OWY1OWM0MzhkYWNkZmU1Njc0MWMyOTI5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NvdXQyOTYxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNvdXRoZXJuIFRpd2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzgwOTlhYjFkODY3NDNlNGJjMGRlOGYxMWExMmViM2Muc2V0Q29udGVudChodG1sX2EwYzY1Njk5ZjU5YzQzOGRhY2RmZTU2NzQxYzI5MjliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UxZTc1MGJhNGE5NTRhMTliODBmMjY3YzBkYjlmZGM1LmJpbmRQb3B1cChwb3B1cF8zODA5OWFiMWQ4Njc0M2U0YmMwZGU4ZjExYTEyZWIzYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjQ4YzE1ODg5ZWRiNDYwMjljZGEwZTg2YzAwNGQ0ZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMC4yMjc0LCAtOTkuNTU2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1YjFlZjdmZTM3YzQyZTVhMWYyOTQxNWNhNzFjYmRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkOWI4ZDk4ZGRkNjQ5N2Q4Yjc0MWRkM2EzNzM1NjUzID0gJChgPGRpdiBpZD0iaHRtbF8yZDliOGQ5OGRkZDY0OTdkOGI3NDFkZDNhMzczNTY1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21lenExMjM1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1lenF1aXRhbCBPdG9taTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNWIxZWY3ZmUzN2M0MmU1YTFmMjk0MTVjYTcxY2JkZi5zZXRDb250ZW50KGh0bWxfMmQ5YjhkOThkZGQ2NDk3ZDhiNzQxZGQzYTM3MzU2NTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjQ4YzE1ODg5ZWRiNDYwMjljZGEwZTg2YzAwNGQ0ZjEuYmluZFBvcHVwKHBvcHVwXzM1YjFlZjdmZTM3YzQyZTVhMWYyOTQxNWNhNzFjYmRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjJjZWFmNzVjMmU0YWVmODcxZjBhZjY0ZTRlNGY0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE5LjczNTcsIC0xMDAuMDE3OTk5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmFhYWEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MWY4MjhkNTQ4NTU0Y2I5YjdlOTkzMzA5MWZmMzU4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzAzNjViOTc3YTU0NmNjYTNiOTEyOTQ3MzU5MjFlMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMWMwMzY1Yjk3N2E1NDZjY2EzYjkxMjk0NzM1OTIxZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jZW50MjE0NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DZW50cmFsIE1hemFodWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODFmODI4ZDU0ODU1NGNiOWI3ZTk5MzMwOTFmZjM1OGYuc2V0Q29udGVudChodG1sXzFjMDM2NWI5NzdhNTQ2Y2NhM2I5MTI5NDczNTkyMWUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZiMmNlYWY3NWMyZTRhZWY4NzFmMGFmNjRlNGU0ZjQyLmJpbmRQb3B1cChwb3B1cF84MWY4MjhkNTQ4NTU0Y2I5YjdlOTkzMzA5MWZmMzU4ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGU5NzBkMTU5Y2Y5NDQ4NjlkNjg3NDlkMGY2NThlM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNy4wNzc3LCAtOTcuNTQzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1NTZiY2I2OTIyMDRhZThhZTFlNWE1YjQyMmUzNDFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhMjBmN2EwN2ZmYzQ3ZGU5YWZlNzFlMjM3ZWNlYmQ3ID0gJChgPGRpdiBpZD0iaHRtbF84YTIwZjdhMDdmZmM0N2RlOWFmZTcxZTIzN2VjZWJkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Nhbm0xMjk1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNhbiBNaWd1ZWwgRWwgR3JhbmRlIE1peHRlYzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNTU2YmNiNjkyMjA0YWU4YWUxZTVhNWI0MjJlMzQxZi5zZXRDb250ZW50KGh0bWxfOGEyMGY3YTA3ZmZjNDdkZTlhZmU3MWUyMzdlY2ViZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGU5NzBkMTU5Y2Y5NDQ4NjlkNjg3NDlkMGY2NThlM2EuYmluZFBvcHVwKHBvcHVwX2M1NTZiY2I2OTIyMDRhZThhZTFlNWE1YjQyMmUzNDFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODA2ODQzYjNkMjE0Y2NhOTZjOWNkMzE1OTM1N2UzNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjE1MTMsIDguNzgwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmZTkyNTZkYTQyYTRhM2JhNDg0MDA3OTcwYjVhYjBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxODMxNDVjZWM0ZTQ4MjBhZDQ1MDkxZjE2ZTJiMGM2ID0gJChgPGRpdiBpZD0iaHRtbF9jMTgzMTQ1Y2VjNGU0ODIwYWQ0NTA5MWYxNmUyYjBjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhdXMxMjU3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhdXNhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmZTkyNTZkYTQyYTRhM2JhNDg0MDA3OTcwYjVhYjBkLnNldENvbnRlbnQoaHRtbF9jMTgzMTQ1Y2VjNGU0ODIwYWQ0NTA5MWYxNmUyYjBjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iODA2ODQzYjNkMjE0Y2NhOTZjOWNkMzE1OTM1N2UzNy5iaW5kUG9wdXAocG9wdXBfY2ZlOTI1NmRhNDJhNGEzYmE0ODQwMDc5NzBiNWFiMGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YwOTI3ZWIxNzYzZjQzOWZiMzY3ZDg5N2NmMmQxOWFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbOS4zMjA0MiwgOS40NjE0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwNGFiNDZlYjFlMDRkMzA4YjA1NmY2OTMxNDBmMzVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkNTZiMDMwZGJjMjRkZDE4ZjgxZjQzMDEwZDkwYjNjID0gJChgPGRpdiBpZD0iaHRtbF83ZDU2YjAzMGRiYzI0ZGQxOGY4MWY0MzAxMGQ5MGIzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25nYXMxMjQwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5nYXM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTA0YWI0NmViMWUwNGQzMDhiMDU2ZjY5MzE0MGYzNWEuc2V0Q29udGVudChodG1sXzdkNTZiMDMwZGJjMjRkZDE4ZjgxZjQzMDEwZDkwYjNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YwOTI3ZWIxNzYzZjQzOWZiMzY3ZDg5N2NmMmQxOWFlLmJpbmRQb3B1cChwb3B1cF9lMDRhYjQ2ZWIxZTA0ZDMwOGIwNTZmNjkzMTQwZjM1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzMyZTllMmFmMzM4NGE4NmEyYWI1YmJlYzNlYzdhNzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4xOTk0OCwgMzUuMjkzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyNWQ3NmFkNjliZTRkODFhYzkwMzZmMDVjOGY1ZTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjZWMxMTVjNTFkMjQ1MWI5YzA3OWQ0ZTRkNzUyNDI5ID0gJChgPGRpdiBpZD0iaHRtbF9lY2VjMTE1YzUxZDI0NTFiOWMwNzlkNGU0ZDc1MjQyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2lyYXExMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPklyYXF3PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyNWQ3NmFkNjliZTRkODFhYzkwMzZmMDVjOGY1ZTcyLnNldENvbnRlbnQoaHRtbF9lY2VjMTE1YzUxZDI0NTFiOWMwNzlkNGU0ZDc1MjQyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMzJlOWUyYWYzMzg0YTg2YTJhYjViYmVjM2VjN2E3Ny5iaW5kUG9wdXAocG9wdXBfODI1ZDc2YWQ2OWJlNGQ4MWFjOTAzNmYwNWM4ZjVlNzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0ODMzOWJhZmU4YjQ2ZTc5Mzg1MTM4ODJmYTIyMTFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi45MjA0OCwgLTkuOTYxMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmFhYWEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NWQ3MTQzYjgxZWM0NTJiODU5NzJkYzQwNWI0NzlkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YmRhOGMxYzg5OGY0MWExYjljYjEwMGMwMDE2ZDExOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNWJkYThjMWM4OThmNDFhMWI5Y2IxMDBjMDAxNmQxMTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9saWJlMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MaWJlcmlhIEtwZWxsZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NWQ3MTQzYjgxZWM0NTJiODU5NzJkYzQwNWI0NzlkOC5zZXRDb250ZW50KGh0bWxfNWJkYThjMWM4OThmNDFhMWI5Y2IxMDBjMDAxNmQxMTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTQ4MzM5YmFmZThiNDZlNzkzODUxMzg4MmZhMjIxMWUuYmluZFBvcHVwKHBvcHVwXzc1ZDcxNDNiODFlYzQ1MmI4NTk3MmRjNDA1YjQ3OWQ4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjJlN2EyYzJiMjM0ZGI4Yjg3ZmY2NmMyZDBhMTZkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuMzQ3NTYsIC0xLjMzMjU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZhYWFhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGU2ZmE3OTU1NDcxNDNhYWI1NDIwNDgxNWZhMTRlMjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmJiYmY5NzFhNWRiNGQ3NGJkZTAzNTM5ZWNmYWU3YmMgPSAkKGA8ZGl2IGlkPSJodG1sXzJiYmJmOTcxYTVkYjRkNzRiZGUwMzUzOWVjZmFlN2JjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWthbjEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWthbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZTZmYTc5NTU0NzE0M2FhYjU0MjA0ODE1ZmExNGUyNi5zZXRDb250ZW50KGh0bWxfMmJiYmY5NzFhNWRiNGQ3NGJkZTAzNTM5ZWNmYWU3YmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWIyZTdhMmMyYjIzNGRiOGI4N2ZmNjZjMmQwYTE2ZDQuYmluZFBvcHVwKHBvcHVwX2RlNmZhNzk1NTQ3MTQzYWFiNTQyMDQ4MTVmYTE0ZTI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYzUyZDE3ODc2NGQ0YzdmODgyZDY1Y2JjNDYyODNjNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUuNjU0ODgsIC0wLjE4NTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZhYWFhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODZmMWUxODgyNWRmNDUzY2E4ZWE0ZDQ2NzA1NjkzYzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDVmN2U3ZjBjZGFlNDJjYWIxNzU3ZmU5MDljZDY4YzEgPSAkKGA8ZGl2IGlkPSJodG1sXzQ1ZjdlN2YwY2RhZTQyY2FiMTc1N2ZlOTA5Y2Q2OGMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZ2FhYTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODZmMWUxODgyNWRmNDUzY2E4ZWE0ZDQ2NzA1NjkzYzcuc2V0Q29udGVudChodG1sXzQ1ZjdlN2YwY2RhZTQyY2FiMTc1N2ZlOTA5Y2Q2OGMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjNTJkMTc4NzY0ZDRjN2Y4ODJkNjVjYmM0NjI4M2M1LmJpbmRQb3B1cChwb3B1cF84NmYxZTE4ODI1ZGY0NTNjYThlYTRkNDY3MDU2OTNjNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjM1MTExNzY0NTk4NDRiNGJmOGU4ZWY3NTk5OTdlMjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2LjQ2MDYxLCAwLjgxNDk3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE4N2MyZTNlYzFkZTRkNTlhYmFiNWQ2OGI0ZjQ4ODk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlYjI2ZTVjNjVhNjQ4YTZhZDlhY2UwODk3OWM2NDE0ID0gJChgPGRpdiBpZD0iaHRtbF8xZWIyNmU1YzY1YTY0OGE2YWQ5YWNlMDg5NzljNjQxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2V3ZWUxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkV3ZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xODdjMmUzZWMxZGU0ZDU5YWJhYjVkNjhiNGY0ODg5Ni5zZXRDb250ZW50KGh0bWxfMWViMjZlNWM2NWE2NDhhNmFkOWFjZTA4OTc5YzY0MTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjM1MTExNzY0NTk4NDRiNGJmOGU4ZWY3NTk5OTdlMjIuYmluZFBvcHVwKHBvcHVwXzE4N2MyZTNlYzFkZTRkNTlhYmFiNWQ2OGI0ZjQ4ODk2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNWY0NDQxZmEzZGI0ZDM2YTgxNzk2ZGM5NjE3MTZmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQuNjI3MDUsIDcuMjM0NDEwMDAwMDAwMDAwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA3NGM4YWJmYzg5OTQ3MmY4NzY1MDkzOGJhOWZmZWJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0YTE4MzdlNzk1OTRlNWZiOTEzMzU0MTRlOGFiZmYzID0gJChgPGRpdiBpZD0iaHRtbF83NGExODM3ZTc5NTk0ZTVmYjkxMzM1NDE0ZThhYmZmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNDE3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPklnYm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDc0YzhhYmZjODk5NDcyZjg3NjUwOTM4YmE5ZmZlYmUuc2V0Q29udGVudChodG1sXzc0YTE4MzdlNzk1OTRlNWZiOTEzMzU0MTRlOGFiZmYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y1ZjQ0NDFmYTNkYjRkMzZhODE3OTZkYzk2MTcxNmY3LmJpbmRQb3B1cChwb3B1cF8wNzRjOGFiZmM4OTk0NzJmODc2NTA5MzhiYTlmZmViZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODQxN2ZlZDk3M2Y2NGQyZThkZTRmOTc0ODFiYTczODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjUuMzMwNSwgMzEuMzUxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3ZmI0NTdlYjgxZTQ5OTRhNTI3ZmFlZTE3MThiODQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkMzgxOGIyM2FjMDQyOTBiMzljNTBiOTY4N2VkODVhID0gJChgPGRpdiBpZD0iaHRtbF82ZDM4MThiMjNhYzA0MjkwYjM5YzUwYjk2ODdlZDg1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3p1bHUxMjQ4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlp1bHU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTdmYjQ1N2ViODFlNDk5NGE1MjdmYWVlMTcxOGI4NDEuc2V0Q29udGVudChodG1sXzZkMzgxOGIyM2FjMDQyOTBiMzljNTBiOTY4N2VkODVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0MTdmZWQ5NzNmNjRkMmU4ZGU0Zjk3NDgxYmE3Mzg5LmJpbmRQb3B1cChwb3B1cF9lN2ZiNDU3ZWI4MWU0OTk0YTUyN2ZhZWUxNzE4Yjg0MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmY1YTc5YWFlODMzNDhjOTg3M2QwY2ZmZTQzMGNkNTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszLjAyMjQ1LCAzMC44NjQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZhYWFhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWMwZTg4OTU2YTk3NGZlMTg5NjVhYTA4OWZjYzBiZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzZmNjI2ZGRlYmYyNGQwNmI1N2Y4YTRkMDZlMThkMTggPSAkKGA8ZGl2IGlkPSJodG1sXzM2ZjYyNmRkZWJmMjRkMDZiNTdmOGE0ZDA2ZTE4ZDE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbHVnYjEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+THVnYmFyYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzBlODg5NTZhOTc0ZmUxODk2NWFhMDg5ZmNjMGJkOS5zZXRDb250ZW50KGh0bWxfMzZmNjI2ZGRlYmYyNGQwNmI1N2Y4YTRkMDZlMThkMTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmY1YTc5YWFlODMzNDhjOTg3M2QwY2ZmZTQzMGNkNTcuYmluZFBvcHVwKHBvcHVwXzFjMGU4ODk1NmE5NzRmZTE4OTY1YWEwODlmY2MwYmQ5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNGFjMTVjNzdkODI0ZjBhYjYzMDdiMWNhMTg1ZDA3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0wLjkzMjk2LCAzNC40ODk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZhYWFhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzM3NjQxMDMwNDhiNDRjY2I3NDZhYjE3MDE4YTlkMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDAxZWY2OGUzYTliNDUwMTk2NWIwYzVlYjI5MzUxNGEgPSAkKGA8ZGl2IGlkPSJodG1sXzQwMWVmNjhlM2E5YjQ1MDE5NjViMGM1ZWIyOTM1MTRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbHVvazEyMzYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+THVvIChLZW55YSBhbmQgVGFuemFuaWEpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczNzY0MTAzMDQ4YjQ0Y2NiNzQ2YWIxNzAxOGE5ZDMyLnNldENvbnRlbnQoaHRtbF80MDFlZjY4ZTNhOWI0NTAxOTY1YjBjNWViMjkzNTE0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNGFjMTVjNzdkODI0ZjBhYjYzMDdiMWNhMTg1ZDA3Yi5iaW5kUG9wdXAocG9wdXBfNzM3NjQxMDMwNDhiNDRjY2I3NDZhYjE3MDE4YTlkMzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UxZGU0MGQ3YTEwODQwYWRhNzgyODQ2Nzg4ZmE2OTQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzAuMDM2OCwgNzUuNjcwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmYWFhYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwYzk2ZDJmMDA5OTQxZmI4YTRiOTcyM2Y1ODdmYWQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlNjRjMGE0NzI3MTQ1Y2RiZGU1MWYxMjExZmZjNDA3ID0gJChgPGRpdiBpZD0iaHRtbF9lZTY0YzBhNDcyNzE0NWNkYmRlNTFmMTIxMWZmYzQwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BhbmoxMjU2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVhc3Rlcm4gUGFuamFiaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMGM5NmQyZjAwOTk0MWZiOGE0Yjk3MjNmNTg3ZmFkMi5zZXRDb250ZW50KGh0bWxfZWU2NGMwYTQ3MjcxNDVjZGJkZTUxZjEyMTFmZmM0MDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTFkZTQwZDdhMTA4NDBhZGE3ODI4NDY3ODhmYTY5NDIuYmluZFBvcHVwKHBvcHVwX2MwYzk2ZDJmMDA5OTQxZmI4YTRiOTcyM2Y1ODdmYWQyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNDYyOTBmOWZhYTU0ZjIzYTY3ZGRiZGEyOTBkNzIwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjAyMDksIDExNi4yMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjhlOGUiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTVhODhkMTM0Yzg0YmMyOWFhOGYyYzY1YTE2OTQwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYTdiNzU4NjQ1NjY0ZGM2OGY4NWQyYWJjZTgzMjUwYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMmE3Yjc1ODY0NTY2NGRjNjhmODVkMmFiY2U4MzI1MGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYW5kMTQxNSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYW5kYXJpbiBDaGluZXNlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1NWE4OGQxMzRjODRiYzI5YWE4ZjJjNjVhMTY5NDAwLnNldENvbnRlbnQoaHRtbF8yYTdiNzU4NjQ1NjY0ZGM2OGY4NWQyYWJjZTgzMjUwYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNDYyOTBmOWZhYTU0ZjIzYTY3ZGRiZGEyOTBkNzIwNC5iaW5kUG9wdXAocG9wdXBfYjU1YTg4ZDEzNGM4NGJjMjlhYThmMmM2NWExNjk0MDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1YWFlMWQ1NGFmNTQwNjU4ZDRjNzc0NzU0ZmNmYTU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjUuMCwgMTE2LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjhlOGUiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NWY4MDE4ZjVkYjk0NWI0YjljNjVlYWQ4N2YwYmUxYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNzQzMjY2ZDM3MTU0OTVkODcxY2IxNzM1Zjk1N2M1OSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTc0MzI2NmQzNzE1NDk1ZDg3MWNiMTczNWY5NTdjNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYWtrMTIzNiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYWtrYSBDaGluZXNlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1ZjgwMThmNWRiOTQ1YjRiOWM2NWVhZDg3ZjBiZTFhLnNldENvbnRlbnQoaHRtbF8xNzQzMjY2ZDM3MTU0OTVkODcxY2IxNzM1Zjk1N2M1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNWFhZTFkNTRhZjU0MDY1OGQ0Yzc3NDc1NGZjZmE1OC5iaW5kUG9wdXAocG9wdXBfNDVmODAxOGY1ZGI5NDViNGI5YzY1ZWFkODdmMGJlMWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyODNhMmY2M2U5OTQ1YjFhM2VmNWU2M2Q2MjQ1ZTVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTYuMzE2MzEsIDE0NS45OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjhlOGUiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMzQzYTM2NDA3N2I0NWUwOTRkMTU1ZTU4Mzc1ZDZhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZjQwOWE1OGZiN2M0YTE3OGRhMjk5MjgxZTUzNjUzYyA9ICQoYDxkaXYgaWQ9Imh0bWxfY2Y0MDlhNThmYjdjNGExNzhkYTI5OTI4MWU1MzY1M2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9nYWRzMTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HYWRzdXA8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjM0M2EzNjQwNzdiNDVlMDk0ZDE1NWU1ODM3NWQ2YTMuc2V0Q29udGVudChodG1sX2NmNDA5YTU4ZmI3YzRhMTc4ZGEyOTkyODFlNTM2NTNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyODNhMmY2M2U5OTQ1YjFhM2VmNWU2M2Q2MjQ1ZTVkLmJpbmRQb3B1cChwb3B1cF9iMzQzYTM2NDA3N2I0NWUwOTRkMTU1ZTU4Mzc1ZDZhMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTdjNzU5NTE4YWE0NDVlNGI1NGJjNzVmNTNkNWU1YzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OC4zNjM3LCAtMTEwLjgzMjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmY4ZThlIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGMwZTVkM2JiMGE0NGMyOWI0YzVkMWFjMzg1OTc3YjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjY5M2Q4NzFkMTE0NDBhZGE3NWZkMjc5NDU0MjU1MDEgPSAkKGA8ZGl2IGlkPSJodG1sX2Y2OTNkODcxZDExNDQwYWRhNzVmZDI3OTQ1NDI1NTAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2hpcDEyNjEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2hpcGV3eWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBjMGU1ZDNiYjBhNDRjMjliNGM1ZDFhYzM4NTk3N2I4LnNldENvbnRlbnQoaHRtbF9mNjkzZDg3MWQxMTQ0MGFkYTc1ZmQyNzk0NTQyNTUwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xN2M3NTk1MThhYTQ0NWU0YjU0YmM3NWY1M2Q1ZTVjOC5iaW5kUG9wdXAocG9wdXBfMGMwZTVkM2JiMGE0NGMyOWI0YzVkMWFjMzg1OTc3YjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzZTVkYjIxNTVlNTQyM2I4NjIxMzQ2MjU0OTdlMjU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuOTA1MywgLTEwNi4xMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjhlOGUiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNDJkZGZkMWYwNTI0YTU1YWQ2MTJhOWFlMDg5ZTE2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTJhYWM0MThhN2M0YzcxYTdhYjVlZDY5MDg3NjQyNiA9ICQoYDxkaXYgaWQ9Imh0bWxfY2EyYWFjNDE4YTdjNGM3MWE3YWI1ZWQ2OTA4NzY0MjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90ZXdhMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SaW8gR3JhbmRlIFRld2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQyZGRmZDFmMDUyNGE1NWFkNjEyYTlhZTA4OWUxNjIuc2V0Q29udGVudChodG1sX2NhMmFhYzQxOGE3YzRjNzFhN2FiNWVkNjkwODc2NDI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UzZTVkYjIxNTVlNTQyM2I4NjIxMzQ2MjU0OTdlMjU0LmJpbmRQb3B1cChwb3B1cF9mNDJkZGZkMWYwNTI0YTU1YWQ2MTJhOWFlMDg5ZTE2MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzBhYzhkNmU5MzA0NDk2YmE5OWY3NjZkYmM1ZTlmMWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC4wNTQxLCAtOTYuNjY1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmOGU4ZSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2YjYzZmU2MDQzNzQ4ZGFiMzJjMzIxMGEyYmZhOWRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViNmQ1OTE1YmFkNjRhOWU5YzVlYmJiMDIxNjBhZjU0ID0gJChgPGRpdiBpZD0iaHRtbF9lYjZkNTkxNWJhZDY0YTllOWM1ZWJiYjAyMTYwYWY1NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2NoaXExMjUwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkNoaXF1aWh1aXRsw6FuIE1hemF0ZWM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzZiNjNmZTYwNDM3NDhkYWIzMmMzMjEwYTJiZmE5ZGEuc2V0Q29udGVudChodG1sX2ViNmQ1OTE1YmFkNjRhOWU5YzVlYmJiMDIxNjBhZjU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwYWM4ZDZlOTMwNDQ5NmJhOTlmNzY2ZGJjNWU5ZjFmLmJpbmRQb3B1cChwb3B1cF8zNmI2M2ZlNjA0Mzc0OGRhYjMyYzMyMTBhMmJmYTlkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGM3Y2QwZWE5NTA0NGJmMmJkM2Y2NDEwMzBhYTZhMGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMC45ODE5LCAzNi42OTE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmY4ZThlIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWU2ZWUwMTEyNzM1NGE0OTg5NzkzMTQwNGMyMmNlNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjAzNGU5YzY5ZjMzNGRlZGE2NDBkOGJjMDMwNzA1NmYgPSAkKGA8ZGl2IGlkPSJodG1sX2IwMzRlOWM2OWYzMzRkZWRhNjQwZDhiYzAzMDcwNTZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYXduZzEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QXduZ2k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWU2ZWUwMTEyNzM1NGE0OTg5NzkzMTQwNGMyMmNlNzkuc2V0Q29udGVudChodG1sX2IwMzRlOWM2OWYzMzRkZWRhNjQwZDhiYzAzMDcwNTZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjN2NkMGVhOTUwNDRiZjJiZDNmNjQxMDMwYWE2YTBjLmJpbmRQb3B1cChwb3B1cF81ZTZlZTAxMTI3MzU0YTQ5ODk3OTMxNDA0YzIyY2U3OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTM5MjYyY2QxMTA4NDc3ZThlZjJiZjk1OTk3NjEwZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTMuNTM4MiwgMjIuMjkyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmOGU4ZSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwZGJkZGUzZjdmNTQwZGNiZjk5N2YxNWVmMTllMGZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5ZGFjYTExNmQxNTQxMTNhMDc1ZTU1OWFkZGRmZWIyID0gJChgPGRpdiBpZD0iaHRtbF8zOWRhY2ExMTZkMTU0MTEzYTA3NWU1NTlhZGRkZmViMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2x1dmExMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkx1dmFsZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MGRiZGRlM2Y3ZjU0MGRjYmY5OTdmMTVlZjE5ZTBmZS5zZXRDb250ZW50KGh0bWxfMzlkYWNhMTE2ZDE1NDExM2EwNzVlNTU5YWRkZGZlYjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTM5MjYyY2QxMTA4NDc3ZThlZjJiZjk1OTk3NjEwZTEuYmluZFBvcHVwKHBvcHVwXzYwZGJkZGUzZjdmNTQwZGNiZjk5N2YxNWVmMTllMGZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOWI0YmVlYWRmNmI0NTg1OGU3YjA1MDJlNzJiMDhmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjg4NjMsIDE2LjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjhlOGUiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZjBiM2NiNTQ1YjA0MDJjOWQ3Y2Y5MmRhMjJiMmU0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wODdjMDYxZWJjMTY0ZTMwOTVhZmFkYjNlMmNlZDkzZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDg3YzA2MWViYzE2NGUzMDk1YWZhZGIzZTJjZWQ5M2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9jZW50MjA1MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5DZW50cmFsIEthbnVyaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZjBiM2NiNTQ1YjA0MDJjOWQ3Y2Y5MmRhMjJiMmU0MS5zZXRDb250ZW50KGh0bWxfMDg3YzA2MWViYzE2NGUzMDk1YWZhZGIzZTJjZWQ5M2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTliNGJlZWFkZjZiNDU4NThlN2IwNTAyZTcyYjA4ZmQuYmluZFBvcHVwKHBvcHVwXzJmMGIzY2I1NDViMDQwMmM5ZDdjZjkyZGEyMmIyZTQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTU4Yjc0MTVkNTg0ODE0YTg1ODRmZjQxNDI5YjA0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjE0MTksIDM2LjQ1NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjhlOGUiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNDdlMDJiMTZmMTU0YTNmOWFhMTczNDhkYjlkOTg4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NmQ2MjQ3NDVjNjE0Y2EwYTdiODQ0MmY5NDc2MGVlOSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDZkNjI0NzQ1YzYxNGNhMGE3Yjg0NDJmOTQ3NjBlZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXNhMTMwMCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXNhaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNDdlMDJiMTZmMTU0YTNmOWFhMTczNDhkYjlkOTg4Ny5zZXRDb250ZW50KGh0bWxfNDZkNjI0NzQ1YzYxNGNhMGE3Yjg0NDJmOTQ3NjBlZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODk1OGI3NDE1ZDU4NDgxNGE4NTg0ZmY0MTQyOWIwNDYuYmluZFBvcHVwKHBvcHVwX2M0N2UwMmIxNmYxNTRhM2Y5YWExNzM0OGRiOWQ5ODg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MjIwYzZkMzk5MWM0ZDJjYmMxYWE0YzI1YjAzZDg2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIzLjAsIDExMy4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmY3MTcxIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTA2YWZmYjJiZGY5NGFlNjk1MTI1MTkxNzg2YWVhNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmYzNzRiNjAwZGIxNDlkOTk3ZjAzOThmNTY5OGJlNzMgPSAkKGA8ZGl2IGlkPSJodG1sX2JmMzc0YjYwMGRiMTQ5ZDk5N2YwMzk4ZjU2OThiZTczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVlYzEyMzUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVlIENoaW5lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTA2YWZmYjJiZGY5NGFlNjk1MTI1MTkxNzg2YWVhNTguc2V0Q29udGVudChodG1sX2JmMzc0YjYwMGRiMTQ5ZDk5N2YwMzk4ZjU2OThiZTczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyMjBjNmQzOTkxYzRkMmNiYzFhYTRjMjViMDNkODZmLmJpbmRQb3B1cChwb3B1cF9hMDZhZmZiMmJkZjk0YWU2OTUxMjUxOTE3ODZhZWE1OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmM4MWI4NGU1MDFiNDMyZWJlMjQ3NjE4NmFhMzhhYWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsyMS4yNzAxLCAxMDAuMjE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmY3MTcxIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2JlNmM4NjM3NTViNDk1ZjhmOGU0MGYzMzUyNTBjYzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTYzNzgwZDhmOGFhNDcwMjgyNGVmZDRkNTIzMmQ4ZTkgPSAkKGA8ZGl2IGlkPSJodG1sX2U2Mzc4MGQ4ZjhhYTQ3MDI4MjRlZmQ0ZDUyMzJkOGU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFodTEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFodTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYmU2Yzg2Mzc1NWI0OTVmOGY4ZTQwZjMzNTI1MGNjMS5zZXRDb250ZW50KGh0bWxfZTYzNzgwZDhmOGFhNDcwMjgyNGVmZDRkNTIzMmQ4ZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmM4MWI4NGU1MDFiNDMyZWJlMjQ3NjE4NmFhMzhhYWEuYmluZFBvcHVwKHBvcHVwXzNiZTZjODYzNzU1YjQ5NWY4ZjhlNDBmMzM1MjUwY2MxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDg1MmQwYzA2MmU0OTcxYWMwNzIxZjllOGIxZWVkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIwLjY4MTE4OCwgMTA1Ljc3NDA3MDk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmY1NTU1IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTRmN2JhNDY4MTRlNDJiNThhMGJlZGY3ZDBhNjBlYWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzM1ZTVjY2FmOTNhNDFkZjljZmQ3Yjc2OGMzMGIxZjcgPSAkKGA8ZGl2IGlkPSJodG1sX2MzNWU1Y2NhZjkzYTQxZGY5Y2ZkN2I3NjhjMzBiMWY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdmlldDEyNTIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VmlldG5hbWVzZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNGY3YmE0NjgxNGU0MmI1OGEwYmVkZjdkMGE2MGVhYy5zZXRDb250ZW50KGh0bWxfYzM1ZTVjY2FmOTNhNDFkZjljZmQ3Yjc2OGMzMGIxZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWQ4NTJkMGMwNjJlNDk3MWFjMDcyMWY5ZThiMWVlZDQuYmluZFBvcHVwKHBvcHVwX2U0ZjdiYTQ2ODE0ZTQyYjU4YTBiZWRmN2QwYTYwZWFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zN2M3MzcwYjc0NDM0NjE0OTU0OGUyMmEwYmZiMTZhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzIwLjgzLCAxMDEuMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZjU1NTUiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9hN2MxMmIzMzEzNzI0Yzc5ODJmODk1MGU4NTY3YWE0NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YTJjMGI2N2VmNDE0ZTFjOWViNmFjOTk3MmQxMGEyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YmU1MGJlYTdkMDM0NDQyYTkwN2YxNjUxMTI1YzY2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmJlNTBiZWE3ZDAzNDQ0MmE5MDdmMTY1MTEyNWM2NmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pdW1pMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JdSBNaWVuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhMmMwYjY3ZWY0MTRlMWM5ZWI2YWM5OTcyZDEwYTJjLnNldENvbnRlbnQoaHRtbF82YmU1MGJlYTdkMDM0NDQyYTkwN2YxNjUxMTI1YzY2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zN2M3MzcwYjc0NDM0NjE0OTU0OGUyMmEwYmZiMTZhMi5iaW5kUG9wdXAocG9wdXBfNGEyYzBiNjdlZjQxNGUxYzllYjZhYzk5NzJkMTBhMmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiMmNlODBmYzA1MzQ3OTE5ZDlhZWZhNTc1MDZhOTAzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjQuMTE2OSwgMTEwLjEwNjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmY1NTU1IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjM0Mzg5NTljYWZhNGNmNGJjZGMwYjYyMTVkMjJlMzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTBhYWU5NDUyOGEyNGFhZTllYTgyMDAzZjY5YzJjZGIgPSAkKGA8ZGl2IGlkPSJodG1sXzUwYWFlOTQ1MjhhMjRhYWU5ZWE4MjAwM2Y2OWMyY2RiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrazEyMzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFra2lhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzNDM4OTU5Y2FmYTRjZjRiY2RjMGI2MjE1ZDIyZTM4LnNldENvbnRlbnQoaHRtbF81MGFhZTk0NTI4YTI0YWFlOWVhODIwMDNmNjljMmNkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYjJjZTgwZmMwNTM0NzkxOWQ5YWVmYTU3NTA2YTkwMy5iaW5kUG9wdXAocG9wdXBfMjM0Mzg5NTljYWZhNGNmNGJjZGMwYjYyMTVkMjJlMzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljYjM5YWQwZjI3YTRkYTliNGI1YmQ4ZGEyOGNiNmNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTQuMTkyLCAxMDAuNjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmY1NTU1IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfYTdjMTJiMzMxMzcyNGM3OTgyZjg5NTBlODU2N2FhNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTU2ZDE5ZTY1ZWRhNDBlMGJkNTEzNDEzZGVmOTVmMmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmM5N2I4NzQ2M2IzNDNmMmI4MDM3ODY5MjNlYzk5NDYgPSAkKGA8ZGl2IGlkPSJodG1sX2ZjOTdiODc0NjNiMzQzZjJiODAzNzg2OTIzZWM5OTQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGhhaTEyNjEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGhhaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNTZkMTllNjVlZGE0MGUwYmQ1MTM0MTNkZWY5NWYyZi5zZXRDb250ZW50KGh0bWxfZmM5N2I4NzQ2M2IzNDNmMmI4MDM3ODY5MjNlYzk5NDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWNiMzlhZDBmMjdhNGRhOWI0YjViZDhkYTI4Y2I2Y2UuYmluZFBvcHVwKHBvcHVwX2U1NmQxOWU2NWVkYTQwZTBiZDUxMzQxM2RlZjk1ZjJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZjAxYWMwMGVmZGU0MmZhOGU5MTcyMWIyZDZmOWZkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzI0Ljg0ODQsIDEwNi4xODcwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmNTU1NSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4NjNiZjY5Yzg4YTQzMTU4N2JkNGEyNzA2YTc2ZDM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyMzVlYzIzMzBkYTQxMTZiYzk0OTk3N2MwOWE3YjBiID0gJChgPGRpdiBpZD0iaHRtbF85MjM1ZWMyMzMwZGE0MTE2YmM5NDk5NzdjMDlhN2IwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2JvdXkxMjQwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJvdXllaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jODYzYmY2OWM4OGE0MzE1ODdiZDRhMjcwNmE3NmQzNC5zZXRDb250ZW50KGh0bWxfOTIzNWVjMjMzMGRhNDExNmJjOTQ5OTc3YzA5YTdiMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGYwMWFjMDBlZmRlNDJmYThlOTE3MjFiMmQ2ZjlmZDEuYmluZFBvcHVwKHBvcHVwX2M4NjNiZjY5Yzg4YTQzMTU4N2JkNGEyNzA2YTc2ZDM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDA2YWFkZGUyZmU0MDNmYTJiNjMzOTJlM2ZiNmJkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zLjY2Mjg5LCAtNjkuODcyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2E3YzEyYjMzMTM3MjRjNzk4MmY4OTUwZTg1NjdhYTQ1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViZjhhY2VkMDNkZDQ1MjRiNWY5MzczMzNlOTMyOWJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjZjg5OGQ0MjEzODQ5ZWU4OTRhNTk3NjA2NGU1ZWU1ID0gJChgPGRpdiBpZD0iaHRtbF80Y2Y4OThkNDIxMzg0OWVlODk0YTU5NzYwNjRlNWVlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RpY3UxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpY3VuYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYmY4YWNlZDAzZGQ0NTI0YjVmOTM3MzMzZTkzMjliZi5zZXRDb250ZW50KGh0bWxfNGNmODk4ZDQyMTM4NDllZTg5NGE1OTc2MDY0ZTVlZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWQwNmFhZGRlMmZlNDAzZmEyYjYzMzkyZTNmYjZiZDcuYmluZFBvcHVwKHBvcHVwX2ViZjhhY2VkMDNkZDQ1MjRiNWY5MzczMzNlOTMyOWJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7ff624374550>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(df.language)\n",
    "m.colormap_colors = ('white', 'red')\n",
    "m.add_features(df.tones, numeric=True)\n",
    "m.legend_title = 'Tones'\n",
    "m.legend_position = 'bottomleft'\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Another example (slow due to large amount of data):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Moran, Steven & McCloy, Daniel (eds.) 2019.\n",
      "PHOIBLE 2.0.\n",
      "Jena: Max Planck Institute for the Science of Human History.\n",
      "(Available online at http://phoible.org, Accessed on 2019-06-13.)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>InventoryID</th>\n",
       "      <th>Glottocode</th>\n",
       "      <th>ISO6393</th>\n",
       "      <th>LanguageName</th>\n",
       "      <th>SpecificDialect</th>\n",
       "      <th>GlyphID</th>\n",
       "      <th>Phoneme</th>\n",
       "      <th>Allophones</th>\n",
       "      <th>Marginal</th>\n",
       "      <th>SegmentClass</th>\n",
       "      <th>...</th>\n",
       "      <th>retractedTongueRoot</th>\n",
       "      <th>advancedTongueRoot</th>\n",
       "      <th>periodicGlottalSource</th>\n",
       "      <th>epilaryngealSource</th>\n",
       "      <th>spreadGlottis</th>\n",
       "      <th>constrictedGlottis</th>\n",
       "      <th>fortis</th>\n",
       "      <th>raisedLarynxEjective</th>\n",
       "      <th>loweredLarynxImplosive</th>\n",
       "      <th>click</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7570</th>\n",
       "      <td>198</td>\n",
       "      <td>afad1236</td>\n",
       "      <td>aal</td>\n",
       "      <td>KOTOKO</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>0063+02BC</td>\n",
       "      <td>cʼ</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>False</td>\n",
       "      <td>consonant</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7802</th>\n",
       "      <td>206</td>\n",
       "      <td>ahte1237</td>\n",
       "      <td>aht</td>\n",
       "      <td>AHTNA</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>006B+02BC</td>\n",
       "      <td>kʼ</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>False</td>\n",
       "      <td>consonant</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7920</th>\n",
       "      <td>211</td>\n",
       "      <td>qawa1238</td>\n",
       "      <td>alc</td>\n",
       "      <td>QAWASQAR</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>006B+02BC</td>\n",
       "      <td>kʼ</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>False</td>\n",
       "      <td>consonant</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8131</th>\n",
       "      <td>218</td>\n",
       "      <td>hame1242</td>\n",
       "      <td>amf</td>\n",
       "      <td>HAMER</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>0071+02BC</td>\n",
       "      <td>qʼ</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>False</td>\n",
       "      <td>consonant</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8157</th>\n",
       "      <td>219</td>\n",
       "      <td>amha1245</td>\n",
       "      <td>amh</td>\n",
       "      <td>AMHARIC</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>006B+02B7+02BC</td>\n",
       "      <td>kʷʼ</td>\n",
       "      <td>~N/A~</td>\n",
       "      <td>False</td>\n",
       "      <td>consonant</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>+</td>\n",
       "      <td>-</td>\n",
       "      <td>-</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 48 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      InventoryID Glottocode ISO6393 LanguageName SpecificDialect  \\\n",
       "7570          198   afad1236     aal       KOTOKO           ~N/A~   \n",
       "7802          206   ahte1237     aht        AHTNA           ~N/A~   \n",
       "7920          211   qawa1238     alc     QAWASQAR           ~N/A~   \n",
       "8131          218   hame1242     amf        HAMER           ~N/A~   \n",
       "8157          219   amha1245     amh      AMHARIC           ~N/A~   \n",
       "\n",
       "             GlyphID Phoneme Allophones  Marginal SegmentClass  ...  \\\n",
       "7570       0063+02BC      cʼ      ~N/A~     False    consonant  ...   \n",
       "7802       006B+02BC      kʼ      ~N/A~     False    consonant  ...   \n",
       "7920       006B+02BC      kʼ      ~N/A~     False    consonant  ...   \n",
       "8131       0071+02BC      qʼ      ~N/A~     False    consonant  ...   \n",
       "8157  006B+02B7+02BC     kʷʼ      ~N/A~     False    consonant  ...   \n",
       "\n",
       "     retractedTongueRoot advancedTongueRoot periodicGlottalSource  \\\n",
       "7570                   0                  0                     -   \n",
       "7802                   0                  0                     -   \n",
       "7920                   0                  0                     -   \n",
       "8131                   0                  0                     -   \n",
       "8157                   0                  0                     -   \n",
       "\n",
       "     epilaryngealSource spreadGlottis constrictedGlottis fortis  \\\n",
       "7570                  -             -                  +      -   \n",
       "7802                  -             -                  +      -   \n",
       "7920                  -             -                  +      -   \n",
       "8131                  -             -                  +      -   \n",
       "8157                  -             -                  +      -   \n",
       "\n",
       "     raisedLarynxEjective loweredLarynxImplosive click  \n",
       "7570                    +                      -     -  \n",
       "7802                    +                      -     -  \n",
       "7920                    +                      -     -  \n",
       "8131                    +                      -     -  \n",
       "8157                    +                      -     -  \n",
       "\n",
       "[5 rows x 48 columns]"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = Phoible(subset='UPSID', aggregated=False).get_df()\n",
    "#Get all languages with ejectives\n",
    "df = df[df.raisedLarynxEjective == '+']\n",
    "#Remove duplicates\n",
    "df = df.drop_duplicates(subset='Glottocode')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzRkODg3MzM3YTJhZjQ3NGNiM2E2YjQxNjU5ZjVmMmMyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF80ZDg4NzMzN2EyYWY0NzRjYjNhNmI0MTY1OWY1ZjJjMiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IHRvcDogMjBweDsgbGVmdDogNDAlOyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MYW5ndWFnZXMgd2l0aCBFamVjdGl2ZXM8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgoKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KICAubWFwbGVnZW5kIC5sZWdlbmQtdGl0bGUgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiA5MCU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIHsKICAgIG1hcmdpbjogMDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIHBhZGRpbmc6IDA7CiAgICBmbG9hdDogbGVmdDsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIGxpIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICB9CiAgLm1hcGxlZ2VuZCB1bC5sZWdlbmQtbGFiZWxzIGxpIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDogbGVmdDsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAzMHB4OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIAogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIAogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zb3VyY2UgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBjb2xvcjogIzc3NzsKICAgIGNsZWFyOiBib3RoOwogICAgfQogIC5tYXBsZWdlbmQgYSB7CiAgICBjb2xvcjogIzc3NzsKICAgIH0KPC9zdHlsZT4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwXzRkODg3MzM3YTJhZjQ3NGNiM2E2YjQxNjU5ZjVmMmMyID0gTC5tYXAoCiAgICAgICAgJ21hcF80ZDg4NzMzN2EyYWY0NzRjYjNhNmI0MTY1OWY1ZjJjMicsIHsKICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICB6b29tOiAyLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzRkODg3MzM3YTJhZjQ3NGNiM2E2YjQxNjU5ZjVmMmMyKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzI3OTdkZmQ5MTE1MDQzNjI5OWNiOGRjMTE1YTgxZmVkID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8vc3RhbWVuLXRpbGVzLXtzfS5hLnNzbC5mYXN0bHkubmV0L3RlcnJhaW4ve3p9L3t4fS97eX0uanBnJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF80ZDg4NzMzN2EyYWY0NzRjYjNhNmI0MTY1OWY1ZjJjMik7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzRkODg3MzM3YTJhZjQ3NGNiM2E2YjQxNjU5ZjVmMmMyKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MWE2MTg5MjQzNWY0YjEyOGNjNjBlM2Q3ODZkNjYwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjA1NTEsIDE0LjYzNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjExYTMyYzcyY2Y0NDYwOWNmYTEzNWFhNTA1NzJiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYxLjcwNjgsIC0xNDQuODg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWI3OGViNmJhZThmNDI5ZjlmMGIwOWYzYTJmMWE3NDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNDkuMzAzMTk1LCAtNzQuNzA3NTM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2RhMDNjZDExZjgxNGZhNjkxYmRlZGY1NGZhMjQ1NmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1LjA2NTE1LCAzNi41MTc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWMzNzM0ZmVhNGFkNDdjNmFjMjdiNzVhMDVhOTk2NDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3YmQzYTRjNWU4MzRhNzhiNjM1YzU0ZDZjZjhjNDk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMzIzOSwgNDYuODI2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg0MDc2OGFkZmZiZDQyYTI4ZTgyOTI5MjQ3ZWUxOGQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNzA0NywgNDYuNTU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmI0ZWJjZmExNzJjNDQ2NmEzODM3MTU1ZWZiZDZmZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4xODA2LCA0NS4zNDM5OTk5OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYzFiOWE2MmY2MDY0YTVjYTU1MzQzMDNiYWExYTNlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjM0NDgsIC0xMjYuNjg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWU2ZDM5OWM4MmY3NGU5MGE5Mjk1ODFiMmM0NjgxMzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4xODI2LCAtOTguMjYzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QzNTAyN2I2NWI5ZDQ3NGVhYTU0ZmYxZGNhZWZmNTk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTguMzYzNywgLTExMC44MzIwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5YzY2ZjgwYzQ5NDRjY2NhNDkxOTBhYjBmNmI1ZWUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuNzk4MSwgLTEyMy4xNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTk5YzJjOThmYmM0NTQxYjkxZDhiMjI5OGVkZGE1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yLjE4NDMsIDQwLjM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjIxODNmM2U4YmJhNDNiYWIyYjg0Y2Q3ZWIyMmM4YzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2MC40MjMyLCAtMTQ0Ljc2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y0MDg3ZGY1Mzc1NzQ1MzdiYzY4YjA0OWIwMDkwZjVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi45NSwgMzcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2MWI2NGNjNDFjYjQzNzdiZGNhYTdjOTIwZjE5NTM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTEuMTUxMywgOC43ODA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWQxMGFhNDYzMmZmNGVlNTk5NDkxYmE0NjgyNDc4ZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1NC4wMDQ1MzIsIC0xMzIuMDc5MjU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjUwNDlmNGI5M2ViNDBhNzk0OTMyNDMxYWIxNDRmOTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy44MzExNSwgMzUuMDQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwOTExM2QzM2FlZjQwNzU4MDBjZWRkZGRmMjg3ODk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMDk4MiwgLTEyMy42OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5YTAzNmYxZTVjYzQwZDhhMDc0NDE3YjFmMjI3NGQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjEuNjE1MywgLTk4LjUwMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NWRkMGRmNTE2YjI0NWM3YjBmMGMzNTM3NzE1NTdkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjAsIDQ1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YmRkZGYyMTJlZDk0ZTVkYTA0NGMwNGJhOWJhOGZlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMuNjE0MDcsIDM0LjI1MDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYTY2ZDhkNTA0YjA0OWQ5OWNiMTMyMGZlZTlmZGRlZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00LjE5OTQ4LCAzNS4yOTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDBjZTVjMjJjYzZiNDMyNmI2M2JlZjYwYzExNmI2ODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Ni4wNDYxNzI5OTk5OTk5OTYsIDE1Ni4zMDcwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlOWY1ZGUwNGY1ZjQ1ZTdiYTEzMjlkMDY5NGVlMjE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjgwNDMxMDAwMDAwMDAwMSwgLTY0LjM1NzQ4MDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjcyNzQxYzI3MTA1NDRkOThiYmUwODhmYTFmMzk4NzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS42NjA5LCAtOTEuNjYzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjYmRmYzY1NDM1NDQ3MTBhYjNmN2FhZmNhOWM1ZTA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjc0MTkzOSwgLTc1LjgwOTIzMTAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODhlNjI3NzI2NWQ5NGY2Yzg0OWM3YmFhMjliYmI5ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS44NTAzOTY5OTk5OTk5OTQsIDQzLjc4NjEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjA0ZDViNzk0NjZjNDE1OGI3OWY0NmJhMjYxODI5MzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTBmMjFkMGZmOGY5NGMzNjhmZmQ1MDZmNTNhM2E2MjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjM0MDIxOTk5OTk5OTk5OTUsIDM2LjE3MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83M2M0ZjcwZmFkYjY0NTRmYTQxNTZjMWY5ZWY3MjgxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE1LjM3ODgsIC04OS4yNDUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjlkMDU0OGIzOGI0NGY2MDg1YjVlNmFlM2EzZjRlODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC45NDAzLCAtOTguOTA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MyNTVmZTVlNWRkMjRhZWU4MWQ0NDhlNzI1N2U4Nzc0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuOTczMywgLTEwNy41MTcwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3ZmZjZTQ5YWVkNTRlZjVhY2JlMDE3MTEyNTg0MGVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNTg2MSwgLTEyMS43MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNWYwMjRhNjQ5YTQ0MjcyYTA1NGQ0OGEwZjEyMmNlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS42ODgsIDIwLjc2NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZWI3YWIxN2VlOGU0N2UxYTMyODYwZTA4OWY4MTA5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjkyNjksIC0xMjcuMzA3OTk5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MGMxM2I0OWNmNGI0Nzk2OGI5MTdmYzI3NjYzYTBkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjEzMjgsIDQ3LjA4MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMzk3ZjU5MTIzOTQ0ZTg5YTY0NDdkZDQ1NWI1OWNjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjM2OTksIC0xMDMuOTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOGRlNjJkNWIwOWU0OTZmYjkyMDkzYTE0NmU3MzI1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjQyLCAtMTIyLjUyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkyNDViNWM3M2Q5YzRkMmViNmQxMjBjN2Y1NmFlNGE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNzM1NywgLTEwMC4wMTc5OTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwOWFiN2VhNjY0NjRiNmM4NWM5MWY1NDA1MDNjZjhiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4xNDA1LCAzNS41NzYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWM3OTUyNWJmM2QzNGE2N2E5YjhkNzdmODgwNGU4ZjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTQuMzcwNywgLTU5LjUxODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODc5ZmJiOWQzNjc0NmFlYTM0ZjkwM2YxYTAzZmU2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjIxMDYsIC0xMTAuMDgyMDAwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZTYzYWQ1MDcxNmU0YTBjYTE0MTMyMmE0MmRjNmRmZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjMwNzMsIC0xMTYuNDA3OTk5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNjM2ODM5NDQ1ZmU0NWYzOTMyOGRjYjE5ZTg1NGRjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQxMDIsIC0xMjAuNjQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDA1YzYxMTQ5NzI2NDEwNGJiMmYyMjk1OWQzN2M5OGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OS42NywgLTEyNi42N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1N2JmYWNmNTdlODQ1MmNhN2NhZDY5OGUxYmM2MzZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTM1NCwgLTEyMi41OTg5OTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmOWJhNjM3YjkwNDQ1OWRiOTBmM2Y0Y2I2MWZjNWQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIwLjkyMDEsIC02Ni4zMzMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGE0MDI3NGIzNDU1NGI5NWJmYzQzYjdmZWM1ODZhZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ny45MTA2LCAtMTI0LjYwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBhMzFmOTljNjI3NTQ2ZWU4YTVmMTg4MjI0ZWYxNjYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNjE4NywgNDcuMzI0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAyMTQ5MjQ3YTI2NzQxZGU4YzA4NzIxNjYwMjE4MmRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNGJiMDJlZmI5MTY0NWNjYjJhYTc3MWU5MTNiOTljMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjc1ODcsIC0xMjIuNzM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDc0ZGY0ZTJhODY0NDlmZWJmMmUyYzZhNGMwZGVlZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi40ODkyLCA1My45MTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNThjODExYzc2ZDNlNGE3M2I5ZWIwYzE4NzczMWFjYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNDcuNTc5NiwgLTY4LjMyMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMWZkYzA2MmZiMjM0YTZjOWNiY2ZjOWE2ZjdmY2MzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjM0OTQsIDM4LjIyMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYmE5NDdkNDYwMjg0NzFhYjI1ZGMxMTIwMzZiYjRmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YWJiNGU3ZTZiZWY0Mjk1YWNlNDRiNGU0MWZhYzIwYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjU5MTAzLCAtMTI4LjU0NDU0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwNWVhOTUzNWNiNzQxZjBiMThmNjExYzNhMTQ0YTEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuNDI3NywgLTEwNS42MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMDE5ZTc1M2EwZjk0OTM2YmI0ZGFiMDZiZjAyNWFhMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE2LjYzODQsIC05Mi4yNzg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjBhMWQ0NWNmZGYyNDBiNTkxMzg5ZDdjMmI0NzNmYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4yNSwgLTEyMi41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjZhMjBkYTQ3ZTRmNDZhZGI3NjkzNmU0MWY5NTA3ZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4wNjY1LCAtOTguMTgzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlOTUxZjg0MWRmOTRhNGVhM2FmZTc5N2Q1N2EwOGI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzE3NiwgLTEyMi40NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOTFkNjA2Y2FkODE0MWRhOWY4YTJmMjI0ZTYxMjFkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEwLjY0NzQsIDM0LjcwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NzJjNTMzMWI0Mzc0NDM1YmExMDhjMDBhZmVlYTIyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzguOTQxNjIsIDM0LjA5MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMGNiYzBiNDJkYzQ0ODhhYmU5NjVlZDAwMjhlNTE4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI3NjksIC0xMjEuNjA3OTk5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NzU2YTEyZjYxMmQ0ZjI4YWJlYWFmMzgyYjQyNjE0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2I3MzM2NzJmNGU1NDczOTliY2FhMDMwNTYzMDJmZjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS45NjE0NTk5OTk5OTk5OTUsIC05NS4wMzkzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5ZTEyMTc0ZTRmMTRjMWY5MjY3ZDBiYWNjMmMxMTk5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTI1LjMzMDUsIDMxLjM1MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMmY4NDc2MmJlZTg0YzNlOGZkMDZlODQ1ZjFjOWNlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAwNTYsIC0xMDguNzgyMDAwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNDI3ZjA2MmUwYmU0OWZiODg4NDZjN2I0YzJlNDVkNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjA1NTEsIDE0LjYzNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0OTNmOGRmODc5NjQyZDhiNmYxOTQ3ODk5NDhhYmEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlZjU4YTQ5MWY1ZTQyMGViOWM5OGFjOTdiY2JiOWVkID0gJChgPGRpdiBpZD0iaHRtbF9kZWY1OGE0OTFmNWU0MjBlYjljOThhYzk3YmNiYjllZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FmYWQxMjM2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFmYWRlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0OTNmOGRmODc5NjQyZDhiNmYxOTQ3ODk5NDhhYmEyLnNldENvbnRlbnQoaHRtbF9kZWY1OGE0OTFmNWU0MjBlYjljOThhYzk3YmNiYjllZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNDI3ZjA2MmUwYmU0OWZiODg4NDZjN2I0YzJlNDVkNS5iaW5kUG9wdXAocG9wdXBfMDQ5M2Y4ZGY4Nzk2NDJkOGI2ZjE5NDc4OTk0OGFiYTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkMTNjZDY4ZjA0MTQ2YjQ4NTQzMzI3YThkM2ZlMWNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjEuNzA2OCwgLTE0NC44ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0NzViOTYzNDAxNTRiMzE4MDgwMjBkZmY5YzIyN2Q2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2ZjhhOTc1NDMwZDRlNWZiYjkxZmZkODBmZTZmNThhID0gJChgPGRpdiBpZD0iaHRtbF82NmY4YTk3NTQzMGQ0ZTVmYmI5MWZmZDgwZmU2ZjU4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FodGUxMjM3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFodGVuYTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDc1Yjk2MzQwMTU0YjMxODA4MDIwZGZmOWMyMjdkNi5zZXRDb250ZW50KGh0bWxfNjZmOGE5NzU0MzBkNGU1ZmJiOTFmZmQ4MGZlNmY1OGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGQxM2NkNjhmMDQxNDZiNDg1NDMzMjdhOGQzZmUxY2UuYmluZFBvcHVwKHBvcHVwX2Q0NzViOTYzNDAxNTRiMzE4MDgwMjBkZmY5YzIyN2Q2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNWQ5MjE5NzY0ZTY0MzVlODM5MTI4MzZjNzkwMmZhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy00OS4zMDMxOTUsIC03NC43MDc1MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmYjgzMTg1ZTQ3YzQ2OTA5ZGE4MGY0YWVjNzk5YTJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwOTg5OWYyNmRiYjQ0NzZhZGU2YjllZDQzNGMzM2FjID0gJChgPGRpdiBpZD0iaHRtbF80MDk4OTlmMjZkYmI0NDc2YWRlNmI5ZWQ0MzRjMzNhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Fhd2ExMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlFhd2FzcWFyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmYjgzMTg1ZTQ3YzQ2OTA5ZGE4MGY0YWVjNzk5YTJjLnNldENvbnRlbnQoaHRtbF80MDk4OTlmMjZkYmI0NDc2YWRlNmI5ZWQ0MzRjMzNhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNWQ5MjE5NzY0ZTY0MzVlODM5MTI4MzZjNzkwMmZhMi5iaW5kUG9wdXAocG9wdXBfYWZiODMxODVlNDdjNDY5MDlkYTgwZjRhZWM3OTlhMmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhNDVkZDdmZjhlNjQ2NDk4OGEwZjcwZjk3MmY3NjA0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNS4wNjUxNSwgMzYuNTE3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjc1YzI2NzQ1ZWJhNGE3NGI3NzFlZjJmYWIzNjZiNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzIyNTg5ZTgwYjg5NDdmYTljOTFjNzhhMGE2OTBjYmMgPSAkKGA8ZGl2IGlkPSJodG1sXzcyMjU4OWU4MGI4OTQ3ZmE5YzkxYzc4YTBhNjkwY2JjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaGFtZTEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SGFtZXItQmFubmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjc1YzI2NzQ1ZWJhNGE3NGI3NzFlZjJmYWIzNjZiNDIuc2V0Q29udGVudChodG1sXzcyMjU4OWU4MGI4OTQ3ZmE5YzkxYzc4YTBhNjkwY2JjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhhNDVkZDdmZjhlNjQ2NDk4OGEwZjcwZjk3MmY3NjA0LmJpbmRQb3B1cChwb3B1cF82NzVjMjY3NDVlYmE0YTc0Yjc3MWVmMmZhYjM2NmI0MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2M0Zjc3MzRmZDY3NDM1ZThiNzU5M2Y4MjRlZmY0ZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGNmOWE2OTIwNTFlNDJmZTljOTA1MmE2MWQ4NGI2ZDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzUzMTgyNmI5OGE0NGQxMjkzNmQyMjA3MmYzYWQ4ZmQgPSAkKGA8ZGl2IGlkPSJodG1sXzc1MzE4MjZiOThhNDRkMTI5MzZkMjIwNzJmM2FkOGZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYW1oYTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QW1oYXJpYzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kY2Y5YTY5MjA1MWU0MmZlOWM5MDUyYTYxZDg0YjZkNy5zZXRDb250ZW50KGh0bWxfNzUzMTgyNmI5OGE0NGQxMjkzNmQyMjA3MmYzYWQ4ZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2M0Zjc3MzRmZDY3NDM1ZThiNzU5M2Y4MjRlZmY0ZTkuYmluZFBvcHVwKHBvcHVwX2RjZjlhNjkyMDUxZTQyZmU5YzkwNTJhNjFkODRiNmQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NDVlMzQ1ZGQ4ZWE0Y2E0OTNlMGZjYTk5NzU1YzZmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMyMzksIDQ2LjgyNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiMDNmNjNjMzJiNjRjNDg5M2U5NTQ1MGQwYTM5MDVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwYzI0NTQ4NWRjMzQyMGM5NmIwMzk2ZWVjZmViNTY5ID0gJChgPGRpdiBpZD0iaHRtbF85MGMyNDU0ODVkYzM0MjBjOTZiMDM5NmVlY2ZlYjU2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FyY2gxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFyY2hpPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiMDNmNjNjMzJiNjRjNDg5M2U5NTQ1MGQwYTM5MDVhLnNldENvbnRlbnQoaHRtbF85MGMyNDU0ODVkYzM0MjBjOTZiMDM5NmVlY2ZlYjU2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NDVlMzQ1ZGQ4ZWE0Y2E0OTNlMGZjYTk5NzU1YzZmYi5iaW5kUG9wdXAocG9wdXBfMGIwM2Y2M2MzMmI2NGM0ODkzZTk1NDUwZDBhMzkwNWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiYmE2ZmEyYTYyMzQ4ZjhiM2IzOWU5ODM1OTVkYWViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNzA0NywgNDYuNTU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NjRmYWU0MjEwNDQ0NjgzODEyZjQ3ZGVmMmM0NzM1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZGVjNzczOTg1ODI0YjAzYjI5MTM5YzVmMmNhYjY3MiA9ICQoYDxkaXYgaWQ9Imh0bWxfMWRlYzc3Mzk4NTgyNGIwM2IyOTEzOWM1ZjJjYWI2NzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hdmFyMTI1NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BdmFyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2NGZhZTQyMTA0NDQ2ODM4MTJmNDdkZWYyYzQ3MzVhLnNldENvbnRlbnQoaHRtbF8xZGVjNzczOTg1ODI0YjAzYjI5MTM5YzVmMmNhYjY3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYmJhNmZhMmE2MjM0OGY4YjNiMzllOTgzNTk1ZGFlYi5iaW5kUG9wdXAocG9wdXBfNTY0ZmFlNDIxMDQ0NDY4MzgxMmY0N2RlZjJjNDczNWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkZjZiZmFjYjAyZDQyNWI5ODIyYzY1NDg0MWZlMjM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMTgwNiwgNDUuMzQzOTk5OTk5OTk5OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYWQ3MmIzODI5ZDQ0NjhlYWYzZjU4YzNkNzViZjViZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NTg3NjI1ZDI0OTY0NDM0ODBiMTliMGU1YmQ2ZTYwYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzU4NzYyNWQyNDk2NDQzNDgwYjE5YjBlNWJkNmU2MGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9iYXRzMTI0MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CYXRzPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhZDcyYjM4MjlkNDQ2OGVhZjNmNThjM2Q3NWJmNWJmLnNldENvbnRlbnQoaHRtbF83NTg3NjI1ZDI0OTY0NDM0ODBiMTliMGU1YmQ2ZTYwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZGY2YmZhY2IwMmQ0MjViOTgyMmM2NTQ4NDFmZTIzOS5iaW5kUG9wdXAocG9wdXBfZGFkNzJiMzgyOWQ0NDY4ZWFmM2Y1OGMzZDc1YmY1YmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2YzBmZmUxNDdkZTQzM2NhYTM0MjI1MjdiZGIwN2NhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTIuMzQ0OCwgLTEyNi42ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3YzEyZGEyMTM3MDQwMDViNTAzYWVkMDAxYzU5ZWQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5NGJiM2I4MzUwYzQ5ZjhiMzUzODc4ZWI2ODRhZDYyID0gJChgPGRpdiBpZD0iaHRtbF9mOTRiYjNiODM1MGM0OWY4YjM1Mzg3OGViNjg0YWQ2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2JlbGwxMjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJlbGxhIENvb2xhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y3YzEyZGEyMTM3MDQwMDViNTAzYWVkMDAxYzU5ZWQxLnNldENvbnRlbnQoaHRtbF9mOTRiYjNiODM1MGM0OWY4YjM1Mzg3OGViNjg0YWQ2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNmMwZmZlMTQ3ZGU0MzNjYWEzNDIyNTI3YmRiMDdjYS5iaW5kUG9wdXAocG9wdXBfZjdjMTJkYTIxMzcwNDAwNWI1MDNhZWQwMDFjNTllZDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0NTA1Mjg0YTIyMzRmMzVhZDQ0MzdlMWIxMjdmM2NmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMTgyNiwgLTk4LjI2MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxMDQzYzM3ZDVhZTRkNjhiMzg0ODBhMDM5ZjNiN2JhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwMWRmZjBlNGFjYTRlMjFiOGVkODU1MjFlYTM1YjUyID0gJChgPGRpdiBpZD0iaHRtbF8yMDFkZmYwZTRhY2E0ZTIxYjhlZDg1NTIxZWEzNWI1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2NhZGQxMjU2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkNhZGRvPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxMDQzYzM3ZDVhZTRkNjhiMzg0ODBhMDM5ZjNiN2JhLnNldENvbnRlbnQoaHRtbF8yMDFkZmYwZTRhY2E0ZTIxYjhlZDg1NTIxZWEzNWI1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNDUwNTI4NGEyMjM0ZjM1YWQ0NDM3ZTFiMTI3ZjNjZi5iaW5kUG9wdXAocG9wdXBfODEwNDNjMzdkNWFlNGQ2OGIzODQ4MGEwMzlmM2I3YmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhZDY1YTNiNTRkYzQxOWFhMjliZmFmN2FjYzRiMmQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTguMzYzNywgLTExMC44MzIwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmFkMjc4ZmU3NDE3NDE3ZGE5YjkxMWNjYzZhZmM2ZjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDM0Y2I1ZmNlODM4NDFjMjk3YTg2ZGI3OTc1ZmRjY2IgPSAkKGA8ZGl2IGlkPSJodG1sX2QzNGNiNWZjZTgzODQxYzI5N2E4NmRiNzk3NWZkY2NiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2hpcDEyNjEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2hpcGV3eWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhZDI3OGZlNzQxNzQxN2RhOWI5MTFjY2M2YWZjNmY0LnNldENvbnRlbnQoaHRtbF9kMzRjYjVmY2U4Mzg0MWMyOTdhODZkYjc5NzVmZGNjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYWQ2NWEzYjU0ZGM0MTlhYTI5YmZhZjdhY2M0YjJkNS5iaW5kUG9wdXAocG9wdXBfNmFkMjc4ZmU3NDE3NDE3ZGE5YjkxMWNjYzZhZmM2ZjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM3NTg1MmE5NWM2MjQ5NTg4MjgwMWE2OGRmMTMxZDkzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuNzk4MSwgLTEyMy4xNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxNTJmZGQxNTdlYTRiOGNhODBiMGIwZGJhN2YyNmVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwZTM5ZDUyNjVjMDQ1ZTU4YWFhMTg1ZGFmMzZmNzZjID0gJChgPGRpdiBpZD0iaHRtbF9jMGUzOWQ1MjY1YzA0NWU1OGFhYTE4NWRhZjM2Zjc2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3VwcGUxNDM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlVwcGVyIENoZWhhbGlzPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQxNTJmZGQxNTdlYTRiOGNhODBiMGIwZGJhN2YyNmVjLnNldENvbnRlbnQoaHRtbF9jMGUzOWQ1MjY1YzA0NWU1OGFhYTE4NWRhZjM2Zjc2Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNzU4NTJhOTVjNjI0OTU4ODI4MDFhNjhkZjEzMWQ5My5iaW5kUG9wdXAocG9wdXBfNDE1MmZkZDE1N2VhNGI4Y2E4MGIwYjBkYmE3ZjI2ZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0ZjA3MjYyOGM0ZTRhYmM5YjJhZTBiOTlmZDFhZmVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIuMTg0MywgNDAuMzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1MTRhZTIxNWVkZTQwMjBhMTNiNGY0MzhjMTNhNmJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmMWY0YjQ2YTNjZjQyZjhhNzVhYWVjN2NjZTY3ZGM5ID0gJChgPGRpdiBpZD0iaHRtbF9jZjFmNGI0NmEzY2Y0MmY4YTc1YWFlYzdjY2U2N2RjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2RhaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkRhaGFsbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNTE0YWUyMTVlZGU0MDIwYTEzYjRmNDM4YzEzYTZiYy5zZXRDb250ZW50KGh0bWxfY2YxZjRiNDZhM2NmNDJmOGE3NWFhZWM3Y2NlNjdkYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzRmMDcyNjI4YzRlNGFiYzliMmFlMGI5OWZkMWFmZWEuYmluZFBvcHVwKHBvcHVwXzE1MTRhZTIxNWVkZTQwMjBhMTNiNGY0MzhjMTNhNmJjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YTNkMGE2ZGI3MDk0NGY3YTc0NWYwZmRkMzBiMmFjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYwLjQyMzIsIC0xNDQuNzYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYmM5NzEzZjU3MTk0ODcxOWIxNTc3NTg5MDZmZDA0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYmFkZWQ4NmRmYzA0MTJmOGExNzk2NTM1YmExMWI1MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWJhZGVkODZkZmMwNDEyZjhhMTc5NjUzNWJhMTFiNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9leWFrMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5FeWFrPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViYzk3MTNmNTcxOTQ4NzE5YjE1Nzc1ODkwNmZkMDRhLnNldENvbnRlbnQoaHRtbF9hYmFkZWQ4NmRmYzA0MTJmOGExNzk2NTM1YmExMWI1MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YTNkMGE2ZGI3MDk0NGY3YTc0NWYwZmRkMzBiMmFjNi5iaW5kUG9wdXAocG9wdXBfZWJjOTcxM2Y1NzE5NDg3MTliMTU3NzU4OTA2ZmQwNGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEzNmNmM2Q1NTE3MjQxMTJhOTY1MGY5Y2FmYWFiOTJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi45NSwgMzcuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGE1OWEwMmUyOGU5NDBkMWFkYTc3NjBhMzAzOWRhZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmY2MzM4OWJlZjljNGI2OTkwZTVmNzliNWVhMzUzNjIgPSAkKGA8ZGl2IGlkPSJodG1sX2ZmNjMzODliZWY5YzRiNjk5MGU1Zjc5YjVlYTM1MzYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZGF3cjEyMzYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RGF3cm88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGE1OWEwMmUyOGU5NDBkMWFkYTc3NjBhMzAzOWRhZDAuc2V0Q29udGVudChodG1sX2ZmNjMzODliZWY5YzRiNjk5MGU1Zjc5YjVlYTM1MzYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEzNmNmM2Q1NTE3MjQxMTJhOTY1MGY5Y2FmYWFiOTJjLmJpbmRQb3B1cChwb3B1cF84YTU5YTAyZTI4ZTk0MGQxYWRhNzc2MGEzMDM5ZGFkMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTRiOWExYjBjZmRkNGNlMmExOWYwOTQyMjc3ZWRjYTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS4xNTEzLCA4Ljc4MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk3NDNlZjQ3MjU4MzQyMWFiNTM4OGNlODVhZTEyN2ZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkNjEzYWQ4MGUwNTQ5YzBiZGM3MzFkYWUyNTc0NDc5ID0gJChgPGRpdiBpZD0iaHRtbF9jZDYxM2FkODBlMDU0OWMwYmRjNzMxZGFlMjU3NDQ3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhdXMxMjU3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhdXNhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk3NDNlZjQ3MjU4MzQyMWFiNTM4OGNlODVhZTEyN2ZiLnNldENvbnRlbnQoaHRtbF9jZDYxM2FkODBlMDU0OWMwYmRjNzMxZGFlMjU3NDQ3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNGI5YTFiMGNmZGQ0Y2UyYTE5ZjA5NDIyNzdlZGNhOS5iaW5kUG9wdXAocG9wdXBfOTc0M2VmNDcyNTgzNDIxYWI1Mzg4Y2U4NWFlMTI3ZmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyZGVhMzAzNDhkZTRkZTZhMmU2NjExNmFkNGM0OTAxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTQuMDA0NTMyLCAtMTMyLjA3OTI1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDk4NDYzZGI2MzgzNGU4NThkNWFhMWY4OGU0YTU1OTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmFkMmQ4ZDUxNjU3NDA1ODliZGZlYzA3ZDRhYjYwZjEgPSAkKGA8ZGl2IGlkPSJodG1sXzZhZDJkOGQ1MTY1NzQwNTg5YmRmZWMwN2Q0YWI2MGYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9ydDI5MzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9ydGhlcm4gSGFpZGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDk4NDYzZGI2MzgzNGU4NThkNWFhMWY4OGU0YTU1OTAuc2V0Q29udGVudChodG1sXzZhZDJkOGQ1MTY1NzQwNTg5YmRmZWMwN2Q0YWI2MGYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyZGVhMzAzNDhkZTRkZTZhMmU2NjExNmFkNGM0OTAxLmJpbmRQb3B1cChwb3B1cF9kOTg0NjNkYjYzODM0ZTg1OGQ1YWExZjg4ZTRhNTU5MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDAwMjFkMTI5OTg1NGU0NmJlY2E0NTZkOTk5OGEwNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMy44MzExNSwgMzUuMDQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjg3OTJhY2QxYTg3NDU4YTg2ZThmYzE1NmM1OGM1Y2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDQ2M2JmN2YwZjA4NDRhZjliNzg0ZGM5MDBmMGI0N2EgPSAkKGA8ZGl2IGlkPSJodG1sXzA0NjNiZjdmMGYwODQ0YWY5Yjc4NGRjOTAwZjBiNDdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaGFkejEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SGFkemE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjg3OTJhY2QxYTg3NDU4YTg2ZThmYzE1NmM1OGM1Y2Iuc2V0Q29udGVudChodG1sXzA0NjNiZjdmMGYwODQ0YWY5Yjc4NGRjOTAwZjBiNDdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwMDIxZDEyOTk4NTRlNDZiZWNhNDU2ZDk5OThhMDRiLmJpbmRQb3B1cChwb3B1cF82ODc5MmFjZDFhODc0NThhODZlOGZjMTU2YzU4YzVjYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmZhMWY3Njc0ZjU3NGY1OWJiYTU0OGQxZjc3ODY1YjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS4wOTgyLCAtMTIzLjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYWVmMjEyNGIyZWQ0OWQ3ODMwYWUwMTRmMDc5OTdkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMWQ5ZjEzM2MxODE0YTZiYTA3Zjk5YWMxM2RkYTc1MiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjFkOWYxMzNjMTgxNGE2YmEwN2Y5OWFjMTNkZGE3NTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9odXBhMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IdXBhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhZWYyMTI0YjJlZDQ5ZDc4MzBhZTAxNGYwNzk5N2Q4LnNldENvbnRlbnQoaHRtbF9iMWQ5ZjEzM2MxODE0YTZiYTA3Zjk5YWMxM2RkYTc1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZmExZjc2NzRmNTc0ZjU5YmJhNTQ4ZDFmNzc4NjViMy5iaW5kUG9wdXAocG9wdXBfMWFlZjIxMjRiMmVkNDlkNzgzMGFlMDE0ZjA3OTk3ZDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1MzUwOGM2MDk3ZDQ4YmNhNjk0NDI0OTYwMWVlOTY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMjEuNjE1MywgLTk4LjUwMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhYzU1YWI0NDg2ZDQwYmM5N2I2NjM3YmNhZjljYjlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5YWRlZGYwNTllZDQ3NGRiMjBmODRhOTgxMjFhYmZmID0gJChgPGRpdiBpZD0iaHRtbF85OWFkZWRmMDU5ZWQ0NzRkYjIwZjg0YTk4MTIxYWJmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2h1YXMxMjQyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkh1YXN0ZWM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWFjNTVhYjQ0ODZkNDBiYzk3YjY2MzdiY2FmOWNiOWYuc2V0Q29udGVudChodG1sXzk5YWRlZGYwNTllZDQ3NGRiMjBmODRhOTgxMjFhYmZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1MzUwOGM2MDk3ZDQ4YmNhNjk0NDI0OTYwMWVlOTY5LmJpbmRQb3B1cChwb3B1cF85YWM1NWFiNDQ4NmQ0MGJjOTdiNjYzN2JjYWY5Y2I5ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODMxNzI4ZTZmNDBjNGRiZDkyMTJjNzM2ZDcyMDFhZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4wLCA0NS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZTM2ODIzMjQzZGE0ZWI3YWVlYTBmMzQ2NWY5MTYwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYmU3YjQ2YjM3ZWI0YTQ4OWI5MGE1M2Q3ZWRkMGJmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfY2JlN2I0NmIzN2ViNGE0ODliOTBhNTNkN2VkZDBiZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTIzNSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5FYXN0ZXJuIEFybWVuaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlMzY4MjMyNDNkYTRlYjdhZWVhMGYzNDY1ZjkxNjA0LnNldENvbnRlbnQoaHRtbF9jYmU3YjQ2YjM3ZWI0YTQ4OWI5MGE1M2Q3ZWRkMGJmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MzE3MjhlNmY0MGM0ZGJkOTIxMmM3MzZkNzIwMWFmYy5iaW5kUG9wdXAocG9wdXBfZmUzNjgyMzI0M2RhNGViN2FlZWEwZjM0NjVmOTE2MDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxMGE4ZGI0NTM2NDQ2YzA5Yjc2Y2NlNzllNDQ1YzcwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMy42MTQwNywgMzQuMjUwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGQ3OThiZmI0ZjM1NGQ4YThkMjhiMzE1ZjRmMTY1MWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDBkZDdhODFhYTExNDY3Zjg1NTZmZjBiYjU2OTEzZTcgPSAkKGA8ZGl2IGlkPSJodG1sX2QwZGQ3YTgxYWExMTQ2N2Y4NTU2ZmYwYmI1NjkxM2U3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaWtrazEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SWs8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGQ3OThiZmI0ZjM1NGQ4YThkMjhiMzE1ZjRmMTY1MWMuc2V0Q29udGVudChodG1sX2QwZGQ3YTgxYWExMTQ2N2Y4NTU2ZmYwYmI1NjkxM2U3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYxMGE4ZGI0NTM2NDQ2YzA5Yjc2Y2NlNzllNDQ1YzcwLmJpbmRQb3B1cChwb3B1cF8wZDc5OGJmYjRmMzU0ZDhhOGQyOGIzMTVmNGYxNjUxYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWE4ZGFmMDVkNmEwNDgwZDk0ZDI0MWMyYTJmNzY0NDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNC4xOTk0OCwgMzUuMjkzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODFlN2MwYTdlNWE0NGNkYzhkYzBkNTk2Njk5MzE3MjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODQ4YWYxZDc4OGI3NDk4NTljYmQ5YWQ3N2JkYzk3YjIgPSAkKGA8ZGl2IGlkPSJodG1sXzg0OGFmMWQ3ODhiNzQ5ODU5Y2JkOWFkNzdiZGM5N2IyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXJhcTEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXJhcXc8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODFlN2MwYTdlNWE0NGNkYzhkYzBkNTk2Njk5MzE3MjEuc2V0Q29udGVudChodG1sXzg0OGFmMWQ3ODhiNzQ5ODU5Y2JkOWFkNzdiZGM5N2IyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFhOGRhZjA1ZDZhMDQ4MGQ5NGQyNDFjMmEyZjc2NDQ5LmJpbmRQb3B1cChwb3B1cF84MWU3YzBhN2U1YTQ0Y2RjOGRjMGQ1OTY2OTkzMTcyMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzI3MmRmNjMxMDZlNGQyODhmOTkyZTI1NWIzMjYwZWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1Ni4wNDYxNzI5OTk5OTk5OTYsIDE1Ni4zMDcwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDFjMDk5NTkwOTM1NGNlMmI5ZTQzYWQxODMxMGMyZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDNmN2MzYThmYjVlNDFlNjk5NDg1OGZiY2E1ODFhMzEgPSAkKGA8ZGl2IGlkPSJodG1sXzAzZjdjM2E4ZmI1ZTQxZTY5OTQ4NThmYmNhNTgxYTMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXRlbDEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+V2VzdCBJdGVsbWVuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxYzA5OTU5MDkzNTRjZTJiOWU0M2FkMTgzMTBjMmVjLnNldENvbnRlbnQoaHRtbF8wM2Y3YzNhOGZiNWU0MWU2OTk0ODU4ZmJjYTU4MWEzMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MjcyZGY2MzEwNmU0ZDI4OGY5OTJlMjU1YjMyNjBlZi5iaW5kUG9wdXAocG9wdXBfZDFjMDk5NTkwOTM1NGNlMmI5ZTQzYWQxODMxMGMyZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg3NjEwNzgxOTUxNjQ5YzNiZjhkZGY4NmMxNTNjNjFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTEyLjgwNDMxMDAwMDAwMDAwMSwgLTY0LjM1NzQ4MDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOTgwYmNlYzBmZGE0NzVhYWYzZGVkNWM3OTBmYmM3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YmQyMzc2ODlkYWI0MDQ3YTRmMmViNWE4ZjVmMWYxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfOGJkMjM3Njg5ZGFiNDA0N2E0ZjJlYjVhOGY1ZjFmMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pdG9uMTI1MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JdG9uYW1hPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5ODBiY2VjMGZkYTQ3NWFhZjNkZWQ1Yzc5MGZiYzcyLnNldENvbnRlbnQoaHRtbF84YmQyMzc2ODlkYWI0MDQ3YTRmMmViNWE4ZjVmMWYxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NzYxMDc4MTk1MTY0OWMzYmY4ZGRmODZjMTUzYzYxZS5iaW5kUG9wdXAocG9wdXBfYjk4MGJjZWMwZmRhNDc1YWFmM2RlZDVjNzkwZmJjNzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxMzdkNjRkMGY4NzQ5Mjc5Nzk4N2I2NjEzOTY1NjE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTUuNjYwOSwgLTkxLjY2MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NjYWQ1MmMyYzEyOTQ0Y2M4YjNhNDUwZTdlNzVmYWU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwZjIwZjYzOWY1NjQyNzVhOWQ3ZTllZDU3NjRhZjY1ID0gJChgPGRpdiBpZD0iaHRtbF80MGYyMGY2MzlmNTY0Mjc1YTlkN2U5ZWQ1NzY0YWY2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvcHQxMjM1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvcHRpJzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jY2FkNTJjMmMxMjk0NGNjOGIzYTQ1MGU3ZTc1ZmFlNi5zZXRDb250ZW50KGh0bWxfNDBmMjBmNjM5ZjU2NDI3NWE5ZDdlOWVkNTc2NGFmNjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjEzN2Q2NGQwZjg3NDkyNzk3OTg3YjY2MTM5NjU2MTcuYmluZFBvcHVwKHBvcHVwX2NjYWQ1MmMyYzEyOTQ0Y2M4YjNhNDUwZTdlNzVmYWU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZjRjMzc5NmE5NzQ0OGMzODZiMDdiNGM0ZjU1ZDM1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMi43NDE5MzksIC03NS44MDkyMzEwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWRmZTY2OGE4NGVmNGFiMzg2MDAzYjhiNmUxNTNiNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTM1ZGEzOTFhZTU4NGI2ZGJmOTkyYzc3ZmFlNTY5ODUgPSAkKGA8ZGl2IGlkPSJodG1sX2UzNWRhMzkxYWU1ODRiNmRiZjk5MmM3N2ZhZTU2OTg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvamFxYTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmFxYXJ1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkZmU2NjhhODRlZjRhYjM4NjAwM2I4YjZlMTUzYjQyLnNldENvbnRlbnQoaHRtbF9lMzVkYTM5MWFlNTg0YjZkYmY5OTJjNzdmYWU1Njk4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZjRjMzc5NmE5NzQ0OGMzODZiMDdiNGM0ZjU1ZDM1MS5iaW5kUG9wdXAocG9wdXBfNWRmZTY2OGE4NGVmNGFiMzg2MDAzYjhiNmUxNTNiNDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2ZGNkNTE0MmFlNzRlMDJhNDQxYzIwMGI5MGU0ZGU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDFiYjY3ZWFlZjliNDg3YjkxODYyM2E2NDBjNmM0OTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDAwNzBkODBlMjBmNGNjYmJmMzA3MDg4MGEyYjdiYzggPSAkKGA8ZGl2IGlkPSJodG1sXzAwMDcwZDgwZTIwZjRjY2JiZjMwNzA4ODBhMmI3YmM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2VvcmdpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDFiYjY3ZWFlZjliNDg3YjkxODYyM2E2NDBjNmM0OTUuc2V0Q29udGVudChodG1sXzAwMDcwZDgwZTIwZjRjY2JiZjMwNzA4ODBhMmI3YmM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2ZGNkNTE0MmFlNzRlMDJhNDQxYzIwMGI5MGU0ZGU3LmJpbmRQb3B1cChwb3B1cF80MWJiNjdlYWVmOWI0ODdiOTE4NjIzYTY0MGM2YzQ5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDhkMjQ5Y2UyODlhNDg2OGIzMTYzYjFhMmFmNjk4OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYzQzNDBjMTAwYTA0MmYwOGYyNDVkNDZlZDVmOTZhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOGQyNDliNDg5OGM0NTExYWIxNTU5NDhhYzUwZTUyYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDhkMjQ5YjQ4OThjNDUxMWFiMTU1OTQ4YWM1MGU1MmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmM0MzQwYzEwMGEwNDJmMDhmMjQ1ZDQ2ZWQ1Zjk2YTEuc2V0Q29udGVudChodG1sX2Q4ZDI0OWI0ODk4YzQ1MTFhYjE1NTk0OGFjNTBlNTJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA4ZDI0OWNlMjg5YTQ4NjhiMzE2M2IxYTJhZjY5ODhlLmJpbmRQb3B1cChwb3B1cF8yYzQzNDBjMTAwYTA0MmYwOGYyNDVkNDZlZDVmOTZhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmVjMmE4MDRiOTA2NGYyYWE3N2QwYTNmY2VlYmM4YTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjM0MDIxOTk5OTk5OTk5OTUsIDM2LjE3MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlMzU1OTllOGNiNjQ5MDFhMTc0NGEyZjk4ODFjNWQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmMGUzZDUzNWY1NjQ3NjU4NjQzN2M1NTc5MmQzMDI0ID0gJChgPGRpdiBpZD0iaHRtbF84ZjBlM2Q1MzVmNTY0NzY1ODY0MzdjNTU3OTJkMzAyNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thZmExMjQyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthZmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2UzNTU5OWU4Y2I2NDkwMWExNzQ0YTJmOTg4MWM1ZDEuc2V0Q29udGVudChodG1sXzhmMGUzZDUzNWY1NjQ3NjU4NjQzN2M1NTc5MmQzMDI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlYzJhODA0YjkwNjRmMmFhNzdkMGEzZmNlZWJjOGE1LmJpbmRQb3B1cChwb3B1cF8zZTM1NTk5ZThjYjY0OTAxYTE3NDRhMmY5ODgxYzVkMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjBiYTNmOGE5YzcwNDQ3MWFlNGIyMWVhNmExMmZiYzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxNS4zNzg4LCAtODkuMjQ1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmZhZmZlNjNhZWYyNGFlNWFiN2JkODgzOTM4MzU3ZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTgyOTNlYjYyYjJiNDAzM2IzZDhjZGJmNzZmMTM3OTYgPSAkKGA8ZGl2IGlkPSJodG1sXzU4MjkzZWI2MmIyYjQwMzNiM2Q4Y2RiZjc2ZjEzNzk2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2VrYzEyNDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2VrY2jDrTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZmFmZmU2M2FlZjI0YWU1YWI3YmQ4ODM5MzgzNTdkOC5zZXRDb250ZW50KGh0bWxfNTgyOTNlYjYyYjJiNDAzM2IzZDhjZGJmNzZmMTM3OTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjBiYTNmOGE5YzcwNDQ3MWFlNGIyMWVhNmExMmZiYzYuYmluZFBvcHVwKHBvcHVwX2ZmYWZmZTYzYWVmMjRhZTVhYjdiZDg4MzkzODM1N2Q4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNmY5MzRlNzM0YTY0OWRjYTVjODBlYTM0ODg3M2ZlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0Ljk0MDMsIC05OC45MDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zN2I4MmUxNWMzZTA0OGYxOTAxZjYwMzliZGNmZmI1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMzExNmViMmQwYWE0MjRmYWMyMWE2OGE2ZWUwYzRkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjMxMTZlYjJkMGFhNDI0ZmFjMjFhNjhhNmVlMGM0ZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raW93MTI2NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaW93YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zN2I4MmUxNWMzZTA0OGYxOTAxZjYwMzliZGNmZmI1ZS5zZXRDb250ZW50KGh0bWxfMjMxMTZlYjJkMGFhNDI0ZmFjMjFhNjhhNmVlMGM0ZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzZmOTM0ZTczNGE2NDlkY2E1YzgwZWEzNDg4NzNmZTMuYmluZFBvcHVwKHBvcHVwXzM3YjgyZTE1YzNlMDQ4ZjE5MDFmNjAzOWJkY2ZmYjVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NWNjOWYzMTNhMmQ0ZjNmODM2OGI1NTIxNGNhZGZlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0Ljk3MzMsIC0xMDcuNTE3MDAwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhZTk0NjgwZTgxNDQ3ZWE5MjNiN2Y5ZTJjZGI5NzVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4NzVjZjY3YmNjZjRhNzg5MjQ1MWI5N2IyYjVkZmMyID0gJChgPGRpdiBpZD0iaHRtbF82ODc1Y2Y2N2JjY2Y0YTc4OTI0NTFiOTdiMmI1ZGZjMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dlc3QyNjMyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldlc3Rlcm4gS2VyZXM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGFlOTQ2ODBlODE0NDdlYTkyM2I3ZjllMmNkYjk3NWMuc2V0Q29udGVudChodG1sXzY4NzVjZjY3YmNjZjRhNzg5MjQ1MWI5N2IyYjVkZmMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk1Y2M5ZjMxM2EyZDRmM2Y4MzY4YjU1MjE0Y2FkZmViLmJpbmRQb3B1cChwb3B1cF9kYWU5NDY4MGU4MTQ0N2VhOTIzYjdmOWUyY2RiOTc1YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2RmOWQ4NGZkMmIzNDk2Zjk2NzYzNjlkYmM3OTRkOWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi41ODYxLCAtMTIxLjcwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGVhYzkwNDZlNWUzNDc4ZmJhMTRlNjJmZmE0MzEwYzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQ3ZjU0OTQ4Y2QyNGI4OWJiZDM2ODQ5NmY3YjUwYjMgPSAkKGA8ZGl2IGlkPSJodG1sXzRkN2Y1NDk0OGNkMjRiODliYmQzNjg0OTZmN2I1MGIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2xhbTEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2xhbWF0aC1Nb2RvYzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZWFjOTA0NmU1ZTM0NzhmYmExNGU2MmZmYTQzMTBjNS5zZXRDb250ZW50KGh0bWxfNGQ3ZjU0OTQ4Y2QyNGI4OWJiZDM2ODQ5NmY3YjUwYjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2RmOWQ4NGZkMmIzNDk2Zjk2NzYzNjlkYmM3OTRkOWMuYmluZFBvcHVwKHBvcHVwXzBlYWM5MDQ2ZTVlMzQ3OGZiYTE0ZTYyZmZhNDMxMGM1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZDQ4YzU5MjcwZmU0OTJmYjIxNjYyN2ZhMDg2ZjRkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xOS42ODgsIDIwLjc2NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1N2ZkYTJmY2YxODQ5NjY4NDg0YzJkMDU1NTVkYzAwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmYmM1ZjdiYzNlYzQ0MTA4N2MyNGFkZTc2ODBmNDc4ID0gJChgPGRpdiBpZD0iaHRtbF85ZmJjNWY3YmMzZWM0NDEwODdjMjRhZGU3NjgwZjQ3OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2p1aG8xMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNvdXRoLUVhc3Rlcm4gSnU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzU3ZmRhMmZjZjE4NDk2Njg0ODRjMmQwNTU1NWRjMDAuc2V0Q29udGVudChodG1sXzlmYmM1ZjdiYzNlYzQ0MTA4N2MyNGFkZTc2ODBmNDc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNkNDhjNTkyNzBmZTQ5MmZiMjE2NjI3ZmEwODZmNGRhLmJpbmRQb3B1cChwb3B1cF9jNTdmZGEyZmNmMTg0OTY2ODQ4NGMyZDA1NTU1ZGMwMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmVmMjRmZjRhNTdmNDMwNjliNmE5OWRkNWM1ZGM1YWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC45MjY5LCAtMTI3LjMwNzk5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNGE2MTgzYzNlMWE0ZGQ4OTg1OWI5YjAyMjBkNjFiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOTUwMDM3YTFlYzg0NjZkODhiZjljZjA0OWZhNzRiYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTk1MDAzN2ExZWM4NDY2ZDg4YmY5Y2YwNDlmYTc0YmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rd2FrMTI2OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Ld2FrJ3dhbGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRhNjE4M2MzZTFhNGRkODk4NTliOWIwMjIwZDYxYmYuc2V0Q29udGVudChodG1sXzE5NTAwMzdhMWVjODQ2NmQ4OGJmOWNmMDQ5ZmE3NGJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlZjI0ZmY0YTU3ZjQzMDY5YjZhOTlkZDVjNWRjNWFmLmJpbmRQb3B1cChwb3B1cF8xNGE2MTgzYzNlMWE0ZGQ4OTg1OWI5YjAyMjBkNjFiZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzJiNWZmZTNhZWIxNGVhM2EyNGJmZTgxMjk3ZTdhNjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4xMzI4LCA0Ny4wODA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYjNkZTg2NWQ4MWY0ZDVhYjMyYmUzZGFjOGIxZWI1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YWI4YzFiNWM3OTY0NTRkODgzMTE3NmE5YWQ1MWE0NCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWFiOGMxYjVjNzk2NDU0ZDg4MzExNzZhOWFkNTFhNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sYWtrMTI1MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MYWs8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2IzZGU4NjVkODFmNGQ1YWIzMmJlM2RhYzhiMWViNTUuc2V0Q29udGVudChodG1sXzlhYjhjMWI1Yzc5NjQ1NGQ4ODMxMTc2YTlhZDUxYTQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMyYjVmZmUzYWViMTRlYTNhMjRiZmU4MTI5N2U3YTYwLmJpbmRQb3B1cChwb3B1cF8zYjNkZTg2NWQ4MWY0ZDVhYjMyYmUzZGFjOGIxZWI1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTg1ZmFmOWI4NGVlNDliNzgyY2I2OTA5N2JmM2U2ZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMzYyNjdlMTcwNGY0MjNlYjc2YzU1NGUxMzIwNTcyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMmI5MzAxZDQ3Yjc0MzY5OWE5Y2Y1NWE3NDgzNWRhMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzJiOTMwMWQ0N2I3NDM2OTlhOWNmNTVhNzQ4MzVkYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sYWtvMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MYWtvdGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDM2MjY3ZTE3MDRmNDIzZWI3NmM1NTRlMTMyMDU3MjIuc2V0Q29udGVudChodG1sX2MyYjkzMDFkNDdiNzQzNjk5YTljZjU1YTc0ODM1ZGEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4NWZhZjliODRlZTQ5Yjc4MmNiNjkwOTdiZjNlNmZjLmJpbmRQb3B1cChwb3B1cF9kMzYyNjdlMTcwNGY0MjNlYjc2YzU1NGUxMzIwNTcyMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTUzNDA3ODdkMzY4NGY0YmIwNDBiNTUyMjg2NDM3YjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC40MiwgLTEyMi41MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3MzE1Y2YxYzZkMjQyZWQ4YzE2ZDY3ZTZmOGMyNGYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkY2UxMGQzY2U3NDQyOWVhMzg1YmViZTEzOWNkODNkID0gJChgPGRpdiBpZD0iaHRtbF9mZGNlMTBkM2NlNzQ0MjllYTM4NWJlYmUxMzljZDgzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2x1c2gxMjUyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcnRoZXJuIEx1c2hvb3RzZWVkPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3MzE1Y2YxYzZkMjQyZWQ4YzE2ZDY3ZTZmOGMyNGYyLnNldENvbnRlbnQoaHRtbF9mZGNlMTBkM2NlNzQ0MjllYTM4NWJlYmUxMzljZDgzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NTM0MDc4N2QzNjg0ZjRiYjA0MGI1NTIyODY0MzdiNy5iaW5kUG9wdXAocG9wdXBfMzczMTVjZjFjNmQyNDJlZDhjMTZkNjdlNmY4YzI0ZjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2OTY2NTg4Nzc0MDQ3ZTE5YTg1ZDhiNWM1YjEwNTRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNzM1NywgLTEwMC4wMTc5OTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGRiOWI1MjU0ZDZmNGM2N2JjYTU4YWQ4YjBlMTM2N2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmRmOTM2M2U4NDYxNDgxNTgyMmEwNjc0M2E5YjRiYjEgPSAkKGA8ZGl2IGlkPSJodG1sX2ZkZjkzNjNlODQ2MTQ4MTU4MjJhMDY3NDNhOWI0YmIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvY2VudDIxNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Q2VudHJhbCBNYXphaHVhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRkYjliNTI1NGQ2ZjRjNjdiY2E1OGFkOGIwZTEzNjdhLnNldENvbnRlbnQoaHRtbF9mZGY5MzYzZTg0NjE0ODE1ODIyYTA2NzQzYTliNGJiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNjk2NjU4ODc3NDA0N2UxOWE4NWQ4YjVjNWIxMDU0ZS5iaW5kUG9wdXAocG9wdXBfNGRiOWI1MjU0ZDZmNGM2N2JjYTU4YWQ4YjBlMTM2N2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4MTFjNmZlYmJmMTRmZWZhMWM1M2FiYTBlOWE1OTZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi4xNDA1LCAzNS41NzYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xY2QxNTkwMWJiMWM0MzAwOWFjYzg0YTJhYTZmN2NiMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTcwM2E2ZjA2ZDE0MjRiODQ1OWFhMWNhMTEzNjI3ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDE3MDNhNmYwNmQxNDI0Yjg0NTlhYTFjYTExMzYyN2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9kaXppMTIzNSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5EaXppbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xY2QxNTkwMWJiMWM0MzAwOWFjYzg0YTJhYTZmN2NiMS5zZXRDb250ZW50KGh0bWxfNDE3MDNhNmYwNmQxNDI0Yjg0NTlhYTFjYTExMzYyN2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTgxMWM2ZmViYmYxNGZlZmExYzUzYWJhMGU5YTU5NmUuYmluZFBvcHVwKHBvcHVwXzFjZDE1OTAxYmIxYzQzMDA5YWNjODRhMmFhNmY3Y2IxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjI4ZWIzZTUzODg0ODZiYjY2YTU0NGIzNDhiMmE5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xNC4zNzA3LCAtNTkuNTE4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZmMWYxMTBkMTAwNDgzYWE1ZWFjMzZkN2M0M2YwYzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTEyYWE5NDA2Mjg1NDJkMTgzZjhjZjY2OWM5YWNjOTEgPSAkKGA8ZGl2IGlkPSJodG1sX2ExMmFhOTQwNjI4NTQyZDE4M2Y4Y2Y2NjljOWFjYzkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc291dDI5OTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U291dGhlcm4gTmFtYmlrdcOhcmE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGZmMWYxMTBkMTAwNDgzYWE1ZWFjMzZkN2M0M2YwYzUuc2V0Q29udGVudChodG1sX2ExMmFhOTQwNjI4NTQyZDE4M2Y4Y2Y2NjljOWFjYzkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFiMjhlYjNlNTM4ODQ4NmJiNjZhNTQ0YjM0OGIyYTkzLmJpbmRQb3B1cChwb3B1cF9kZmYxZjExMGQxMDA0ODNhYTVlYWMzNmQ3YzQzZjBjNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWRhMmZmMmZkMDFjNDVhZDlmMzQwNGE1ZDUyNjI2YmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNi4yMTA2LCAtMTEwLjA4MjAwMDAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MzkzMDVjNjJiYzA0YjQyODQ0MDA4MTI3MTY1NDcyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTdkMTAyNzQ2MDc0ZGExYTZjOTI4Nzc0MmRjMGQ5YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDE3ZDEwMjc0NjA3NGRhMWE2YzkyODc3NDJkYzBkOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uYXZhMTI0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OYXZham88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDM5MzA1YzYyYmMwNGI0Mjg0NDAwODEyNzE2NTQ3MmEuc2V0Q29udGVudChodG1sXzQxN2QxMDI3NDYwNzRkYTFhNmM5Mjg3NzQyZGMwZDljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FkYTJmZjJmZDAxYzQ1YWQ5ZjM0MDRhNWQ1MjYyNmJhLmJpbmRQb3B1cChwb3B1cF80MzkzMDVjNjJiYzA0YjQyODQ0MDA4MTI3MTY1NDcyYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzcwMDBjM2JhMzQ3NDlhZWEyZGVjNmY3YzE2ZTFmYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zMDczLCAtMTE2LjQwNzk5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNWIxMDNjOTRmYjE0MmRkYmUyZjdlZjdmNjI1YTI3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMmQ5MzZiYWQ0ZDg0NTU1YjZkOWI3YjMwYWMyNDg1NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTJkOTM2YmFkNGQ4NDU1NWI2ZDliN2IzMGFjMjQ4NTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9uZXpwMTIzOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5OZXogUGVyY2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDViMTAzYzk0ZmIxNDJkZGJlMmY3ZWY3ZjYyNWEyNzAuc2V0Q29udGVudChodG1sX2EyZDkzNmJhZDRkODQ1NTViNmQ5YjdiMzBhYzI0ODU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM3MDAwYzNiYTM0NzQ5YWVhMmRlYzZmN2MxNmUxZmMyLmJpbmRQb3B1cChwb3B1cF9kNWIxMDNjOTRmYjE0MmRkYmUyZjdlZjdmNjI1YTI3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWIyODBiNjc1NzAxNGRmNWE4ZWE1MGRjZDM2YmIzYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40MTAyLCAtMTIwLjY0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDRkZmFmNDMwNTllNDJhMGEzYWE2MTA5NzI2MDQyNmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2JiMTYwNzc5ZjkyNDM4MGE1MDQzNDQwZjM5NDcyNmQgPSAkKGA8ZGl2IGlkPSJodG1sX2NiYjE2MDc3OWY5MjQzODBhNTA0MzQ0MGYzOTQ3MjZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9ydDI5NTIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9ydGhlYXN0IE1haWR1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0ZGZhZjQzMDU5ZTQyYTBhM2FhNjEwOTcyNjA0MjZmLnNldENvbnRlbnQoaHRtbF9jYmIxNjA3NzlmOTI0MzgwYTUwNDM0NDBmMzk0NzI2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYjI4MGI2NzU3MDE0ZGY1YThlYTUwZGNkMzZiYjNjNS5iaW5kUG9wdXAocG9wdXBfZDRkZmFmNDMwNTllNDJhMGEzYWE2MTA5NzI2MDQyNmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlOGVjOGYzMGRjNzQ4MzM4YzNiYjIwYzVhMjE3OWYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDkuNjcsIC0xMjYuNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwNDRmOWFjOWNkMTRjYmRhNzMyNzFkYmRkZjlkOTg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxOTYxMjkzMjE2MzQ2NTc4OGMxMWUwNjU4NWU0OTRmID0gJChgPGRpdiBpZD0iaHRtbF8wMTk2MTI5MzIxNjM0NjU3ODhjMTFlMDY1ODVlNDk0ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251dWMxMjM2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk51dS1jaGFoLW51bHRoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwNDRmOWFjOWNkMTRjYmRhNzMyNzFkYmRkZjlkOTg0LnNldENvbnRlbnQoaHRtbF8wMTk2MTI5MzIxNjM0NjU3ODhjMTFlMDY1ODVlNDk0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZThlYzhmMzBkYzc0ODMzOGMzYmIyMGM1YTIxNzlmMC5iaW5kUG9wdXAocG9wdXBfOTA0NGY5YWM5Y2QxNGNiZGE3MzI3MWRiZGRmOWQ5ODQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5Yzc5MTk2YjdkNDQ5Yjk5Y2Q4NWYxNGY0OTdkOGY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTM1NCwgLTEyMi41OTg5OTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDA4NWU4NzA4MmI3NGM3N2E2NTY3MjA0YTY0MjI3NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTk0MzMyZTZmNDBhNDVkODk0YzRlMzQ2ZGNjYjY2ZWQgPSAkKGA8ZGl2IGlkPSJodG1sX2U5NDMzMmU2ZjQwYTQ1ZDg5NGM0ZTM0NmRjY2I2NmVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc291dDI5ODIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U291dGhlYXN0ZXJuIFBvbW88L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDA4NWU4NzA4MmI3NGM3N2E2NTY3MjA0YTY0MjI3NTUuc2V0Q29udGVudChodG1sX2U5NDMzMmU2ZjQwYTQ1ZDg5NGM0ZTM0NmRjY2I2NmVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q5Yzc5MTk2YjdkNDQ5Yjk5Y2Q4NWYxNGY0OTdkOGY4LmJpbmRQb3B1cChwb3B1cF8wMDg1ZTg3MDgyYjc0Yzc3YTY1NjcyMDRhNjQyMjc1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTdiNWI4ZTU3NjZhNDg2NGJiYjJmOWFiYzJhZDU3ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjAuOTIwMSwgLTY2LjMzMzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxMjA5OWQ4ZjRiMjQwOGY4NzY5ZWFlNjEzMjgxNGQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlZTdhY2UxOTEyZjQ4NDJiMTc2ODFiZGJiMWYyMmNjID0gJChgPGRpdiBpZD0iaHRtbF83ZWU3YWNlMTkxMmY0ODQyYjE3NjgxYmRiYjFmMjJjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NvdXQyOTkxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNvdXRoIEJvbGl2aWFuIFF1ZWNodWE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDEyMDk5ZDhmNGIyNDA4Zjg3NjllYWU2MTMyODE0ZDYuc2V0Q29udGVudChodG1sXzdlZTdhY2UxOTEyZjQ4NDJiMTc2ODFiZGJiMWYyMmNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E3YjViOGU1NzY2YTQ4NjRiYmIyZjlhYmMyYWQ1N2UyLmJpbmRQb3B1cChwb3B1cF80MTIwOTlkOGY0YjI0MDhmODc2OWVhZTYxMzI4MTRkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTBkZDRhMDMwYmYwNGMxNWI4Njk3M2U3NGE2MzJjNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ny45MTA2LCAtMTI0LjYwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODZiNTVmNDA0Mjg0NGY1MTk2NTE0ZDE3YTE4M2E2NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTAzZTc5NTk3YzViNDkwOWIyOWE1NDZjYzNhNmUwM2MgPSAkKGA8ZGl2IGlkPSJodG1sX2UwM2U3OTU5N2M1YjQ5MDliMjlhNTQ2Y2MzYTZlMDNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcXVpbDEyNDAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UXVpbGV1dGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODZiNTVmNDA0Mjg0NGY1MTk2NTE0ZDE3YTE4M2E2Nzguc2V0Q29udGVudChodG1sX2UwM2U3OTU5N2M1YjQ5MDliMjlhNTQ2Y2MzYTZlMDNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwZGQ0YTAzMGJmMDRjMTViODY5NzNlNzRhNjMyYzczLmJpbmRQb3B1cChwb3B1cF84NmI1NWY0MDQyODQ0ZjUxOTY1MTRkMTdhMTgzYTY3OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2FiZWRjMmU1YmRhNGZkMjkwMzE2ZmE4OWY0ZDRkODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS42MTg3LCA0Ny4zMjQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODRlNTg3ZjkyMWU0MmYxYWM3YTIyMTUzN2E1YTI3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MGNjZTNiNTA2ODk0ZDM1YjcwMWYwN2RjOWMzZDkyOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzBjY2UzYjUwNjg5NGQzNWI3MDFmMDdkYzljM2Q5MjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXR1MTI0MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXR1bDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jODRlNTg3ZjkyMWU0MmYxYWM3YTIyMTUzN2E1YTI3ZS5zZXRDb250ZW50KGh0bWxfNzBjY2UzYjUwNjg5NGQzNWI3MDFmMDdkYzljM2Q5MjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2FiZWRjMmU1YmRhNGZkMjkwMzE2ZmE4OWY0ZDRkODMuYmluZFBvcHVwKHBvcHVwX2M4NGU1ODdmOTIxZTQyZjFhYzdhMjIxNTM3YTVhMjdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xY2NhMTY0MzZlMTU0YWRjODgyYzQyMGJjZmYwYjZlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy01LjI2OTE4LCAzNS40ODA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODFkZDk4YjFkM2Q0ZmI0YmFiOGNkZmYyNzkyMzA0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzRkN2Q4YzI3ODY0Mjc5YjVkNjBkODkxZTA1YzgwZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjM0ZDdkOGMyNzg2NDI3OWI1ZDYwZDg5MWUwNWM4MGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zYW5kMTI3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TYW5kYXdlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4MWRkOThiMWQzZDRmYjRiYWI4Y2RmZjI3OTIzMDQ4LnNldENvbnRlbnQoaHRtbF9mMzRkN2Q4YzI3ODY0Mjc5YjVkNjBkODkxZTA1YzgwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xY2NhMTY0MzZlMTU0YWRjODgyYzQyMGJjZmYwYjZlNS5iaW5kUG9wdXAocG9wdXBfZDgxZGQ5OGIxZDNkNGZiNGJhYjhjZGZmMjc5MjMwNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZhZjlhOGJhOThiZTRhYjBiYzUzZDYyYTlmNTZkNjAzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNzU4NywgLTEyMi43MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyZmFjMmJiN2ZlMTQ2MWRiN2U1NTIyN2NiNzNjNzMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhNTZmOGY0MjUxNDRiM2FhZGE3NDMyZjZlN2QxODViID0gJChgPGRpdiBpZD0iaHRtbF80YTU2ZjhmNDI1MTQ0YjNhYWRhNzQzMmY2ZTdkMTg1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NoYXMxMjM5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNoYXN0YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MmZhYzJiYjdmZTE0NjFkYjdlNTUyMjdjYjczYzczMi5zZXRDb250ZW50KGh0bWxfNGE1NmY4ZjQyNTE0NGIzYWFkYTc0MzJmNmU3ZDE4NWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmFmOWE4YmE5OGJlNGFiMGJjNTNkNjJhOWY1NmQ2MDMuYmluZFBvcHVwKHBvcHVwXzYyZmFjMmJiN2ZlMTQ2MWRiN2U1NTIyN2NiNzNjNzMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMzZkZmFlZWEwYTY0YmIwYTM5NTg5MTQ4MTkyM2MzNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjQ4OTIsIDUzLjkxNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5NmZlYjk4ZTIxMzRkMGI5ZDIxN2MwNDA5NjQ5OTVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlYTAzMWRiM2MzMTQ0ODE5M2Y0OTRlMDEzNjViYzA0ID0gJChgPGRpdiBpZD0iaHRtbF9iZWEwMzFkYjNjMzE0NDgxOTNmNDk0ZTAxMzY1YmMwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NvcW8xMjQwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNvcW90cmk8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzk2ZmViOThlMjEzNGQwYjlkMjE3YzA0MDk2NDk5NWUuc2V0Q29udGVudChodG1sX2JlYTAzMWRiM2MzMTQ0ODE5M2Y0OTRlMDEzNjViYzA0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QzNmRmYWVlYTBhNjRiYjBhMzk1ODkxNDgxOTIzYzM1LmJpbmRQb3B1cChwb3B1cF8zOTZmZWI5OGUyMTM0ZDBiOWQyMTdjMDQwOTY0OTk1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzg0MmViMDMxYWQ0NDUxOTk1NTZmMzdlMjU2Yjc5M2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNDcuNTc5NiwgLTY4LjMyMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhYmI5NjhkYjc2NDRmMThiNmZmMWYyM2NlODhlOGNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwYzAwYjY4M2EzMTQ1YjFiNGQ0MjZkYWVmZDQwMTU5ID0gJChgPGRpdiBpZD0iaHRtbF80MGMwMGI2ODNhMzE0NWIxYjRkNDI2ZGFlZmQ0MDE1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RlaHUxMjQyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRlaHVlbGNoZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYWJiOTY4ZGI3NjQ0ZjE4YjZmZjFmMjNjZTg4ZThjYi5zZXRDb250ZW50KGh0bWxfNDBjMDBiNjgzYTMxNDViMWI0ZDQyNmRhZWZkNDAxNTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzg0MmViMDMxYWQ0NDUxOTk1NTZmMzdlMjU2Yjc5M2EuYmluZFBvcHVwKHBvcHVwXzNhYmI5NjhkYjc2NDRmMThiNmZmMWYyM2NlODhlOGNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZWI0ZjJkMjc2Y2I0MWRhYWU4YmNmNjRjMzIyOWE1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE3LjM0OTQsIDM4LjIyMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyZTM0NmY3MGJjNTQwZmNhZTMyYjdlM2RhMmRlZDJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4NGYzMmFhZmYwMjQ3ODA5ZDBiYjI0NjZmZGQxZDAwID0gJChgPGRpdiBpZD0iaHRtbF8wODRmMzJhYWZmMDI0NzgwOWQwYmIyNDY2ZmRkMWQwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RpZ3IxMjcwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpZ3JlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyZTM0NmY3MGJjNTQwZmNhZTMyYjdlM2RhMmRlZDJjLnNldENvbnRlbnQoaHRtbF8wODRmMzJhYWZmMDI0NzgwOWQwYmIyNDY2ZmRkMWQwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZWI0ZjJkMjc2Y2I0MWRhYWU4YmNmNjRjMzIyOWE1YS5iaW5kUG9wdXAocG9wdXBfNjJlMzQ2ZjcwYmM1NDBmY2FlMzJiN2UzZGEyZGVkMmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk2YzRlOGMyY2E5NTRhNDQ4ZmJhMTYzMzc5OGVlZDU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWE0ZTc3N2YwZWMwNDU0Mjg3OWYxNmY1MTE1YWFkOTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQzNDllZjNiYzNmNDY2Njk5NGUzZDhhMzY0NWY2NmIgPSAkKGA8ZGl2IGlkPSJodG1sXzJkMzQ5ZWYzYmMzZjQ2NjY5OTRlM2Q4YTM2NDVmNjZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGxpbjEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGxpbmdpdDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYTRlNzc3ZjBlYzA0NTQyODc5ZjE2ZjUxMTVhYWQ5OS5zZXRDb250ZW50KGh0bWxfMmQzNDllZjNiYzNmNDY2Njk5NGUzZDhhMzY0NWY2NmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTZjNGU4YzJjYTk1NGE0NDhmYmExNjMzNzk4ZWVkNTkuYmluZFBvcHVwKHBvcHVwXzFhNGU3NzdmMGVjMDQ1NDI4NzlmMTZmNTExNWFhZDk5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjc5ZmVkNzNiZDQ0NTRmOWE1ZDYyZTdlMTQyNGRiZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUyLjU5MTAzLCAtMTI4LjU0NDU0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmZiMjliNmE5MzU3NDM1ZWFiYzg1YmI3YzE3NTE0MWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjE0NmRlMmZmMTI1NDRkYWFhMmY0ZGU1Y2NmMTJiNDggPSAkKGA8ZGl2IGlkPSJodG1sX2YxNDZkZTJmZjEyNTQ0ZGFhYTJmNGRlNWNjZjEyYjQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2NDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U291dGhlcm4tQ29hc3RhbCBUc2ltc2hpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmZiMjliNmE5MzU3NDM1ZWFiYzg1YmI3YzE3NTE0MWUuc2V0Q29udGVudChodG1sX2YxNDZkZTJmZjEyNTQ0ZGFhYTJmNGRlNWNjZjEyYjQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZiNzlmZWQ3M2JkNDQ1NGY5YTVkNjJlN2UxNDI0ZGJlLmJpbmRQb3B1cChwb3B1cF8yZmIyOWI2YTkzNTc0MzVlYWJjODViYjdjMTc1MTQxZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzhmMWIyZTcwNTNmNDllZmI2NTM3ZmFmMGZjNDBkOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNi40Mjc3LCAtMTA1LjYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQzY2ZlZDk4ZDZlNDc1OWJhMDdkMTIxZGZlODc1NjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmVmYzc3NDEyYmVhNGNiMzg3YjYwYzVlOGE1YjMxMmQgPSAkKGA8ZGl2IGlkPSJodG1sX2ZlZmM3NzQxMmJlYTRjYjM4N2I2MGM1ZThhNWIzMTJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9ydDE1NTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGFvcyBOb3J0aGVybiBUaXdhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRkM2NmZWQ5OGQ2ZTQ3NTliYTA3ZDEyMWRmZTg3NTYxLnNldENvbnRlbnQoaHRtbF9mZWZjNzc0MTJiZWE0Y2IzODdiNjBjNWU4YTViMzEyZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OGYxYjJlNzA1M2Y0OWVmYjY1MzdmYWYwZmM0MGQ5OS5iaW5kUG9wdXAocG9wdXBfNGQzY2ZlZDk4ZDZlNDc1OWJhMDdkMTIxZGZlODc1NjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZjYWMxNThlMzhiMTQyZDM5NTM1N2EwNGIzMDgxNDk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTYuNjM4NCwgLTkyLjI3ODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1MDQ0NDM5MmM1NDQ5NDhiM2M3ODNjMGRkMzAyZTc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1YWQ3Njg5YjM2ZDRhMmNiNmIyMjJiMWE0MzNjNTNkID0gJChgPGRpdiBpZD0iaHRtbF84NWFkNzY4OWIzNmQ0YTJjYjZiMjIyYjFhNDMzYzUzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3R6ZWwxMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR6ZWx0YWw8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjUwNDQ0MzkyYzU0NDk0OGIzYzc4M2MwZGQzMDJlNzQuc2V0Q29udGVudChodG1sXzg1YWQ3Njg5YjM2ZDRhMmNiNmIyMjJiMWE0MzNjNTNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZjYWMxNThlMzhiMTQyZDM5NTM1N2EwNGIzMDgxNDk0LmJpbmRQb3B1cChwb3B1cF8yNTA0NDQzOTJjNTQ0OTQ4YjNjNzgzYzBkZDMwMmU3NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjFiYTk0ZDNkN2I3NDc3ZDhkZDY1OTg1YWZlMDA5OWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4yNSwgLTEyMi41XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YTg1MjU1YjAyZTQ0MDI1OTg5OGQ3MTNkNzE3NWQ4NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNzhiZWU1NWQ0Zjg0ZGRiOGNkNWRkZjMyNjUwZDZmZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDc4YmVlNTVkNGY4NGRkYjhjZDVkZGYzMjY1MGQ2ZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93YXBwMTIzOSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XYXBwbzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YTg1MjU1YjAyZTQ0MDI1OTg5OGQ3MTNkNzE3NWQ4NC5zZXRDb250ZW50KGh0bWxfZDc4YmVlNTVkNGY4NGRkYjhjZDVkZGYzMjY1MGQ2ZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjFiYTk0ZDNkN2I3NDc3ZDhkZDY1OTg1YWZlMDA5OWYuYmluZFBvcHVwKHBvcHVwXzVhODUyNTViMDJlNDQwMjU5ODk4ZDcxM2Q3MTc1ZDg0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MTFiYzEyZmJlOGM0NjFhYmI0MGMyZDVhYTU0N2NmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjA2NjUsIC05OC4xODMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80OWYxZjI4N2NlZGI0MjA1YWZkZTdjZWNlOWExZmNmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNTFjNDhiYzdhZDM0YWU3OGE0Mjc3ZWFhYzJjODY3NiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjUxYzQ4YmM3YWQzNGFlNzhhNDI3N2VhYWMyYzg2NzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC93aWNoMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5XaWNoaXRhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ5ZjFmMjg3Y2VkYjQyMDVhZmRlN2NlY2U5YTFmY2YxLnNldENvbnRlbnQoaHRtbF9mNTFjNDhiYzdhZDM0YWU3OGE0Mjc3ZWFhYzJjODY3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MTFiYzEyZmJlOGM0NjFhYmI0MGMyZDVhYTU0N2NmMy5iaW5kUG9wdXAocG9wdXBfNDlmMWYyODdjZWRiNDIwNWFmZGU3Y2VjZTlhMWZjZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmOWNmNGUyODkwYzQ0YmZhYmRmMzJmYThhNTk5N2JlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzE3NiwgLTEyMi40NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IzNTdkMTJkYTY2ZDQwMmY5Mzg4NTJiZmMxZDA0YzMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjYmVmYmVkODc1NTRmOWE5NzNiODlhMDk2NWIzZmMwID0gJChgPGRpdiBpZD0iaHRtbF8wY2JlZmJlZDg3NTU0ZjlhOTczYjg5YTA5NjViM2ZjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3dpbnQxMjU5IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPldpbnR1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzNTdkMTJkYTY2ZDQwMmY5Mzg4NTJiZmMxZDA0YzMyLnNldENvbnRlbnQoaHRtbF8wY2JlZmJlZDg3NTU0ZjlhOTczYjg5YTA5NjViM2ZjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZjljZjRlMjg5MGM0NGJmYWJkZjMyZmE4YTU5OTdiZS5iaW5kUG9wdXAocG9wdXBfYjM1N2QxMmRhNjZkNDAyZjkzODg1MmJmYzFkMDRjMzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5ZmVmYTMxMmJiMzQ2YTBhYWJmYmFkOGNmZTIzOTcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTAuNjQ3NCwgMzQuNzA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGM1YzBjN2FiYTg2NGZmMWEwYTdlZmFiOGVlN2JkYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2YwNWYwNTEwZGYxNDFiZWExYmQ5Y2ZmYjFmYWNmMGIgPSAkKGA8ZGl2IGlkPSJodG1sXzdmMDVmMDUxMGRmMTQxYmVhMWJkOWNmZmIxZmFjZjBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYmVydDEyNDgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QmVydGE8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGM1YzBjN2FiYTg2NGZmMWEwYTdlZmFiOGVlN2JkYjguc2V0Q29udGVudChodG1sXzdmMDVmMDUxMGRmMTQxYmVhMWJkOWNmZmIxZmFjZjBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU5ZmVmYTMxMmJiMzQ2YTBhYWJmYmFkOGNmZTIzOTcyLmJpbmRQb3B1cChwb3B1cF8wYzVjMGM3YWJhODY0ZmYxYTBhN2VmYWI4ZWU3YmRiOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDBjN2U1OGQ3YzdlNDE3NmJmZTMxNjdmNjI2YmI2MzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs4Ljk0MTYyLCAzNC4wOTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMmZlOWY2MjZhMWE0YjJjOTllOTE4ZWRiM2M0NTI3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzNjYjE3ZTNkNDY0M2NiODM0MzdhYjZlOTE5NDJjNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWMzY2IxN2UzZDQ2NDNjYjgzNDM3YWI2ZTkxOTQyYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb21vMTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb21vIChTdWRhbik8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzJmZTlmNjI2YTFhNGIyYzk5ZTkxOGVkYjNjNDUyN2Iuc2V0Q29udGVudChodG1sXzFjM2NiMTdlM2Q0NjQzY2I4MzQzN2FiNmU5MTk0MmM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwYzdlNThkN2M3ZTQxNzZiZmUzMTY3ZjYyNmJiNjMyLmJpbmRQb3B1cChwb3B1cF8zMmZlOWY2MjZhMWE0YjJjOTllOTE4ZWRiM2M0NTI3YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzlkYTJmMDIzNzQ4NDA2MDhhZDYwZmZhYWU0NmUwMzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNzY5LCAtMTIxLjYwNzk5OTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yY2UzNTI3ZDFkNjk0Njk5YThmNTczNTliNTkwNmMwYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YzM1YmRlYTk2NDE0NzIwOGVkNmYxMDUwZjNlOTM3ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNGMzNWJkZWE5NjQxNDcyMDhlZDZmMTA1MGYzZTkzN2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95YW5hMTI3MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZYW5hPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJjZTM1MjdkMWQ2OTQ2OTlhOGY1NzM1OWI1OTA2YzBjLnNldENvbnRlbnQoaHRtbF80YzM1YmRlYTk2NDE0NzIwOGVkNmYxMDUwZjNlOTM3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOWRhMmYwMjM3NDg0MDYwOGFkNjBmZmFhZTQ2ZTAzNi5iaW5kUG9wdXAocG9wdXBfMmNlMzUyN2QxZDY5NDY5OWE4ZjU3MzU5YjU5MDZjMGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwZDU0ZDNmYjAyNDQ2NzdhMjA2N2QwZDBjNGU4YzlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTguNzc1NywgLTg4Ljk1NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogImJsdWUiLAogICJmaWxsT3BhY2l0eSI6IDAuNSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzVhZWVhNzM5ZmUwMDQ5YTE4NjBhNTdlMDRmODFmMGNiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlZGEzOTA4YmZiMjQxNmFhMDNjYTgzZmUxNzMxZTZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3NmIyY2RhMjBlNTQ5ZjI5N2M5MTg0YmViNjc4NDM4ID0gJChgPGRpdiBpZD0iaHRtbF84NzZiMmNkYTIwZTU0OWYyOTdjOTE4NGJlYjY3ODQzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3l1Y2ExMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPll1Y2F0ZWMgTWF5YTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZWRhMzkwOGJmYjI0MTZhYTAzY2E4M2ZlMTczMWU2Yi5zZXRDb250ZW50KGh0bWxfODc2YjJjZGEyMGU1NDlmMjk3YzkxODRiZWI2Nzg0MzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzBkNTRkM2ZiMDI0NDY3N2EyMDY3ZDBkMGM0ZThjOWQuYmluZFBvcHVwKHBvcHVwX2NlZGEzOTA4YmZiMjQxNmFhMDNjYTgzZmUxNzMxZTZiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZmUyNGFhMzBiODY0N2ZmYmEwY2RlN2ZmZjI3YzVmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1Ljk2MTQ1OTk5OTk5OTk5NSwgLTk1LjAzOTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMGMxMThmM2M3NzY0ZjdhYTgzNzU4NjAxYTEzYjI1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ODhjOGU5YzgzOTY0MTNmOTA5ODNmNzU4ZmYwYzI2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTg4YzhlOWM4Mzk2NDEzZjkwOTgzZjc1OGZmMGMyNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95dWNoMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZdWNoaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMGMxMThmM2M3NzY0ZjdhYTgzNzU4NjAxYTEzYjI1MC5zZXRDb250ZW50KGh0bWxfOTg4YzhlOWM4Mzk2NDEzZjkwOTgzZjc1OGZmMGMyNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGZlMjRhYTMwYjg2NDdmZmJhMGNkZTdmZmYyN2M1ZjEuYmluZFBvcHVwKHBvcHVwXzMwYzExOGYzYzc3NjRmN2FhODM3NTg2MDFhMTNiMjUwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MGY4M2VhMGU0ZmU0YjU5OWFiZTcwNGZkYTgzNDJiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yNS4zMzA1LCAzMS4zNTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICJibHVlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjUsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81YWVlYTczOWZlMDA0OWExODYwYTU3ZTA0ZjgxZjBjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NDg2YzIzNmU2NjY0MmQyYWRiMGU5YjMwNDM3OWY1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYTIzYjA4NTA5Njc0MWJkODg5ODM2MWM5Yzc4MjIwZCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2EyM2IwODUwOTY3NDFiZDg4OTgzNjFjOWM3ODIyMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC96dWx1MTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5adWx1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0ODZjMjM2ZTY2NjQyZDJhZGIwZTliMzA0Mzc5ZjVkLnNldENvbnRlbnQoaHRtbF8zYTIzYjA4NTA5Njc0MWJkODg5ODM2MWM5Yzc4MjIwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MGY4M2VhMGU0ZmU0YjU5OWFiZTcwNGZkYTgzNDJiNy5iaW5kUG9wdXAocG9wdXBfNTQ4NmMyMzZlNjY2NDJkMmFkYjBlOWIzMDQzNzlmNWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxMGNlZWRkN2MxNjQwMTdhNTE5YjMzMzUyZGU1ZjIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMDA1NiwgLTEwOC43ODIwMDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiYmx1ZSIsCiAgImZpbGxPcGFjaXR5IjogMC41LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNWFlZWE3MzlmZTAwNDlhMTg2MGE1N2UwNGY4MWYwY2IpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTBiZmI1MTA5YjE4NDM4Y2EyYjkyZDlhOTlkZDY4NDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVjMDAxY2RmYjc3NGE3Nzk4NGZiNmJhOThlYmIxOGMgPSAkKGA8ZGl2IGlkPSJodG1sXzVlYzAwMWNkZmI3NzRhNzc5ODRmYjZiYTk4ZWJiMThjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvenVuaTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WnVuaTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGJmYjUxMDliMTg0MzhjYTJiOTJkOWE5OWRkNjg0OS5zZXRDb250ZW50KGh0bWxfNWVjMDAxY2RmYjc3NGE3Nzk4NGZiNmJhOThlYmIxOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTEwY2VlZGQ3YzE2NDAxN2E1MTliMzMzNTJkZTVmMjMuYmluZFBvcHVwKHBvcHVwXzUwYmZiNTEwOWIxODQzOGNhMmI5MmQ5YTk5ZGQ2ODQ5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7ff62aa51da0>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(df.Glottocode, glottocode=True)\n",
    "m.title = 'Languages with Ejectives'\n",
    "m.tiles = 'Stamen Terrain'\n",
    "m.radius = 5\n",
    "m.opacity = 0.5\n",
    "m.colors = ('blue',)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[Go back up](#up)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.7.3"
  },
  "title": "Lingtypology"
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
