Skip to content

Instantly share code, notes, and snippets.

@jhconning
Created October 22, 2018 05:19
Show Gist options
  • Save jhconning/3b815295351e9bb8ea696fcf9953c50f to your computer and use it in GitHub Desktop.
Save jhconning/3b815295351e9bb8ea696fcf9953c50f to your computer and use it in GitHub Desktop.
Hunter/Masters/Jeremy Sze/MA Thesis - Copy/jeremy_python.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "## Plotting Jeremy's LPIS data\n\n"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import pandas as pd\nimport matplotlib.pyplot as plt\nimport geopandas as gpd\nimport folium \nfrom folium.plugins import MarkerCluster, HeatMap\nimport osmnx as ox\nimport fiona\n\nfrom shapely.geometry import Point\nimport matplotlib.pyplot as plt\n\npd.options.display.float_format = '{:,.2f}'.format",
"execution_count": 96,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Let's read in the amazing Stata dataset Jeremy prepared into a pandas dataframe. "
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df = pd.read_stata(\"./working_data/analytical_file_panel.dta\")",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Now create a geometry from those `latitude` and `longitude` measures to turn this into a geodataframe. \n\nNote however that these are not in fact true `longitude` and `latitude` measures but rather measurements in feet since the geometry used here is [EPSG:2263](http://spatialreference.org/ref/epsg/2263/) also referred to as NAD83. \n\nTo allow true latitude and longitude columns later let's rename these something else:"
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "df.rename(index=str, columns={'longitude': 'ft_lon', 'latitude': 'ft_lat'},inplace=True)",
"execution_count": 12,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "df['Coordinates'] = list(zip(df.ft_lon, df.ft_lat))\ndf['Coordinates'] = df['Coordinates'].apply(Point)\ngdf = gpd.GeoDataFrame(df, geometry='Coordinates')",
"execution_count": 14,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We also need to make it clear that the Coordinate Reference System (CRS) for these measures is EPSG 2263. With that we can later correctly convert from that to EPSG 4326 to use true latitude and longitude. This is needed only because that's what we need for a Folium (leaflet) map."
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "gdf.crs = fiona.crs.from_epsg(2263)\ngdf = gdf.to_crs(epsg='4326')",
"execution_count": 15,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Now, finally we can create columns for `latitude` and `longitude` coordinates."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "gdf['longitude'] = gdf.Coordinates.x\ngdf['latitude'] = gdf.Coordinates.y",
"execution_count": 16,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Let's see the list of variables and representative values."
},
{
"metadata": {
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "pd.set_option('display.max_rows', 120)\ngdf.head(1).T",
"execution_count": 17,
"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>0</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>intersection_id</th>\n <td>1</td>\n </tr>\n <tr>\n <th>month</th>\n <td>7</td>\n </tr>\n <tr>\n <th>year</th>\n <td>2012</td>\n </tr>\n <tr>\n <th>monthly</th>\n <td>2012-07-01 00:00:00</td>\n </tr>\n <tr>\n <th>ft_lon</th>\n <td>1,025,301.15</td>\n </tr>\n <tr>\n <th>ft_lat</th>\n <td>270,701.93</td>\n </tr>\n <tr>\n <th>bname</th>\n <td>Bronx</td>\n </tr>\n <tr>\n <th>bronx</th>\n <td>1</td>\n </tr>\n <tr>\n <th>brooklyn</th>\n <td>0</td>\n </tr>\n <tr>\n <th>manhattan</th>\n <td>0</td>\n </tr>\n <tr>\n <th>queens</th>\n <td>0</td>\n </tr>\n <tr>\n <th>statenisland</th>\n <td>0</td>\n </tr>\n <tr>\n <th>inters_to_sch_dist</th>\n <td>2778</td>\n </tr>\n <tr>\n <th>inters_to_hosp_dist</th>\n <td>6439</td>\n </tr>\n <tr>\n <th>lionstreet_id</th>\n <td>29364</td>\n </tr>\n <tr>\n <th>trafdir</th>\n <td>Two-Way: Traffic flows in both directions</td>\n </tr>\n <tr>\n <th>streetwidth_min</th>\n <td>24.00</td>\n </tr>\n <tr>\n <th>streetwidth_max</th>\n <td>30.00</td>\n </tr>\n <tr>\n <th>streetwidth_irr</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>posted_speed</th>\n <td>25.00</td>\n </tr>\n <tr>\n <th>number_travel_lanes</th>\n <td>1.00</td>\n </tr>\n <tr>\n <th>mi_number_travel_lanes</th>\n <td>0</td>\n </tr>\n <tr>\n <th>number_park_lanes</th>\n <td>0</td>\n </tr>\n <tr>\n <th>mi_number_park_lanes</th>\n <td>1</td>\n </tr>\n <tr>\n <th>number_total_lanes</th>\n <td>1.00</td>\n </tr>\n <tr>\n <th>bike_route_id</th>\n <td>250,515.00</td>\n </tr>\n <tr>\n <th>bike_route_to_coli_dist</th>\n <td>3,303.43</td>\n </tr>\n <tr>\n <th>bike_route_install_dt</th>\n <td>NaT</td>\n </tr>\n <tr>\n <th>lanecount</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>bike_route_modif_dt</th>\n <td>NaT</td>\n </tr>\n <tr>\n <th>onoffst</th>\n <td></td>\n </tr>\n <tr>\n <th>bike_route_install_mt</th>\n <td>NaT</td>\n </tr>\n <tr>\n <th>bike_route_modif_mt</th>\n <td>NaT</td>\n </tr>\n <tr>\n <th>truck_route_id</th>\n <td>5383</td>\n </tr>\n <tr>\n <th>truck_route_to_coli_dist</th>\n <td>1,293.15</td>\n </tr>\n <tr>\n <th>bikelane_type</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>routetype</th>\n <td>Local</td>\n </tr>\n <tr>\n <th>monthly_avg_drybulbtemp</th>\n <td>78.68</td>\n </tr>\n <tr>\n <th>monthly_avg_precip</th>\n <td>0.14</td>\n </tr>\n <tr>\n <th>monthly_avg_snowfall</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>monthly_tot_drybulbtemp</th>\n <td>2,439.00</td>\n </tr>\n <tr>\n <th>monthly_tot_precip</th>\n <td>4.21</td>\n </tr>\n <tr>\n <th>monthly_tot_snowfall</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>left_turn_id</th>\n <td>104</td>\n </tr>\n <tr>\n <th>intersection_to_left_turn_dist</th>\n <td>4,050.51</td>\n </tr>\n <tr>\n <th>left_turn_install_dt</th>\n <td>2017-12-09 00:00:00</td>\n </tr>\n <tr>\n <th>left_turn_install_month</th>\n <td>2017-12-01 00:00:00</td>\n </tr>\n <tr>\n <th>left_turn_treatment</th>\n <td>Daylighting, Box markings, Pegatracks, Delinea...</td>\n </tr>\n <tr>\n <th>left_turn_min</th>\n <td>0.19</td>\n </tr>\n <tr>\n <th>flag_left_turn_ever</th>\n <td>0</td>\n </tr>\n <tr>\n <th>flag_left_turn</th>\n <td>0</td>\n </tr>\n <tr>\n <th>street_improv_id</th>\n <td>173</td>\n </tr>\n <tr>\n <th>intersec_to_street_improv_dist</th>\n <td>8,243.45</td>\n </tr>\n <tr>\n <th>street_improv_treatment</th>\n <td></td>\n </tr>\n <tr>\n <th>street_improv_install_dt</th>\n <td>2017-12-31 00:00:00</td>\n </tr>\n <tr>\n <th>street_improv_install_month</th>\n <td>2017-12-01 00:00:00</td>\n </tr>\n <tr>\n <th>street_improv_min</th>\n <td>395.85</td>\n </tr>\n <tr>\n <th>flag_street_improv_ever</th>\n <td>0</td>\n </tr>\n <tr>\n <th>flag_street_improv</th>\n <td>0</td>\n </tr>\n <tr>\n <th>LPIS_id</th>\n <td>1767</td>\n </tr>\n <tr>\n <th>intersection_to_LPIS_dist</th>\n <td>2,251.85</td>\n </tr>\n <tr>\n <th>LPIS_install_date</th>\n <td>2016-02-06 00:00:00</td>\n </tr>\n <tr>\n <th>LPIS_install_month</th>\n <td>2016-02-01 00:00:00</td>\n </tr>\n <tr>\n <th>LPIS_install_year</th>\n <td>2,016.00</td>\n </tr>\n <tr>\n <th>LPIS_min</th>\n <td>19.07</td>\n </tr>\n <tr>\n <th>flag_LPIS_ever</th>\n <td>0</td>\n </tr>\n <tr>\n <th>flag_LPIS</th>\n <td>0</td>\n </tr>\n <tr>\n <th>bike_route_ever</th>\n <td>0</td>\n </tr>\n <tr>\n <th>bike_route_tv</th>\n <td>0</td>\n </tr>\n <tr>\n <th>truck_route</th>\n <td>0</td>\n </tr>\n <tr>\n <th>collision_count</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_collision_count</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_collision_count</th>\n <td>0</td>\n </tr>\n <tr>\n <th>personsinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>personskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>pedestriansinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>pedestrianskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>cyclistinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>cyclistkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>motoristinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>motoristkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_personsinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_personskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_pedestriansinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_pedestrianskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_cyclistinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_cyclistkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_motoristinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>latenight_motoristkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_personsinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_personskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_pedestriansinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_pedestrianskilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_cyclistinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_cyclistkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_motoristinjured</th>\n <td>0</td>\n </tr>\n <tr>\n <th>day_motoristkilled</th>\n <td>0</td>\n </tr>\n <tr>\n <th>flag_collision</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>latenight_flag_collision</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>day_flag_collision</th>\n <td>0.00</td>\n </tr>\n <tr>\n <th>group</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>group_filled</th>\n <td>NaN</td>\n </tr>\n <tr>\n <th>Coordinates</th>\n <td>POINT (-73.85148400285885 40.90959199994354)</td>\n </tr>\n <tr>\n <th>longitude</th>\n <td>-73.85</td>\n </tr>\n <tr>\n <th>latitude</th>\n <td>40.91</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " 0\nintersection_id 1\nmonth 7\nyear 2012\nmonthly 2012-07-01 00:00:00\nft_lon 1,025,301.15\nft_lat 270,701.93\nbname Bronx\nbronx 1\nbrooklyn 0\nmanhattan 0\nqueens 0\nstatenisland 0\ninters_to_sch_dist 2778\ninters_to_hosp_dist 6439\nlionstreet_id 29364\ntrafdir Two-Way: Traffic flows in both directions\nstreetwidth_min 24.00\nstreetwidth_max 30.00\nstreetwidth_irr NaN\nposted_speed 25.00\nnumber_travel_lanes 1.00\nmi_number_travel_lanes 0\nnumber_park_lanes 0\nmi_number_park_lanes 1\nnumber_total_lanes 1.00\nbike_route_id 250,515.00\nbike_route_to_coli_dist 3,303.43\nbike_route_install_dt NaT\nlanecount NaN\nbike_route_modif_dt NaT\nonoffst \nbike_route_install_mt NaT\nbike_route_modif_mt NaT\ntruck_route_id 5383\ntruck_route_to_coli_dist 1,293.15\nbikelane_type NaN\nroutetype Local\nmonthly_avg_drybulbtemp 78.68\nmonthly_avg_precip 0.14\nmonthly_avg_snowfall 0.00\nmonthly_tot_drybulbtemp 2,439.00\nmonthly_tot_precip 4.21\nmonthly_tot_snowfall 0.00\nleft_turn_id 104\nintersection_to_left_turn_dist 4,050.51\nleft_turn_install_dt 2017-12-09 00:00:00\nleft_turn_install_month 2017-12-01 00:00:00\nleft_turn_treatment Daylighting, Box markings, Pegatracks, Delinea...\nleft_turn_min 0.19\nflag_left_turn_ever 0\nflag_left_turn 0\nstreet_improv_id 173\nintersec_to_street_improv_dist 8,243.45\nstreet_improv_treatment \nstreet_improv_install_dt 2017-12-31 00:00:00\nstreet_improv_install_month 2017-12-01 00:00:00\nstreet_improv_min 395.85\nflag_street_improv_ever 0\nflag_street_improv 0\nLPIS_id 1767\nintersection_to_LPIS_dist 2,251.85\nLPIS_install_date 2016-02-06 00:00:00\nLPIS_install_month 2016-02-01 00:00:00\nLPIS_install_year 2,016.00\nLPIS_min 19.07\nflag_LPIS_ever 0\nflag_LPIS 0\nbike_route_ever 0\nbike_route_tv 0\ntruck_route 0\ncollision_count 0\nlatenight_collision_count 0\nday_collision_count 0\npersonsinjured 0\npersonskilled 0\npedestriansinjured 0\npedestrianskilled 0\ncyclistinjured 0\ncyclistkilled 0\nmotoristinjured 0\nmotoristkilled 0\nlatenight_personsinjured 0\nlatenight_personskilled 0\nlatenight_pedestriansinjured 0\nlatenight_pedestrianskilled 0\nlatenight_cyclistinjured 0\nlatenight_cyclistkilled 0\nlatenight_motoristinjured 0\nlatenight_motoristkilled 0\nday_personsinjured 0\nday_personskilled 0\nday_pedestriansinjured 0\nday_pedestrianskilled 0\nday_cyclistinjured 0\nday_cyclistkilled 0\nday_motoristinjured 0\nday_motoristkilled 0\nflag_collision 0.00\nlatenight_flag_collision 0.00\nday_flag_collision 0.00\ngroup NaN\ngroup_filled NaN\nCoordinates POINT (-73.85148400285885 40.90959199994354)\nlongitude -73.85\nlatitude 40.91"
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Exploring Jackson Heights New York\n\nI live in this neighborhood, so let's explore the situation inside [this box](https://www.openstreetmap.org/export#map=16/40.7535/-73.8844) conveniently mapped for export at OpenStreetMap (and they even give the lat/lon bounds of the box which we'll use below)\n\nLet's create a dataframe with just focus the intersections in this neighborhood."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "jhmask = ( (gdf.longitude > -73.8987) & (gdf.longitude < -73.8701) & (gdf.latitude > 40.7470) & (gdf.latitude < 40.7600) )\njh = gdf[jhmask]\njh.shape",
"execution_count": 20,
"outputs": [
{
"data": {
"text/plain": "(20400, 105)"
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "It will be useful to also have a data frame that 'collapses' (using Stata language) the data by `intersection_id` to leave us one observation per intersection, for easy mapping etc. This is a groupby in pandas.\n\nNote how in pandas we can first create a dictionary mapping each column to the aggregation we want. In some cases (e.g. `intersection_id`) we just need the first or last observation, in others like `personsinjured` we want a sum. Then with that dictionary we can create the new dataframe in one single groupby and aggregate operation.\n\n"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "lastcols = ['intersection_id', 'flag_LPIS_ever', 'latitude','longitude'] \nsumcols = ['collision_count', 'personsinjured', 'personskilled', 'pedestriansinjured'] \nallcols = lastcols + sumcols\nmethods = len(lastcols)*['last'] + len(allcols)*['sum']\naggdict = dict(zip(allcols, methods))\naggdict",
"execution_count": 28,
"outputs": [
{
"data": {
"text/plain": "{'intersection_id': 'last',\n 'flag_LPIS_ever': 'last',\n 'latitude': 'last',\n 'longitude': 'last',\n 'collision_count': 'sum',\n 'personsinjured': 'sum',\n 'personskilled': 'sum',\n 'pedestriansinjured': 'sum'}"
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "jh0 = jh.groupby('intersection_id')[allcols].agg(aggdict)\njh0.shape",
"execution_count": 32,
"outputs": [
{
"data": {
"text/plain": "(272, 8)"
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "jh0.head()",
"execution_count": 35,
"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>intersection_id</th>\n <th>flag_LPIS_ever</th>\n <th>latitude</th>\n <th>longitude</th>\n <th>collision_count</th>\n <th>personsinjured</th>\n <th>personskilled</th>\n <th>pedestriansinjured</th>\n </tr>\n <tr>\n <th>intersection_id</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>54928</th>\n <td>54928</td>\n <td>0</td>\n <td>40.75</td>\n <td>-73.90</td>\n <td>0.00</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>54929</th>\n <td>54929</td>\n <td>1</td>\n <td>40.75</td>\n <td>-73.90</td>\n <td>156.00</td>\n <td>49</td>\n <td>0</td>\n <td>3</td>\n </tr>\n <tr>\n <th>54930</th>\n <td>54930</td>\n <td>0</td>\n <td>40.75</td>\n <td>-73.90</td>\n <td>67.00</td>\n <td>18</td>\n <td>1</td>\n <td>4</td>\n </tr>\n <tr>\n <th>54931</th>\n <td>54931</td>\n <td>0</td>\n <td>40.75</td>\n <td>-73.90</td>\n <td>44.00</td>\n <td>14</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>54932</th>\n <td>54932</td>\n <td>0</td>\n <td>40.75</td>\n <td>-73.89</td>\n <td>34.00</td>\n <td>14</td>\n <td>0</td>\n <td>3</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " intersection_id flag_LPIS_ever latitude longitude \\\nintersection_id \n54928 54928 0 40.75 -73.90 \n54929 54929 1 40.75 -73.90 \n54930 54930 0 40.75 -73.90 \n54931 54931 0 40.75 -73.90 \n54932 54932 0 40.75 -73.89 \n\n collision_count personsinjured personskilled \\\nintersection_id \n54928 0.00 0 0 \n54929 156.00 49 0 \n54930 67.00 18 1 \n54931 44.00 14 0 \n54932 34.00 14 0 \n\n pedestriansinjured \nintersection_id \n54928 0 \n54929 3 \n54930 4 \n54931 1 \n54932 3 "
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "So we have a mix of LPIS and non-LPIS intersections. Clearly the LPIS intersections are ones that were/are more prone to accidents."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "(jh0.groupby('flag_LPIS_ever')[['intersection_id','personsinjured', 'personskilled']]\n .agg({'intersection_id': 'count', 'personsinjured' : 'mean', 'personskilled' : 'mean'}) )",
"execution_count": 50,
"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>intersection_id</th>\n <th>personsinjured</th>\n <th>personskilled</th>\n </tr>\n <tr>\n <th>flag_LPIS_ever</th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>189</td>\n <td>5.71</td>\n <td>0.04</td>\n </tr>\n <tr>\n <th>1</th>\n <td>83</td>\n <td>11.05</td>\n <td>0.06</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " intersection_id personsinjured personskilled\nflag_LPIS_ever \n0 189 5.71 0.04\n1 83 11.05 0.06"
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Let's look at the distribution of injuries and the intersections most prone to creating injuries (larger circles on the map)."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "plt.title('Total Persons injured over entire period')\njh0.personsinjured.hist(bins=[1,2,3,4,5,10, 15, 20, 30, 50]);",
"execution_count": 46,
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAGZhJREFUeJzt3X+U3XV95/HniwRKzEB+ABlCEpmoKT8kJZpZSg+2Z4YfbqpW2C5YUbuhB009xyq4cW2qrVTPejZSAWm1203BJp4CAxulsFBFNjD1x5ZIAtiAgeWHgZCfoklkkFWD7/3j+xn4Ot65P2buzZ353NfjnDnz/fG59/P+fO/3vuabz/0RRQRmZjb5HdbuAszMrDkc6GZmmXCgm5llwoFuZpYJB7qZWSYc6GZmmXCgT1CSjpQUkua3u5ZWk3SPpD9odtvxknSypIOHoq92kvRJSZ9vdx2jkfSkpN8aw+065jk0TH4fev0kDZVWXwX8FHgprf9xRNxQ5bbLgM9HxOvq7OtI4EVgQUQ8W2H/fcAS4GBqNwh8ICL21nP/Vpukk4GHI2Jqu2tplkbPw8ms1nMoR75Cb0BEdA3/AM8Av1faNmqYt9B7Uy2nAMcDVzZ6B5KyCatqJB0madKd7+1+fNrZf7vHPhlNuhN8IpM0TdIXJO2S9Kykv5J0uKRjgFuB10gaSj/HSDpL0kZJByTtlHTNWE7iiHgO+CfgtFIdn5O0XdJuSX8j6dfSvmWSnpD0F5L2AP9d0vGSviZpv6QfSrqnNKbFkr6Z9v2bpN8t7RtI/dwl6XlJ35Z0Yto3RdLnJf0gje+7kk4a5bjdJ+k9afn9kjZI+uvU55OSzh2l7WpJ15X2/dIUSWr7KUkbgZ8AJ0iaLelL6bhsl3TFcNBLmirp2nQMngDOq3bcRzs2kvokPSNJpbYXS/pO6dj8haSnJD0n6QZJM8tjkPQ+SduBfx6l7/+Q+tyfaji1tG+3pA9Lejgd+xskHVHlPHz5OI7Wv6TfTufqfkkPSDqrynHZLemjkh6V9CNJa4bPvzpr/4ikR4Afl7a9KS1XfI6Vbv9xSXskPQu8p9rjl6WI8M8YfoBtwLkjtl0JfBM4FugG7gc+nvYtA54Y0f4M4N8BU4DXAk8A70/7jgQCmD9K//cB70nLc4BvAX+f1v8OWA/MBGYAdwFXlOo4CHwKOAKYBlwDXAtMTdt+p1TD08BK4HDg3wNDwMK0fwDYC7wx7V8PrE37zgf+FTia4sLh9cCcOsbyfuDnwH9Kx+XDwLZR2q4GrivtOxk4OKLtU8BJqb6pwFeBv6GYMpsLPAgsT+0vB7YAJwDHpWN6cJSaRz02gIDtwG+X2v8v4PK0vCqdJyek+1kL/ENpDAFcl2qcVqHvM4FdwNJ0jFYA/xeYmvbvBr5NcQ4eR3FeXVLlPHz5OFbqH+gBfgicmx7LtwA/AGaNcmx2p+M6fBzvB/68gdrvT7edVtr2pjqeYxcAO9IYuoAvU+U5lONP2wuYrD9UDvQdwNml9fOBR9PyrzyRKtznKuCmtFxPoL8A7AeeBdYBsylC62fAvFLbfmBrqY4XgMNL+68E/ifwmhF9nEcRWiptuxVYlZYHKOZjh/f9PvBQWn4L8AjFHy3VGPfIQH+4tG92Og4zK7StJ9A/Vlo/scLY/wj4alr+P6TgS+tvZ/RAr3VsPgv8bWkMLwJz0/r3gbNKt1tI8S8I8UqgnlDleP0DKcRK254GfjMt7wYuLO37a+Bzo52HVA70E0r7ryBdLJS2/QvwB6PUt3vEcfx94JEGan9XhfsbDvRqz7Ebgb8s7fsNOizQPUfVJOmf18dTnJzDngbmVbnNqcBVFFe40yjC+NsNdPvHEfGPI+7z1RRXjI+U/8VPcVU+bHdE/Ly0/mmKK/Z7Jf2cIoiuprhKeibSs2OUMe0uLf+E4soIiivhk4H/AcyTtB74aESUX1gezcj7JN3v/jpuO9L20vKJFH8of1A6NodRXMFCMd5y+/JjOVKtY3MjcJekDwEXAd+KiF3pPFkA/LOk8m0PA45Jy7+IiJ1V+j4ReIek/1LadgTVH5djq9zfSCP7PxG4WNJFpW2HUxyD0Yw8jsNt66m9fNuX1fEcOwHYMGJfR/EcepOkJ/ZuihN22KspriiguFIY6e+BB4DXRsTRFKGqCu0asYsivF8bETPTz4yIOKbU5pdqiYgDEXFZRJwI/Efgz9Mc6c40hrLymEYVhasj4g0UV0qnA5eNfVgVvUAxLTDs+EqllJa3U0yLzCodm6Mj4o1p/y6KsB02cuxlVY9NRDzAK9MU76II+OHzZPgqc2bp58goXgsZWXMl24FPjLj9qyLiKzVuV899V2qzneIKvtzf9Ii4psp9jDyOw38g6qm9Yo11PMcaefyy5EBvrpuAK9ILTXOAjwPDV9B7gDmSukrtjwIORMSQpNcD7xtvAenK+4vAtZKOVWGBpFFf4JP0dkkL0xXQAYq3Yr5EMVd5mKTL0wuG5wFvppieqUrSmZJ6VbzI+wLFNNBLNW7WqIeAfknzJM0C/rRa44j4PsU0zJWSjlLxzpdFwy+4AbcAH5Y0V9KxwEer3F09x+Ym4CMUr5OUA+vvgNWSFgBImiPp9+oeNawBPpiOryR1pcfwVTVvWfk8rGUdcJGkc9ILutPScqU/oMM+VDqOq4Cbm1A7VH+O3QK8V9Kvp/F9ooExZsGB3lyfAL5HMXf8EMX0yfBbCb8L3A48nV7dn03xgt97Vby//Qu8ctKP1+UUV0SbKAL6a0C19x2fQvE+9ueBbwCfjYj7IuL/AW8DLqS42ryaYt70yTpqmEnxYt9+ihcmn6aYy22mO4E7KI75fRTv9Knl4lTbo8CPKI55d9r3eYqgfgTYSBEQFdV5bG4EzqGYoz9Q2n4l8L+BeyQ9TzF3/0bqFBHfBj5EMZ21n+JFxXdR39V3pfOwVn9PUfzL7ZPAcxSP5WVUz48B4F7gcYoXmq9sQu1Q5TkWEbdS/MH4JsXje1ed95kNf7DIJhUVb/37bESMGrbWXpKGX5T9Vrtr6TS+QrdJQ9J0irfQfb/NpZhNSA50mxTSu3d2AndGxP3trsdsIvKUi5lZJnyFbmaWiUP6waJjjz02enp6qrZ54YUXmD59+qEpaALxuDuLx91ZxjvuzZs3PxcRx9VqVzPQVXyhUvntdK+heOvQl9L2HoqPwb8jIvZVu6+enh42bdpUtb/BwUH6+vpqlZUdj7uzeNydZbzjllTXp15rTrlExGMRsSQillB8oc5PSN9ZAWyIiEUUH7ddNeZqzcxs3BqdQz8HeDIinqb4Upx1afs6im86MzOzNmk00N9J8dFbgO6I2AWQfs9pZmFmZtaYut+2KOkIivcBvz4i9kjaHxEzS/v3RcSsCrdbQfGdx3R3dy8dGBio2s/Q0BBdXY18zUQePO7O4nF3lvGOu7+/f3NE9NZsWO/37FJMsXy9tP4Yr3y/81zgsVr3sXTp0qjl3nvvrdkmRx53Z/G4O8t4xw1sijpyupEpl4t5ZboFii/4WZ6WlwO3NXBfZmbWZHUFevpqy/P45a8AXQ2cJ+nxtG9188szM7N61fXBooj4Ca/8byrD235I8a4XMzObAPzRfzOzTPj/FC3pWXVn2/peu6zzPg5tZs3lK3Qzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTdQW6pJmS1kt6VNJWSb8labakuyU9nn7PanWxZmY2unqv0K8FvhYRJwOnA1uBVcCGiFgEbEjrZmbWJjUDXdLRwO8A1wNExM8iYj9wPrAuNVsHXNCqIs3MrDZFRPUG0hJgDfA9iqvzzcBlwI6ImFlqty8ifmXaRdIKYAVAd3f30oGBgar9DQ0N0dXV1eAwmmPLjgNt6Rdg4YwpbRt3O7Xz8W4nj7uzjHfc/f39myOit1a7egK9F7gPOCsiNkq6Fvgx8MF6Ar2st7c3Nm3aVLW/wcFB+vr6atXdEj2r7mxLvwBrl01v27jbqZ2Pdzt53J1lvOOWVFeg1zOH/izwbERsTOvrgTcCeyTNTZ3NBfaOtVgzMxu/moEeEbuB7ZJOSpvOoZh+uR1YnrYtB25rSYVmZlaXqXW2+yBwg6QjgKeAP6L4Y3CLpEuBZ4CLWlOimZnVo65Aj4iHgErzN+c0txwzMxsrf1LUzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTU+tpJGkb8DzwEnAwInolzQZuBnqAbcA7ImJfa8o0M7NaGrlC74+IJRHRm9ZXARsiYhGwIa2bmVmbjGfK5XxgXVpeB1ww/nLMzGys6g30AL4uabOkFWlbd0TsAki/57SiQDMzq48ionYj6YSI2ClpDnA38EHg9oiYWWqzLyJmVbjtCmAFQHd399KBgYGqfQ0NDdHV1dXYKJpky44DbekXoHsa7HmxPX0vnjejPR3T3se7nTzuzjLecff3928uTXePqq5A/6UbSH8JDAHvA/oiYpekucBgRJxU7ba9vb2xadOmqvc/ODhIX19fQzU1S8+qO9vSL8DKxQe5aktdr1E33bbVb21Lv9Dex7udPO7OMt5xS6or0GtOuUiaLumo4WXgzcDDwO3A8tRsOXDbmKs1M7Nxq+eSsBu4VdJw+xsj4muS7gdukXQp8AxwUevKNDOzWmoGekQ8BZxeYfsPgXNaUZSZmTXOnxQ1M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBN1B7qkKZIelHRHWl8oaaOkxyXdLOmI1pVpZma1NHKFfhmwtbT+GeCaiFgE7AMubWZhZmbWmLoCXdJ84K3AdWldwNnA+tRkHXBBKwo0M7P6KCJqN5LWA/8NOAr4CHAJcF9EvC7tXwB8NSJOq3DbFcAKgO7u7qUDAwNV+xoaGqKrq6uxUTTJlh0H2tIvQPc02PNie/pePG9GezqmvY93O3ncnWW84+7v798cEb212k2t1UDS24C9EbFZUt/w5gpNK/5liIg1wBqA3t7e6Ovrq9TsZYODg9Rq0yqXrLqzLf0CrFx8kKu21Hw4WmLbu/va0i+09/FuJ4+7sxyqcdeTIGcBb5f0FuBI4Gjgc8BMSVMj4iAwH9jZujLNzKyWmnPoEfFnETE/InqAdwL3RMS7gXuBC1Oz5cBtLavSzMxqGs/70P8U+M+SngCOAa5vTklmZjYWDU3aRsQgMJiWnwLOaH5JZmY2Fv6kqJlZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJmoGuqQjJX1H0nclPSLpk2n7QkkbJT0u6WZJR7S+XDMzG009V+g/Bc6OiNOBJcAySWcCnwGuiYhFwD7g0taVaWZmtdQM9CgMpdXD008AZwPr0/Z1wAUtqdDMzOqiiKjdSJoCbAZeB3wB+Cvgvoh4Xdq/APhqRJxW4bYrgBUA3d3dSwcGBqr2NTQ0RFdXV4PDaI4tOw60pV+A7mmw58X29L143oz2dEx7H+928rg7y3jH3d/fvzkiemu1m1rPnUXES8ASSTOBW4FTKjUb5bZrgDUAvb290dfXV7WvwcFBarVplUtW3dmWfgFWLj7IVVvqejiabtu7+9rSL7T38W4nj7uzHKpxN/Qul4jYDwwCZwIzJQ0n0HxgZ3NLMzOzRtTzLpfj0pU5kqYB5wJbgXuBC1Oz5cBtrSrSzMxqq+ff+HOBdWke/TDgloi4Q9L3gAFJ/xV4ELi+hXWamVkNNQM9Iv4NeEOF7U8BZ7SiKDMza5w/KWpmlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXCgW5mlgkHuplZJqbWaiBpAfAl4HjgF8CaiLhW0mzgZqAH2Aa8IyL2ta7UxvSsunPUfdtWv/UQVjLxVTtWrbZ22fS29W2Wm3qu0A8CKyPiFOBM4AOSTgVWARsiYhGwIa2bmVmb1Az0iNgVEQ+k5eeBrcA84HxgXWq2DrigVUWamVltioj6G0s9wDeA04BnImJmad++iJhV4TYrgBUA3d3dSwcGBqr2MTQ0RFdXV901jWbLjgOj7ls8b0bDt2m17mmw58W2dd82C2dMacrjPdk06zyfbDzusenv798cEb212tUd6JK6gH8BPh0RX5G0v55AL+vt7Y1NmzZV7WdwcJC+vr66aqpmLHPo7ZxLXrn4IFdtqfmSRnbWLpvelMd7smnWeT7ZeNxjI6muQK/rXS6SDge+DNwQEV9Jm/dImpv2zwX2jrVYMzMbv5qBLknA9cDWiLi6tOt2YHlaXg7c1vzyzMysXvX8G/8s4A+BLZIeSts+BqwGbpF0KfAMcFFrSjQzs3rUDPSI+BagUXaf09xyzMxsrPxJUTOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTDjQzcwy4UA3M8uEA93MLBMOdDOzTEz6r/dr5zckmplNJL5CNzPLhAPdzCwTDnQzs0w40M3MMuFANzPLxKR/l8tY+J0xE8eWHQe4pAMfj7XLpre7BMuQr9DNzDLhQDczy4QD3cwsEw50M7NMONDNzDJRM9AlfVHSXkkPl7bNlnS3pMfT71mtLdPMzGqp5wp9LbBsxLZVwIaIWARsSOtmZtZGNQM9Ir4B/GjE5vOBdWl5HXBBk+syM7MGKSJqN5J6gDsi4rS0vj8iZpb274uIitMuklYAKwC6u7uXDgwMVO1raGiIrq6uX9m+ZceBmnVOZt3TYM+L7a7i0OvUcS+cMaXieZ670Z7fuRvvuPv7+zdHRG+tdi3/pGhErAHWAPT29kZfX1/V9oODg1Rqk/unCVcuPshVWzrvg7udOu61y6ZXPM9zN9rzO3eHatxjfZfLHklzAdLvvc0ryczMxmKsgX47sDwtLwdua045ZmY2VvW8bfEm4F+BkyQ9K+lSYDVwnqTHgfPSupmZtVHNycuIuHiUXec0uRYzMxsHf1LUzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLhAPdzCwTDnQzs0w40M3MMuFANzPLROf977xmE8CWHQey/4/PK1m5+GBHjnvtsumHpB9foZuZZcKBbmaWCQe6mVkmHOhmZplwoJuZZWJcgS5pmaTHJD0haVWzijIzs8aNOdAlTQG+APwucCpwsaRTm1WYmZk1ZjxX6GcAT0TEUxHxM2AAOL85ZZmZWaMUEWO7oXQhsCwi3pvW/xD4zYj4kxHtVgAr0upJwGM17vpY4LkxFTW5edydxePuLOMd94kRcVytRuP5pKgqbPuVvw4RsQZYU/edSpsionccdU1KHndn8bg7y6Ea93imXJ4FFpTW5wM7x1eOmZmN1XgC/X5gkaSFko4A3gnc3pyyzMysUWOecomIg5L+BLgLmAJ8MSIeaUJNdU/PZMbj7iwed2c5JOMe84uiZmY2sfiTomZmmXCgm5llYsIEeid9jYCkL0raK+nh0rbZku6W9Hj6PaudNTabpAWS7pW0VdIjki5L27MeN4CkIyV9R9J309g/mbYvlLQxjf3m9OaCrEiaIulBSXek9ezHDCBpm6Qtkh6StClta/m5PiECvQO/RmAtsGzEtlXAhohYBGxI6zk5CKyMiFOAM4EPpMc493ED/BQ4OyJOB5YAyySdCXwGuCaNfR9waRtrbJXLgK2l9U4Y87D+iFhSev95y8/1CRHodNjXCETEN4Afjdh8PrAuLa8DLjikRbVYROyKiAfS8vMUT/J5ZD5ugCgMpdXD008AZwPr0/bsxi5pPvBW4Lq0LjIfcw0tP9cnSqDPA7aX1p9N2zpJd0TsgiL8gDltrqdlJPUAbwA20iHjTlMPDwF7gbuBJ4H9EXEwNcnxnP8c8FHgF2n9GPIf87AAvi5pc/r6EzgE5/pE+U+i6/oaAZv8JHUBXwYuj4gfFxdt+YuIl4AlkmYCtwKnVGp2aKtqHUlvA/ZGxGZJfcObKzTNZswjnBUROyXNAe6W9Oih6HSiXKH7awRgj6S5AOn33jbX03SSDqcI8xsi4itpc/bjLouI/cAgxesIMyUNX1Tlds6fBbxd0jaKKdSzKa7Ycx7zyyJiZ/q9l+IP+BkcgnN9ogS6v0agGO/ytLwcuK2NtTRdmj+9HtgaEVeXdmU9bgBJx6UrcyRNA86leA3hXuDC1CyrsUfEn0XE/IjooXg+3xMR7ybjMQ+TNF3SUcPLwJuBhzkE5/qE+aSopLdQ/AUf/hqBT7e5pJaRdBPQR/GVmnuAK4B/Am4BXg08A1wUESNfOJ20JL0J+CawhVfmVD9GMY+e7bgBJP0GxYtgUyguom6JiE9Jeg3F1ets4EHgPRHx0/ZV2hppyuUjEfG2ThhzGuOtaXUqcGNEfFrSMbT4XJ8wgW5mZuMzUaZczMxsnBzoZmaZcKCbmWXCgW5mlgkHuplZJhzoZmaZcKCbmWXi/wOqP+a4tNslZwAAAABJRU5ErkJggg==\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "m = folium.Map(location=[40.75, -73.88], zoom_start =15, tiles='OpenStreetMap')\n\nfor idx, row in jh0.iterrows():\n if (row.flag_LPIS_ever == 1):\n folium.Circle(location=[row.latitude, row.longitude],\n popup=f'LPIS {row.intersection_id}',\n radius = 10 + row.personsinjured*3\n ).add_to(m)\n else:\n folium.Circle(location=[row.latitude, row.longitude],\n popup=f'{row.intersection_id}',\n radius = 10 + row.personsinjured*3,\n color = 'grey',\n ).add_to(m)\nm",
"execution_count": 95,
"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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgPHN0eWxlPiNtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyIiA+PC9kaXY+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMiA9IEwubWFwKAogICAgICAgICdtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjInLCB7CiAgICAgICAgY2VudGVyOiBbNDAuNzUsIC03My44OF0sCiAgICAgICAgem9vbTogMTUsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwoKICAgIAogICAgCiAgICB2YXIgdGlsZV9sYXllcl9jZWQ1MTNiNGYxMTg0MDg2OTk4YmZlZjcwZTdiZWYwYyA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIKfSkuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80Y2Y0ZDQ1YTE0NGE0OGJlOWY5MWVlMzY1ZDMwMDE2YyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDIxNjk5OTg0MTMyNiwgLTczLjg5ODE4MTAwMTI3NTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5Y2NhMTBjYzY1MTQ0Y2RiYzUzYmJiN2E2Zjc5MDkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDllOWQ4NTEwNGViNDA4OTlmYTFlNTgxODdjNDI2ZmQgPSAkKCc8ZGl2IGlkPSJodG1sX2Q5ZTlkODUxMDRlYjQwODk5ZmExZTU4MTg3YzQyNmZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41NDkyOC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OWNjYTEwY2M2NTE0NGNkYmM1M2JiYjdhNmY3OTA5Mi5zZXRDb250ZW50KGh0bWxfZDllOWQ4NTEwNGViNDA4OTlmYTFlNTgxODdjNDI2ZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80Y2Y0ZDQ1YTE0NGE0OGJlOWY5MWVlMzY1ZDMwMDE2Yy5iaW5kUG9wdXAocG9wdXBfNzljY2ExMGNjNjUxNDRjZGJjNTNiYmI3YTZmNzkwOTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzcwZDM5ZDdkYTc1YjQzYzFhZWJhMzg3OTk4MmE2MGJkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU0MjgwOTk5OTA3OTA1LCAtNzMuODk3NTAxMDAyMDQyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNTcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwMjdiYzkyMjBmOTRkZjdhMzkxOTM0NTY5OTdkNzBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTA5NzBhMzk3ZTNhNDljZGE4ODU5YjRiODE5MTMwODAgPSAkKCc8ZGl2IGlkPSJodG1sXzUwOTcwYTM5N2UzYTQ5Y2RhODg1OWI0YjgxOTEzMDgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwMjdiYzkyMjBmOTRkZjdhMzkxOTM0NTY5OTdkNzBmLnNldENvbnRlbnQoaHRtbF81MDk3MGEzOTdlM2E0OWNkYTg4NTliNGI4MTkxMzA4MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzcwZDM5ZDdkYTc1YjQzYzFhZWJhMzg3OTk4MmE2MGJkLmJpbmRQb3B1cChwb3B1cF83MDI3YmM5MjIwZjk0ZGY3YTM5MTkzNDU2OTk3ZDcwZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDZiOWY2MDM2ZTcyNDQyMWExOGE0ODlhMzBiODYzODQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQzODg5OTk5ODg4LCAtNzMuODk2NTIyMDAyOTA2MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2NC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmI3NjdjZGFkOWNhNGQ3YzhlNjVkMzRiMzMxNDNhNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGMxMDY0YTBmZDc0OThhOWIxYTZiYzRmOWUyMDYwYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjRjMTA2NGEwZmQ3NDk4YTliMWE2YmM0ZjllMjA2MGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTMwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiNzY3Y2RhZDljYTRkN2M4ZTY1ZDM0YjMzMTQzYTVlLnNldENvbnRlbnQoaHRtbF82NGMxMDY0YTBmZDc0OThhOWIxYTZiYzRmOWUyMDYwYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q2YjlmNjAzNmU3MjQ0MjFhMThhNDg5YTMwYjg2Mzg0LmJpbmRQb3B1cChwb3B1cF8yYjc2N2NkYWQ5Y2E0ZDdjOGU2NWQzNGIzMzE0M2E1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDI5ZWY4ZjM5NmNiNGVlZTkyYjQ5MzQ5YjBjMzY2MmMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ0ODQ5OTk3Mzg2NjUsIC03My44OTU1OTAwMDMwMTcyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MWNjNGNmNTJlMmQ0NjgyYjVhMjI5M2E5ZDU2NjhjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxMGM4MTk4NWMzODQyZTA5NTM0YmI5NGE2NTNjOTJjID0gJCgnPGRpdiBpZD0iaHRtbF8zMTBjODE5ODVjMzg0MmUwOTUzNGJiOTRhNjUzYzkyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTQ5MzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODFjYzRjZjUyZTJkNDY4MmI1YTIyOTNhOWQ1NjY4Yzkuc2V0Q29udGVudChodG1sXzMxMGM4MTk4NWMzODQyZTA5NTM0YmI5NGE2NTNjOTJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZDI5ZWY4ZjM5NmNiNGVlZTkyYjQ5MzQ5YjBjMzY2MmMuYmluZFBvcHVwKHBvcHVwXzgxY2M0Y2Y1MmUyZDQ2ODJiNWEyMjkzYTlkNTY2OGM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84ZDM5ZTY5ZTVkMmQ0NDI2ODcyNjI4ZTc4YTIxMjE0NyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDU4Mjk5OTcyODEyLCAtNzMuODk0NjYxMDAwMjk1OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjk3NTVhMjE1YTg5NDBlZDliYTc2NDc4ODhmMTAxMDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNGRhODIyZjVhYTQ0NzRlOWYzMzg2YWVhMWY2OGNjOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzRkYTgyMmY1YWE0NDc0ZTlmMzM4NmFlYTFmNjhjYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTMyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y5NzU1YTIxNWE4OTQwZWQ5YmE3NjQ3ODg4ZjEwMTA1LnNldENvbnRlbnQoaHRtbF8zNGRhODIyZjVhYTQ0NzRlOWYzMzg2YWVhMWY2OGNjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzhkMzllNjllNWQyZDQ0MjY4NzI2MjhlNzhhMjEyMTQ3LmJpbmRQb3B1cChwb3B1cF9mOTc1NWEyMTVhODk0MGVkOWJhNzY0Nzg4OGYxMDEwNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMWE4YmQ2NWM4MzZiNGExNGFlM2U0OWI3M2U0NjlhYWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ2ODA5OTk4MzkyNDUsIC03My44OTM3MzQwMDE2NjM4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZmMzMmJiZWYzYmI0Nzc1OTM2MGY3YjlmNGFhZGM3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhYzA5ZTI5NDRkYjQ4ODk4YmNkZDA2ZDM4NmViMDE3ID0gJCgnPGRpdiBpZD0iaHRtbF85YWMwOWUyOTQ0ZGI0ODg5OGJjZGQwNmQzODZlYjAxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDkzMy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZmMzMmJiZWYzYmI0Nzc1OTM2MGY3YjlmNGFhZGM3MC5zZXRDb250ZW50KGh0bWxfOWFjMDllMjk0NGRiNDg4OThiY2RkMDZkMzg2ZWIwMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xYThiZDY1YzgzNmI0YTE0YWUzZTQ5YjczZTQ2OWFhYy5iaW5kUG9wdXAocG9wdXBfMWZjMzJiYmVmM2JiNDc3NTkzNjBmN2I5ZjRhYWRjNzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2FjZWIzNGQwOGU0NTQxZDdiM2YwZGM0MmFlMWI2OWIzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU0Nzc3OTk5ODM2MzM1LCAtNzMuODkyODAzMDAyNjYzNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWFkZDRjNDRiNjU0NDQ4ZDlhZjZjMzQ1ZmEwZTY0NDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTA4MDIwZDE4MTA0MDQ0OWU2NjVjY2NiY2NmMDgxMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjkwODAyMGQxODEwNDA0NDllNjY1Y2NjYmNjZjA4MTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWFkZDRjNDRiNjU0NDQ4ZDlhZjZjMzQ1ZmEwZTY0NDYuc2V0Q29udGVudChodG1sXzI5MDgwMjBkMTgxMDQwNDQ5ZTY2NWNjY2JjY2YwODExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWNlYjM0ZDA4ZTQ1NDFkN2IzZjBkYzQyYWUxYjY5YjMuYmluZFBvcHVwKHBvcHVwX2FhZGQ0YzQ0YjY1NDQ0OGQ5YWY2YzM0NWZhMGU2NDQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lMzQ3ZWFjOGU1NjE0NDk4YmFkNzRlYmI4ZDAzNjljOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDg3Mjk5OTgzNTU0LCAtNzMuODkxODgxMDAyNDg0ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODE4NDNjMDc3YTA1NGY4NjhiZWQzOTg0ZDRiNmM4MzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjU4MDQ3M2E1Yjc0ODM5YjVjYTMyYjYxYTFjMWQyMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzI1ODA0NzNhNWI3NDgzOWI1Y2EzMmI2MWExYzFkMjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODE4NDNjMDc3YTA1NGY4NjhiZWQzOTg0ZDRiNmM4Mzkuc2V0Q29udGVudChodG1sXzcyNTgwNDczYTViNzQ4MzliNWNhMzJiNjFhMWMxZDIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTM0N2VhYzhlNTYxNDQ5OGJhZDc0ZWJiOGQwMzY5YzguYmluZFBvcHVwKHBvcHVwXzgxODQzYzA3N2EwNTRmODY4YmVkMzk4NGQ0YjZjODM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xZjIxMjI1ZjQyOWI0NGMyOTAwMjRlOTFjZTAyOTdjOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDk3Mzk5OTkwMzI2LCAtNzMuODkwOTQ4MDAyNzMzNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmIwM2RiYWYxNWUxNDUzM2FmZDM4YmMyZmE2NTc1ZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xN2JhN2YzYjlkMDM0ODM4OWI0MmZhNGM1NDNmMmNjZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTdiYTdmM2I5ZDAzNDgzODliNDJmYTRjNTQzZjJjY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmIwM2RiYWYxNWUxNDUzM2FmZDM4YmMyZmE2NTc1ZTQuc2V0Q29udGVudChodG1sXzE3YmE3ZjNiOWQwMzQ4Mzg5YjQyZmE0YzU0M2YyY2NmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMWYyMTIyNWY0MjliNDRjMjkwMDI0ZTkxY2UwMjk3YzkuYmluZFBvcHVwKHBvcHVwXzZiMDNkYmFmMTVlMTQ1MzNhZmQzOGJjMmZhNjU3NWU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mOTM2MWU1NTIwOGQ0N2I0OTlmYzgyZjYxOGI2ZWNlZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTA3MDk5OTkxNzQxNSwgLTczLjg5MDAxMzAwMzUwODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0MjBhZmRkMGNlNjRlOTI5ZTJkODU4NzY4MGVhMTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDUzYjJlZGI2ZjdiNDg2NjgwNGM4YjVlOGYxODI4NzYgPSAkKCc8ZGl2IGlkPSJodG1sXzA1M2IyZWRiNmY3YjQ4NjY4MDRjOGI1ZThmMTgyODc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0MjBhZmRkMGNlNjRlOTI5ZTJkODU4NzY4MGVhMTUzLnNldENvbnRlbnQoaHRtbF8wNTNiMmVkYjZmN2I0ODY2ODA0YzhiNWU4ZjE4Mjg3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y5MzYxZTU1MjA4ZDQ3YjQ5OWZjODJmNjE4YjZlY2VlLmJpbmRQb3B1cChwb3B1cF9hNDIwYWZkZDBjZTY0ZTkyOWUyZDg1ODc2ODBlYTE1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMzFhMzRmZGJkNzRkNGIzMDk0YzM3Y2FiNjIwNTMyMDQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUxNjk5OTk4NzM2NywgLTczLjg4OTA4ODAwMzU4OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QxZmIxNDcyMjY0ZDRkNjU5YzM1NTdjYTZkZjdmODllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWVmMmFkNWI0MjYwNGM4MmE1OTA2N2NlZmJiOTk3MWIgPSAkKCc8ZGl2IGlkPSJodG1sX2FlZjJhZDViNDI2MDRjODJhNTkwNjdjZWZiYjk5NzFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxZmIxNDcyMjY0ZDRkNjU5YzM1NTdjYTZkZjdmODllLnNldENvbnRlbnQoaHRtbF9hZWYyYWQ1YjQyNjA0YzgyYTU5MDY3Y2VmYmI5OTcxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzMxYTM0ZmRiZDc0ZDRiMzA5NGMzN2NhYjYyMDUzMjA0LmJpbmRQb3B1cChwb3B1cF9kMWZiMTQ3MjI2NGQ0ZDY1OWMzNTU3Y2E2ZGY3Zjg5ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTkwYjc4OTZhYjZkNGQxODhkOTM0NjRiMGQ3ZmIzNzggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUyNjU5OTk3NDMzLCAtNzMuODg4MTU3MDAzNDM2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDc2MzlhMDUzMGZhNDY2NzgyMDgxN2Q2NDA2ZDUyZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzNkNDk0M2Q4OWY0YTIxODkzOTgzNjEwMTg2YzRhYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMTMzZDQ5NDNkODlmNGEyMTg5Mzk4MzYxMDE4NmM0YWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDc2MzlhMDUzMGZhNDY2NzgyMDgxN2Q2NDA2ZDUyZGIuc2V0Q29udGVudChodG1sXzEzM2Q0OTQzZDg5ZjRhMjE4OTM5ODM2MTAxODZjNGFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTkwYjc4OTZhYjZkNGQxODhkOTM0NjRiMGQ3ZmIzNzguYmluZFBvcHVwKHBvcHVwXzQ3NjM5YTA1MzBmYTQ2Njc4MjA4MTdkNjQwNmQ1MmRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hZDJmMWU4YTNjMTg0ZTM3Yjg5MWVlMjhmYTIxNzk3ZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTM2Mjk5OTk5NjcyLCAtNzMuODg3MjI4MDAyMTM4NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM3ZjlkZTE0NjljNGY3YjhkNGEyZDJiMzY5ZjQ5Y2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84M2JlYTkyYTdmNWI0ZTIwYWM2YTc0YjA1ZWMyMzc0NyA9ICQoJzxkaXYgaWQ9Imh0bWxfODNiZWE5MmE3ZjViNGUyMGFjNmE3NGIwNWVjMjM3NDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM3ZjlkZTE0NjljNGY3YjhkNGEyZDJiMzY5ZjQ5Y2Iuc2V0Q29udGVudChodG1sXzgzYmVhOTJhN2Y1YjRlMjBhYzZhNzRiMDVlYzIzNzQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWQyZjFlOGEzYzE4NGUzN2I4OTFlZTI4ZmEyMTc5N2QuYmluZFBvcHVwKHBvcHVwXzljN2Y5ZGUxNDY5YzRmN2I4ZDRhMmQyYjM2OWY0OWNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zMmY2Zjg5NGJmMjc0NzlhOGY2M2Q4MmY4YmNjOTgwYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTQ1OTk5OTczMzE1LCAtNzMuODg2Mjk4MDAxOTEzMTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2NC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWRkYjFkMTgzZDM2NDFiNGFmZjEzYzBkNzFjOTAzNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MzBjMTUxZjQyZDQ0N2RjYWZkNWU1OTEwOWRlYjMyYiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTMwYzE1MWY0MmQ0NDdkY2FmZDVlNTkxMDlkZWIzMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWRkYjFkMTgzZDM2NDFiNGFmZjEzYzBkNzFjOTAzNDYuc2V0Q29udGVudChodG1sXzkzMGMxNTFmNDJkNDQ3ZGNhZmQ1ZTU5MTA5ZGViMzJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzJmNmY4OTRiZjI3NDc5YThmNjNkODJmOGJjYzk4MGMuYmluZFBvcHVwKHBvcHVwXzVkZGIxZDE4M2QzNjQxYjRhZmYxM2MwZDcxYzkwMzQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83NGVhMGU0NDE1YWE0MjZiYmNiYjFhYTkyZjJhZGQ2MyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTU1Njk5OTc1MTc3LCAtNzMuODg1MzY3MDAyNzU0MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODkyOWRlZmQ4NzRmNGNmMjlmYTkzZjg2MTI3N2FhMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjhmNjBjYzVmNzc0MWFkYjE1NzJjNWZmNDE3ZWI1MyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjY4ZjYwY2M1Zjc3NDFhZGIxNTcyYzVmZjQxN2ViNTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODkyOWRlZmQ4NzRmNGNmMjlmYTkzZjg2MTI3N2FhMWEuc2V0Q29udGVudChodG1sX2I2OGY2MGNjNWY3NzQxYWRiMTU3MmM1ZmY0MTdlYjUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNzRlYTBlNDQxNWFhNDI2YmJjYmIxYWE5MmYyYWRkNjMuYmluZFBvcHVwKHBvcHVwXzg5MjlkZWZkODc0ZjRjZjI5ZmE5M2Y4NjEyNzdhYTFhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80ZTIyMGMyOWU1Mzk0ZTRhYjBhMzIxN2UyNDg4ZWY3MCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTY1Njk5OTkzMTE5LCAtNzMuODg0NDM5MDAyMzUzMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2VjMDNmZDIyMDJiNDNlMmFmOTkwMjk5OWYzMDNjMzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYmNhZDQxOTE4OTM0Mjc4YTkyNWRkYmExYjRjNjE4ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWJjYWQ0MTkxODkzNDI3OGE5MjVkZGJhMWI0YzYxOGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VjMDNmZDIyMDJiNDNlMmFmOTkwMjk5OWYzMDNjMzAuc2V0Q29udGVudChodG1sXzFiY2FkNDE5MTg5MzQyNzhhOTI1ZGRiYTFiNGM2MThlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNGUyMjBjMjllNTM5NGU0YWIwYTMyMTdlMjQ4OGVmNzAuYmluZFBvcHVwKHBvcHVwX2NlYzAzZmQyMjAyYjQzZTJhZjk5MDI5OTlmMzAzYzMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mZDgyOTJiMTc4Y2E0NmI5YjU0OWQ5ZmVhMTQ3YzBhMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTc1NDk5OTc0ODE0LCAtNzMuODgzNTA3MDAzMzUzODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2MS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGQ4ODlmYjY5MjQzNGM4ZmI4OGFhNWI5ZDVmNWFiNTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDExYzAxODZhZjY0MjlhYmY5NTVmMWM4NTk5Mjk3MCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzQxMWMwMTg2YWY2NDI5YWJmOTU1ZjFjODU5OTI5NzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGQ4ODlmYjY5MjQzNGM4ZmI4OGFhNWI5ZDVmNWFiNTcuc2V0Q29udGVudChodG1sXzM0MTFjMDE4NmFmNjQyOWFiZjk1NWYxYzg1OTkyOTcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZmQ4MjkyYjE3OGNhNDZiOWI1NDlkOWZlYTE0N2MwYTMuYmluZFBvcHVwKHBvcHVwXzBkODg5ZmI2OTI0MzRjOGZiODhhYTViOWQ1ZjVhYjU3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hZDk0YzA3YTA3ZWQ0YjlkYmRlMmI0ZTg2ZDllOWUyMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTg1Mzk5OTg1NjAzLCAtNzMuODgyNTc5MDAyNzQ4MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1OC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGRiYzFjYjEzYjk5NDYyYzhhNDBjNGMwYzYwNzdmMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2ZlYjRiNGU3NTQ0N2RlYWQwNmQ1Nzc5MDQ4M2MzOCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDdmZWI0YjRlNzU0NDdkZWFkMDZkNTc3OTA0ODNjMzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGRiYzFjYjEzYjk5NDYyYzhhNDBjNGMwYzYwNzdmMWYuc2V0Q29udGVudChodG1sXzA3ZmViNGI0ZTc1NDQ3ZGVhZDA2ZDU3NzkwNDgzYzM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWQ5NGMwN2EwN2VkNGI5ZGJkZTJiNGU4NmQ5ZTllMjIuYmluZFBvcHVwKHBvcHVwXzhkYmMxY2IxM2I5OTQ2MmM4YTQwYzRjMGM2MDc3ZjFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wZWFlMjhiMjUwN2M0MDA2OTQ0OTQzNWM0MzVjZGZkZiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NTk1MTk5OTkyNTEyNCwgLTczLjg4MTY0ODAwMTY2NjEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogODUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4NGRiNTk5ZWJkMDQ3ZjU5M2FkZTFkNWYzZTI0ZDhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQzNGU2YjRhZTc3NDk0NGJjN2RjMjI2MWQwOWU5NTAgPSAkKCc8ZGl2IGlkPSJodG1sXzU0MzRlNmI0YWU3NzQ5NDRiYzdkYzIyNjFkMDllOTUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQ2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4NGRiNTk5ZWJkMDQ3ZjU5M2FkZTFkNWYzZTI0ZDhlLnNldENvbnRlbnQoaHRtbF81NDM0ZTZiNGFlNzc0OTQ0YmM3ZGMyMjYxZDA5ZTk1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzBlYWUyOGIyNTA3YzQwMDY5NDQ5NDM1YzQzNWNkZmRmLmJpbmRQb3B1cChwb3B1cF83ODRkYjU5OWViZDA0N2Y1OTNhZGUxZDVmM2UyNGQ4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjM1YmM0NjQzYjQ1NGU5OTk0MDg5YWVlNjhkNDZmMDIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTYwNDg5OTk4NDgwNTUsIC03My44ODA3MTkwMDI4ODkwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDc2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTRlNjg1ZjNiZTQ0NmM4OGE4ODliMmJmNDE0NWRkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhNDFhNmU0YmU5YzRlOGFhZTljNWQyYTlhODk5ZWJmID0gJCgnPGRpdiBpZD0iaHRtbF9jYTQxYTZlNGJlOWM0ZThhYWU5YzVkMmE5YTg5OWViZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk0Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNTRlNjg1ZjNiZTQ0NmM4OGE4ODliMmJmNDE0NWRkMy5zZXRDb250ZW50KGh0bWxfY2E0MWE2ZTRiZTljNGU4YWFlOWM1ZDJhOWE4OTllYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yMzViYzQ2NDNiNDU0ZTk5OTQwODlhZWU2OGQ0NmYwMi5iaW5kUG9wdXAocG9wdXBfZDU0ZTY4NWYzYmU0NDZjODhhODg5YjJiZjQxNDVkZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI5NTA2MTRjMWQyMjQyZjRhMzc5NzgyNzhlM2YzZDQzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2MTQ2OTk5OTMwOTQsIC03My44Nzk3ODkwMDMzNjczNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODc1NjZjYTVjNmY0ZDQxYjU2OWI0YzIwY2IyOGQ1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NiNzYwN2ViZTFhMTRlZTFhNTRiMDA5MmJhN2QzMzU1ID0gJCgnPGRpdiBpZD0iaHRtbF9jYjc2MDdlYmUxYTE0ZWUxYTU0YjAwOTJiYTdkMzM1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk0OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODc1NjZjYTVjNmY0ZDQxYjU2OWI0YzIwY2IyOGQ1MC5zZXRDb250ZW50KGh0bWxfY2I3NjA3ZWJlMWExNGVlMWE1NGIwMDkyYmE3ZDMzNTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yOTUwNjE0YzFkMjI0MmY0YTM3OTc4Mjc4ZTNmM2Q0My5iaW5kUG9wdXAocG9wdXBfMjg3NTY2Y2E1YzZmNGQ0MWI1NjliNGMyMGNiMjhkNTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzMxYmU4YjIxMjY2NjQ4NzNhNzMzZDYwZjUyYTUyNTNjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2MjQwOTk5OTAxMTk1LCAtNzMuODc4ODYxMDAwODE0NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1NS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmUyYThjMDhhNjRkNGYxNGJmZDA2YjZkOTExNWQwYzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTU1Mzg0ZGZjNGI0MTBjODUyOTBhMDQwYzIzYjc2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjk1NTM4NGRmYzRiNDEwYzg1MjkwYTA0MGMyM2I3NjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmUyYThjMDhhNjRkNGYxNGJmZDA2YjZkOTExNWQwYzguc2V0Q29udGVudChodG1sXzI5NTUzODRkZmM0YjQxMGM4NTI5MGEwNDBjMjNiNzY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzFiZThiMjEyNjY2NDg3M2E3MzNkNjBmNTJhNTI1M2MuYmluZFBvcHVwKHBvcHVwX2ZlMmE4YzA4YTY0ZDRmMTRiZmQwNmI2ZDkxMTVkMGM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zODZjODMyZGYyYzI0OTc1OWNiOTU4NjY1ZWE3YjU1OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjQzODk5OTgwOTY1LCAtNzMuODc2OTk4MDAyOTg5MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjMyZjBlZTMyMzNiNGE5MTgyOTA4NDhiYjA4OTg4Y2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTIxYWE0ODIwNTE0NWUwODNhOTc0ZjkwZjE0MTBlOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTUyMWFhNDgyMDUxNDVlMDgzYTk3NGY5MGYxNDEwZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjMyZjBlZTMyMzNiNGE5MTgyOTA4NDhiYjA4OTg4Y2Uuc2V0Q29udGVudChodG1sX2E1MjFhYTQ4MjA1MTQ1ZTA4M2E5NzRmOTBmMTQxMGU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzg2YzgzMmRmMmMyNDk3NTljYjk1ODY2NWVhN2I1NTguYmluZFBvcHVwKHBvcHVwX2YzMmYwZWUzMjMzYjRhOTE4MjkwODQ4YmIwODk4OGNlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lYzQwM2YxYTg3YmE0MzFmYTNkNTY0ZmRhYzEwMzIwMCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjUzNTk5OTg2MjA4LCAtNzMuODc2MDY4MDAxNTcyNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGUwNDZiOWU0Zjg3NDFlZmE5MzVkMzQ2MmQyNmU0YzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YjU3Yjg4NjBlODQ0Nzk1OGQ0ZGQ0MTZlYzdmOGI1OSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWI1N2I4ODYwZTg0NDc5NThkNGRkNDE2ZWM3ZjhiNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTUyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RlMDQ2YjllNGY4NzQxZWZhOTM1ZDM0NjJkMjZlNGM3LnNldENvbnRlbnQoaHRtbF85YjU3Yjg4NjBlODQ0Nzk1OGQ0ZGQ0MTZlYzdmOGI1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2VjNDAzZjFhODdiYTQzMWZhM2Q1NjRmZGFjMTAzMjAwLmJpbmRQb3B1cChwb3B1cF9kZTA0NmI5ZTRmODc0MWVmYTkzNWQzNDYyZDI2ZTRjNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfY2VjNDMzN2JlYzViNDcwMGE3OWEzMjFiMzI2YWIwMzggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY2MzM5OTk5OTM1NzUsIC03My44NzUxMzkwMDI2MTU0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDY3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zN2ZlMTJhM2Y4YjY0YjM4ODM2YzU1OWI4YjNiMGYwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkNDNkMTUwZGE3NjQxYTRhZmNiNjRjMjZhNjc3ZDQ0ID0gJCgnPGRpdiBpZD0iaHRtbF82ZDQzZDE1MGRhNzY0MWE0YWZjYjY0YzI2YTY3N2Q0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk1My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zN2ZlMTJhM2Y4YjY0YjM4ODM2YzU1OWI4YjNiMGYwMS5zZXRDb250ZW50KGh0bWxfNmQ0M2QxNTBkYTc2NDFhNGFmY2I2NGMyNmE2NzdkNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jZWM0MzM3YmVjNWI0NzAwYTc5YTMyMWIzMjZhYjAzOC5iaW5kUG9wdXAocG9wdXBfMzdmZTEyYTNmOGI2NGIzODgzNmM1NTliOGIzYjBmMDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzU5NTc3YWZhNWRhNDQ4MTU5ZWEyMGU0YzI4MWY3ZWM3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2NzMxOTk5NzgwMjgsIC03My44NzQyMDgwMDEyMzMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Mzc2NTc5NmNlZWQ0ZGFiOWEzMzk4N2ViNGIwNWRjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4MDNjMTZkZDdjODQxOWRiOWNkNGVjZTVkNTY3OTY0ID0gJCgnPGRpdiBpZD0iaHRtbF8xODAzYzE2ZGQ3Yzg0MTlkYjljZDRlY2U1ZDU2Nzk2NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTQ5NTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDM3NjU3OTZjZWVkNGRhYjlhMzM5ODdlYjRiMDVkY2Iuc2V0Q29udGVudChodG1sXzE4MDNjMTZkZDdjODQxOWRiOWNkNGVjZTVkNTY3OTY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNTk1NzdhZmE1ZGE0NDgxNTllYTIwZTRjMjgxZjdlYzcuYmluZFBvcHVwKHBvcHVwXzQzNzY1Nzk2Y2VlZDRkYWI5YTMzOTg3ZWI0YjA1ZGNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85NGZlYzg0NWNhOWE0MWIyYmYwM2I0OTg4ODNjYWY0ZiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Njg1MDk5OTg2Nzc2NSwgLTczLjg3MzExMTAwMTYwNzk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4MjY0YTU3ZWNkMTRjZGFiZTFlODg3OTdkYThiOTUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVkZDU3OTc3ZjRlNDA1MDkyMTA4ZjIzNTA5YTgzOWEgPSAkKCc8ZGl2IGlkPSJodG1sXzVlZGQ1Nzk3N2Y0ZTQwNTA5MjEwOGYyMzUwOWE4MzlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41NDk1NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODI2NGE1N2VjZDE0Y2RhYmUxZTg4Nzk3ZGE4Yjk1MC5zZXRDb250ZW50KGh0bWxfNWVkZDU3OTc3ZjRlNDA1MDkyMTA4ZjIzNTA5YTgzOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85NGZlYzg0NWNhOWE0MWIyYmYwM2I0OTg4ODNjYWY0Zi5iaW5kUG9wdXAocG9wdXBfNDgyNjRhNTdlY2QxNGNkYWJlMWU4ODc5N2RhOGI5NTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y3YTc4MzdjZWU4OTRiMjA5ZGVhYWUyYWE2MjlmODhkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2OTQyOTk5ODk1NDIsIC03My44NzIyMTkwMDMxNDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzNjY2OTEzYjU5ODQwNzBhZjUwOTBjNDgzMzE0ZmU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDI2NTc2YzA4NTk5NGE4ZThhNWE4ZDdmYzEyZGNjNzQgPSAkKCc8ZGl2IGlkPSJodG1sXzQyNjU3NmMwODU5OTRhOGU4YTVhOGQ3ZmMxMmRjYzc0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41NDk1Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMzY2NjkxM2I1OTg0MDcwYWY1MDkwYzQ4MzMxNGZlNi5zZXRDb250ZW50KGh0bWxfNDI2NTc2YzA4NTk5NGE4ZThhNWE4ZDdmYzEyZGNjNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mN2E3ODM3Y2VlODk0YjIwOWRlYWFlMmFhNjI5Zjg4ZC5iaW5kUG9wdXAocG9wdXBfZDM2NjY5MTNiNTk4NDA3MGFmNTA5MGM0ODMzMTRmZTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzZlNDUwYTQ4OGM1ODQ5MTBiOGZjZThjOTFjZjI3NTY4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3MDM1OTk5NzI5NDEsIC03My44NzEzMjQwMDA3NTA3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDc2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMmRmYWE1MjNiZTU0ZmYyYmJhMDk0ZGRhYjYyYTJlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwNjVhMTdlMmEyNjRlYWU4YTY0OTlhZjI3YTE0ZGYxID0gJCgnPGRpdiBpZD0iaHRtbF9mMDY1YTE3ZTJhMjY0ZWFlOGE2NDk5YWYyN2ExNGRmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTQ5NTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTJkZmFhNTIzYmU1NGZmMmJiYTA5NGRkYWI2MmEyZTguc2V0Q29udGVudChodG1sX2YwNjVhMTdlMmEyNjRlYWU4YTY0OTlhZjI3YTE0ZGYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNmU0NTBhNDg4YzU4NDkxMGI4ZmNlOGM5MWNmMjc1NjguYmluZFBvcHVwKHBvcHVwXzEyZGZhYTUyM2JlNTRmZjJiYmEwOTRkZGFiNjJhMmU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80MDNjMjYyYTgzNjc0M2Y2ODE4MDQyYjQ3OTg2NWIxZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzEzMTk5OTkwNzMxLCAtNzMuODcwNDE0MDAzMTU1MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjE4NGE4MzVlYzA5NDVlMjlhODNkZGY0MjNkZTg2YjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MzhjNWVjN2Q0NjE0YmY0OTU5NWM1Y2Y1ZDg5MGI4OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjM4YzVlYzdkNDYxNGJmNDk1OTVjNWNmNWQ4OTBiODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTU4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxODRhODM1ZWMwOTQ1ZTI5YTgzZGRmNDIzZGU4NmI2LnNldENvbnRlbnQoaHRtbF82MzhjNWVjN2Q0NjE0YmY0OTU5NWM1Y2Y1ZDg5MGI4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQwM2MyNjJhODM2NzQzZjY4MTgwNDJiNDc5ODY1YjFkLmJpbmRQb3B1cChwb3B1cF9iMTg0YTgzNWVjMDk0NWUyOWE4M2RkZjQyM2RlODZiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGMwOTM5NTEwNzhjNDQxZjkwMzNiMDEyM2FlYWU2MGIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY4MDM5OTk3NTIxNDQsIC03My44NzM2NTcwMDAyNjEwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1Ny4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDg3Nzc4OTZhZGU1NDU0YTliNWFmZTg0ODAzYWY0YTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOWQwZjc2OTFiOTg0OTU4YjNhOTRlOTcxOWI2YWVmMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjlkMGY3NjkxYjk4NDk1OGIzYTk0ZTk3MTliNmFlZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5ODIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDg3Nzc4OTZhZGU1NDU0YTliNWFmZTg0ODAzYWY0YTMuc2V0Q29udGVudChodG1sX2Y5ZDBmNzY5MWI5ODQ5NThiM2E5NGU5NzE5YjZhZWYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGMwOTM5NTEwNzhjNDQxZjkwMzNiMDEyM2FlYWU2MGIuYmluZFBvcHVwKHBvcHVwX2Q4Nzc3ODk2YWRlNTQ1NGE5YjVhZmU4NDgwM2FmNGEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hYTJjZDQwMTRhN2Y0ZTlkOTE2YTJlODk5MDMyYjQwMSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDEwOTk5OTgyNjc2LCAtNzMuODk4Njk3MDAzNTQzOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Y0ZDY2NmM3NjEzNDlkOWJjYjdlNjI5ZDgwMDBlMDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MjNiNTk5NWU1Njc0ZmRlOGQ3ZjAyZjMyODIxMmQwOSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjIzYjU5OTVlNTY3NGZkZThkN2YwMmYzMjgyMTJkMDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU0OTg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmNGQ2NjZjNzYxMzQ5ZDliY2I3ZTYyOWQ4MDAwZTA0LnNldENvbnRlbnQoaHRtbF82MjNiNTk5NWU1Njc0ZmRlOGQ3ZjAyZjMyODIxMmQwOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FhMmNkNDAxNGE3ZjRlOWQ5MTZhMmU4OTkwMzJiNDAxLmJpbmRQb3B1cChwb3B1cF8zZjRkNjY2Yzc2MTM0OWQ5YmNiN2U2MjlkODAwMGUwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTBjMTRmM2E0YTQwNDgzNmJhZGVhNzVkMWZiOTIwNDMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTk5NzM5OTk5NDcwODYsIC03My44OTg0NTYwMDI4MTM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYmI2ZTVkODk3NzY0N2JhODZiMDA1MTdhOWIwYmVmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4MjVkNzMyZjFhNzQ4MzRhNjRhNWNiZDg3MTE2OTdkID0gJCgnPGRpdiBpZD0iaHRtbF9iODI1ZDczMmYxYTc0ODM0YTY0YTVjYmQ4NzExNjk3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgxMzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmJiNmU1ZDg5Nzc2NDdiYTg2YjAwNTE3YTliMGJlZmMuc2V0Q29udGVudChodG1sX2I4MjVkNzMyZjFhNzQ4MzRhNjRhNWNiZDg3MTE2OTdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNTBjMTRmM2E0YTQwNDgzNmJhZGVhNzVkMWZiOTIwNDMuYmluZFBvcHVwKHBvcHVwX2ZiYjZlNWQ4OTc3NjQ3YmE4NmIwMDUxN2E5YjBiZWZjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lZmI5ZTI0ZDM0MDA0OWFhYWE1ZjFjNjM2Y2ZiZTY0OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTk3Mjk5OTg2NjIxLCAtNzMuODk4NjExMDAxMzE4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOGU0ZWUwOWIzZDA0Y2FkOTMzZTY5MzUyOWUxZWQ2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwYTkyNThjMjI4YTQwY2M4ZTM5NmZkNTc0MzExMzllID0gJCgnPGRpdiBpZD0iaHRtbF9hMGE5MjU4YzIyOGE0MGNjOGUzOTZmZDU3NDMxMTM5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgxNjIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZThlNGVlMDliM2QwNGNhZDkzM2U2OTM1MjllMWVkNmEuc2V0Q29udGVudChodG1sX2EwYTkyNThjMjI4YTQwY2M4ZTM5NmZkNTc0MzExMzllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZWZiOWUyNGQzNDAwNDlhYWFhNWYxYzYzNmNmYmU2NDguYmluZFBvcHVwKHBvcHVwX2U4ZTRlZTA5YjNkMDRjYWQ5MzNlNjkzNTI5ZTFlZDZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80MTgzNDRjMzE1MzU0NzY2YTAxOTNkZjhkZmM4MTVjZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Nzk1NDk5OTk3MTU4LCAtNzMuODk4MTkyMDAzMzgyMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMThlYmFiNzQ4YThlNGY5NGE5ZDhiMmI3OTJiMmRjZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMjIxM2FlNjg5Mjg0ZWM2YWRhMDBjZGQ5MGFkMjk0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDIyMTNhZTY4OTI4NGVjNmFkYTAwY2RkOTBhZDI5NGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTgzNDMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMThlYmFiNzQ4YThlNGY5NGE5ZDhiMmI3OTJiMmRjZTcuc2V0Q29udGVudChodG1sXzAyMjEzYWU2ODkyODRlYzZhZGEwMGNkZDkwYWQyOTRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNDE4MzQ0YzMxNTM1NDc2NmEwMTkzZGY4ZGZjODE1Y2QuYmluZFBvcHVwKHBvcHVwXzE4ZWJhYjc0OGE4ZTRmOTRhOWQ4YjJiNzkyYjJkY2U3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wZGNmMDYyZjgzNTc0MjAxODNiMDhhYTI3ZWYxNDAzMCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODA1OTk5OTk5Njk3LCAtNzMuODk3MTkxMDAyNDI5NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjZkYjU2MGNlYTQ2NGE2YmExNTNlNDNkMzI4Zjc3N2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMWU2M2JlYjY0MzQ0NDM5YWFkNWY2YTgzOWMwODA3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzFlNjNiZWI2NDM0NDQzOWFhZDVmNmE4MzljMDgwN2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzQ0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2ZGI1NjBjZWE0NjRhNmJhMTUzZTQzZDMyOGY3NzdmLnNldENvbnRlbnQoaHRtbF9jMWU2M2JlYjY0MzQ0NDM5YWFkNWY2YTgzOWMwODA3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzBkY2YwNjJmODM1NzQyMDE4M2IwOGFhMjdlZjE0MDMwLmJpbmRQb3B1cChwb3B1cF9mNmRiNTYwY2VhNDY0YTZiYTE1M2U0M2QzMjhmNzc3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYmQxNjBmMzdmMzUwNDY5OTgyMDA2ZWZmZTA3NWM4NjEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTgxNTg5OTk5MDE5MiwgLTczLjg5NjI2MjAwMTIwMDI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3ODdhMTU3OTY2NDQ0NGRiZTYwNjJkZDk3ZDlkNDAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWMyY2M4MTYxMmQ5NDkzNWIyM2Q0NzcxMmFlM2U1ZmYgPSAkKCc8ZGl2IGlkPSJodG1sX2VjMmNjODE2MTJkOTQ5MzViMjNkNDc3MTJhZTNlNWZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM0NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Nzg3YTE1Nzk2NjQ0NDRkYmU2MDYyZGQ5N2Q5ZDQwMi5zZXRDb250ZW50KGh0bWxfZWMyY2M4MTYxMmQ5NDkzNWIyM2Q0NzcxMmFlM2U1ZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iZDE2MGYzN2YzNTA0Njk5ODIwMDZlZmZlMDc1Yzg2MS5iaW5kUG9wdXAocG9wdXBfNTc4N2ExNTc5NjY0NDQ0ZGJlNjA2MmRkOTdkOWQ0MDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNmYmQ1ZmJjN2Y4YTQyY2E5MDQwNWM4YWViNjcyYTgxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4MjU0OTk5OTc1OTksIC03My44OTUzMzYwMDE0OTYyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOWE3MTAxZmZkMzQ0Mzk5Yjk2M2YyZmZhZTNjOTQ2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4ODgzYTNiZTY3NTRlOTlhYmU5Y2NhN2Q3MmVmMDhhID0gJCgnPGRpdiBpZD0iaHRtbF9iODg4M2EzYmU2NzU0ZTk5YWJlOWNjYTdkNzJlZjA4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNDYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTlhNzEwMWZmZDM0NDM5OWI5NjNmMmZmYWUzYzk0NjEuc2V0Q29udGVudChodG1sX2I4ODgzYTNiZTY3NTRlOTlhYmU5Y2NhN2Q3MmVmMDhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfM2ZiZDVmYmM3ZjhhNDJjYTkwNDA1YzhhZWI2NzJhODEuYmluZFBvcHVwKHBvcHVwXzE5YTcxMDFmZmQzNDQzOTliOTYzZjJmZmFlM2M5NDYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kNWFmMGM5MzMyZGE0NzkzODJlYjEzMmJlMzA4MjM1ZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODM1Mjk5OTkxNzUwNiwgLTczLjg5NDQwMjAwMDY0NTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4NTg2NDFmYjAzNzQ1ZTc4ZDU2NDdiMWM0ZTU1OTAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTM1MzVkMDQ4M2IyNGM3ODk0Y2VlYTg0MjJiNWExOWYgPSAkKCc8ZGl2IGlkPSJodG1sXzUzNTM1ZDA0ODNiMjRjNzg5NGNlZWE4NDIyYjVhMTlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM0Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODU4NjQxZmIwMzc0NWU3OGQ1NjQ3YjFjNGU1NTkwMy5zZXRDb250ZW50KGh0bWxfNTM1MzVkMDQ4M2IyNGM3ODk0Y2VlYTg0MjJiNWExOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kNWFmMGM5MzMyZGE0NzkzODJlYjEzMmJlMzA4MjM1ZS5iaW5kUG9wdXAocG9wdXBfNjg1ODY0MWZiMDM3NDVlNzhkNTY0N2IxYzRlNTU5MDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Q0N2M1ODQ4ZTEzNDQ5Zjc4ZWVlZGU5ZTU2NDdhY2JlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NDUwOTk5OTMzOTcsIC03My44OTM0NzMwMDM1NzczNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lM2FlODUyMGY2ZDA0OTRkOWE2YzdmNDVmNzM0NTY0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiNTc3MDBmMzdkMjRjOTI4YWMwZWExZDNlZjRhNGNiID0gJCgnPGRpdiBpZD0iaHRtbF8zYjU3NzAwZjM3ZDI0YzkyOGFjMGVhMWQzZWY0YTRjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNDguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNhZTg1MjBmNmQwNDk0ZDlhNmM3ZjQ1ZjczNDU2NGEuc2V0Q29udGVudChodG1sXzNiNTc3MDBmMzdkMjRjOTI4YWMwZWExZDNlZjRhNGNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZDQ3YzU4NDhlMTM0NDlmNzhlZWVkZTllNTY0N2FjYmUuYmluZFBvcHVwKHBvcHVwX2UzYWU4NTIwZjZkMDQ5NGQ5YTZjN2Y0NWY3MzQ1NjRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85MzU1MWEwNmExNjE0NmQ5YWMzYjk2OTMwZDc5MTAwMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODU0OTk5OTk0NjgxLCAtNzMuODkyNTI4MDAwNjgyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzkyNWIyNWU3N2IzNDkzZGIzMzQ4MjE3MGQyNGNhYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzM5MmY4YjJmNmY0ZTgxOGQ5ZjA3OTM1NzY3Y2IwNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjMzOTJmOGIyZjZmNGU4MThkOWYwNzkzNTc2N2NiMDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzQ5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M5MjViMjVlNzdiMzQ5M2RiMzM0ODIxNzBkMjRjYWM0LnNldENvbnRlbnQoaHRtbF9mMzM5MmY4YjJmNmY0ZTgxOGQ5ZjA3OTM1NzY3Y2IwNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzkzNTUxYTA2YTE2MTQ2ZDlhYzNiOTY5MzBkNzkxMDAyLmJpbmRQb3B1cChwb3B1cF9jOTI1YjI1ZTc3YjM0OTNkYjMzNDgyMTcwZDI0Y2FjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGU3MTdhZGZiMjAzNGIyMDg4MGRlMzg5YjVkNDA2ZGQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTg2NDU5OTk5MjY0NiwgLTczLjg5MTYwOTAwMDAxNTU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczOGRjNzAxMzk1MDQ4ZjNhNjFiYzlhYTJjMGQ3OTc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTg0MDIwNzYxYTlkNGI5OWExMmMzZWY4MmIyOGE2OGQgPSAkKCc8ZGl2IGlkPSJodG1sX2E4NDAyMDc2MWE5ZDRiOTlhMTJjM2VmODJiMjhhNjhkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM1MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzhkYzcwMTM5NTA0OGYzYTYxYmM5YWEyYzBkNzk3Ni5zZXRDb250ZW50KGh0bWxfYTg0MDIwNzYxYTlkNGI5OWExMmMzZWY4MmIyOGE2OGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84ZTcxN2FkZmIyMDM0YjIwODgwZGUzODliNWQ0MDZkZC5iaW5kUG9wdXAocG9wdXBfNzM4ZGM3MDEzOTUwNDhmM2E2MWJjOWFhMmMwZDc5NzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzdjYzJlNjljMDFhNjQ0MzNiODJkOWViYTk4NzE0NDZhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NzQzOTk5OTM1NTA0LCAtNzMuODkwNjkxMDAwNDkzMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjZjNjAxMTIzNmJjNDQwYjg5Yjk0MTMyNWM2ZjBlNzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZDBiMzUzMjBmZDU0MGQwYjVmZGRmYjhjNTViMDJmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfM2QwYjM1MzIwZmQ1NDBkMGI1ZmRkZmI4YzU1YjAyZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzUxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2YzYwMTEyMzZiYzQ0MGI4OWI5NDEzMjVjNmYwZTc3LnNldENvbnRlbnQoaHRtbF8zZDBiMzUzMjBmZDU0MGQwYjVmZGRmYjhjNTViMDJmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdjYzJlNjljMDFhNjQ0MzNiODJkOWViYTk4NzE0NDZhLmJpbmRQb3B1cChwb3B1cF9mNmM2MDExMjM2YmM0NDBiODliOTQxMzI1YzZmMGU3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjg4ZTgyOTQwNWQ5NDVkMmJhNTQ4NjViZmUyMzIyOWQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTg4NDA5OTk4MDU5OCwgLTczLjg4OTc1MDAwMjg5MTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0ODlhN2EzZDA3MDRmMTc4NGQyMzc1NDk0Y2IwNzk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjM5MmZlMzJiOTVlNDE4NWJiMzMwYWFhNGRjMzc4NzUgPSAkKCc8ZGl2IGlkPSJodG1sX2YzOTJmZTMyYjk1ZTQxODViYjMzMGFhYTRkYzM3ODc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM1Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDg5YTdhM2QwNzA0ZjE3ODRkMjM3NTQ5NGNiMDc5Ny5zZXRDb250ZW50KGh0bWxfZjM5MmZlMzJiOTVlNDE4NWJiMzMwYWFhNGRjMzc4NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iODhlODI5NDA1ZDk0NWQyYmE1NDg2NWJmZTIzMjI5ZC5iaW5kUG9wdXAocG9wdXBfZjQ4OWE3YTNkMDcwNGYxNzg0ZDIzNzU0OTRjYjA3OTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2FmYzljMDhmYTA3MTQ4YTc5ZWE2M2FiYzc5NDlmZGE4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4OTM2OTk5ODI1NCwgLTczLjg4ODgyMzAwMjQxMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjZiODkzYWRhMjFiNDZhYjlmMWM3OWI1MzExNDQ2ZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMWFhNDg3MzkwOGU0M2EwODAyMTkxYzVkZTk5ZGQ1OSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjFhYTQ4NzM5MDhlNDNhMDgwMjE5MWM1ZGU5OWRkNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzUzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2Yjg5M2FkYTIxYjQ2YWI5ZjFjNzliNTMxMTQ0NmYzLnNldENvbnRlbnQoaHRtbF9mMWFhNDg3MzkwOGU0M2EwODAyMTkxYzVkZTk5ZGQ1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FmYzljMDhmYTA3MTQ4YTc5ZWE2M2FiYzc5NDlmZGE4LmJpbmRQb3B1cChwb3B1cF8yNmI4OTNhZGEyMWI0NmFiOWYxYzc5YjUzMTE0NDZmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTdlMmQyYWI2OTkyNGMyMmFmNTgzNDIyM2FkYTI4OWEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTkwMzY5OTk4MTQyNSwgLTczLjg4Nzg5MzAwMDExNjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5OGExNTU1M2UzODQ5ZjM4NDA3ZmUzODI3NjU1ZGEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2ZhZDdiMTlmZTNkNDIxZmI5YTYyMGJmMTFiZjZhMjYgPSAkKCc8ZGl2IGlkPSJodG1sX2NmYWQ3YjE5ZmUzZDQyMWZiOWE2MjBiZjExYmY2YTI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4MzU0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M5OGExNTU1M2UzODQ5ZjM4NDA3ZmUzODI3NjU1ZGEwLnNldENvbnRlbnQoaHRtbF9jZmFkN2IxOWZlM2Q0MjFmYjlhNjIwYmYxMWJmNmEyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2E3ZTJkMmFiNjk5MjRjMjJhZjU4MzQyMjNhZGEyODlhLmJpbmRQb3B1cChwb3B1cF9jOThhMTU1NTNlMzg0OWYzODQwN2ZlMzgyNzY1NWRhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjI2MWUxZmFiMGQ0NDc5N2JmY2M0YzA3M2I2YjEzOWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTkxMzI5OTk4MzMzMiwgLTczLjg4Njk2NTAwMTU1MjM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMDA2YTExMmNiZDQzNjRhMmMxY2MzMDc0MTU5NjIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Q1MjUyZGUzZTY4NDk0MDljYWRmZmFhMjM1YTIzMzcgPSAkKCc8ZGl2IGlkPSJodG1sXzdkNTI1MmRlM2U2ODQ5NDA5Y2FkZmZhYTIzNWEyMzM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM1NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTAwNmExMTJjYmQ0MzY0YTJjMWNjMzA3NDE1OTYyMC5zZXRDb250ZW50KGh0bWxfN2Q1MjUyZGUzZTY4NDk0MDljYWRmZmFhMjM1YTIzMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yMjYxZTFmYWIwZDQ0Nzk3YmZjYzRjMDczYjZiMTM5Yy5iaW5kUG9wdXAocG9wdXBfNWUwMDZhMTEyY2JkNDM2NGEyYzFjYzMwNzQxNTk2MjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzE5ODRjNmEwYTc3MjRlMmJhMjc4NDNmMmU3NDM3N2JmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5MjMyOTk5ODE0MjE2LCAtNzMuODg2MDM2MDAwODAwMTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmM4NzgyODhjOGEwNGUzOWIyYjQwNmQxNDIwM2M1ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZGIyOTgzNDA0N2Q0NjQ4YmE2ZDE5YzBlNDI4YTIwMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMmRiMjk4MzQwNDdkNDY0OGJhNmQxOWMwZTQyOGEyMDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTgzNTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmM4NzgyODhjOGEwNGUzOWIyYjQwNmQxNDIwM2M1ZDYuc2V0Q29udGVudChodG1sXzJkYjI5ODM0MDQ3ZDQ2NDhiYTZkMTljMGU0MjhhMjAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTk4NGM2YTBhNzcyNGUyYmEyNzg0M2YyZTc0Mzc3YmYuYmluZFBvcHVwKHBvcHVwXzZjODc4Mjg4YzhhMDRlMzliMmI0MDZkMTQyMDNjNWQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hNGUzZWE4NzRmZjM0YmVlODRiMmNlMjNjODFmYTlmMCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTMyOTk5OTgxMDk1LCAtNzMuODg1MTA2MDAyNTQyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjViOGViN2MyNzE0MWU1OGUzYTEyZTcxZDk5MzlmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhYTllOTQwZGQ2YTQwYzViYjkxZTBiNTY0OTk5NjhhID0gJCgnPGRpdiBpZD0iaHRtbF9lYWE5ZTk0MGRkNmE0MGM1YmI5MWUwYjU2NDk5OTY4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmY1YjhlYjdjMjcxNDFlNThlM2ExMmU3MWQ5OTM5Zjcuc2V0Q29udGVudChodG1sX2VhYTllOTQwZGQ2YTQwYzViYjkxZTBiNTY0OTk5NjhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTRlM2VhODc0ZmYzNGJlZTg0YjJjZTIzYzgxZmE5ZjAuYmluZFBvcHVwKHBvcHVwX2ZmNWI4ZWI3YzI3MTQxZTU4ZTNhMTJlNzFkOTkzOWY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV81ZjUxZWE3ZDAxMmM0NmUzYjdlNDljNTA4OGQ2YTFhNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTQyNjk5OTk4MzgsIC03My44ODQxNzYwMDE1NjI3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YjkwODM4OWI3ZGY0YjkwYTQyMmZhZjEwOWU0NWVlNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3NDUyYzJjMTA1ODRjMzE4NDgyZThiMzA1NTA1YTEzID0gJCgnPGRpdiBpZD0iaHRtbF8zNzQ1MmMyYzEwNTg0YzMxODQ4MmU4YjMwNTUwNWExMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWI5MDgzODliN2RmNGI5MGE0MjJmYWYxMDllNDVlZTUuc2V0Q29udGVudChodG1sXzM3NDUyYzJjMTA1ODRjMzE4NDgyZThiMzA1NTA1YTEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNWY1MWVhN2QwMTJjNDZlM2I3ZTQ5YzUwODhkNmExYTUuYmluZFBvcHVwKHBvcHVwXzliOTA4Mzg5YjdkZjRiOTBhNDIyZmFmMTA5ZTQ1ZWU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84YzE2NmM5ZDgzNGI0ZmU4YjQ4MzJiMTJhNWRhMjk5MiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTUyNTk5OTk2ODc2LCAtNzMuODgzMjQ1MDAxNjk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZWRkZWJmY2VmODM0ZDUzOWQ4ZjcwYmQ3N2QzMTI1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiODFhM2RjMjhmMzQ4NDRiN2RmNGUxNTE1ZDZhMTczID0gJCgnPGRpdiBpZD0iaHRtbF9iYjgxYTNkYzI4ZjM0ODQ0YjdkZjRlMTUxNWQ2YTE3MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTgzNTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmVkZGViZmNlZjgzNGQ1MzlkOGY3MGJkNzdkMzEyNWUuc2V0Q29udGVudChodG1sX2JiODFhM2RjMjhmMzQ4NDRiN2RmNGUxNTE1ZDZhMTczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGMxNjZjOWQ4MzRiNGZlOGI0ODMyYjEyYTVkYTI5OTIuYmluZFBvcHVwKHBvcHVwX2JlZGRlYmZjZWY4MzRkNTM5ZDhmNzBiZDc3ZDMxMjVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV82OGQwY2U2MWRjZDI0NWFmYWNhY2VmOGMyMjRlNzhlZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTYyMzk5OTc3Njk2LCAtNzMuODgyMzE2MDAwNTc3MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGUwODk2YWRjMWQ2NDM0OGFiNjYzMWJmNTQ2ZjRlNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ODIwZDMxYTc1ZGM0NGU5OGY1M2M0OWJhZDRkZWExYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNzgyMGQzMWE3NWRjNDRlOThmNTNjNDliYWQ0ZGVhMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4MzYwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlMDg5NmFkYzFkNjQzNDhhYjY2MzFiZjU0NmY0ZTY4LnNldENvbnRlbnQoaHRtbF83ODIwZDMxYTc1ZGM0NGU5OGY1M2M0OWJhZDRkZWExYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzY4ZDBjZTYxZGNkMjQ1YWZhY2FjZWY4YzIyNGU3OGVlLmJpbmRQb3B1cChwb3B1cF8wZTA4OTZhZGMxZDY0MzQ4YWI2NjMxYmY1NDZmNGU2OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNzlmODQ0YzJiMmFmNDQ1MTkxMGY3YjY4MzI5NDhjNGYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTk3MjE5OTk4NDk1NSwgLTczLjg4MTM4NjAwMDQzODUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5Mzc2ZGVhYWFhYjQ3Mzc5YzA3YTA0MjIwYmZhZmRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTk5OWMxMTI0N2NjNGY5M2I2MWQ3ZmE4ODI5M2I3N2EgPSAkKCc8ZGl2IGlkPSJodG1sX2E5OTljMTEyNDdjYzRmOTNiNjFkN2ZhODgyOTNiNzdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM2MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTM3NmRlYWFhYWI0NzM3OWMwN2EwNDIyMGJmYWZkZi5zZXRDb250ZW50KGh0bWxfYTk5OWMxMTI0N2NjNGY5M2I2MWQ3ZmE4ODI5M2I3N2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83OWY4NDRjMmIyYWY0NDUxOTEwZjdiNjgzMjk0OGM0Zi5iaW5kUG9wdXAocG9wdXBfYTkzNzZkZWFhYWFiNDczNzljMDdhMDQyMjBiZmFmZGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ViYmNhMDg1MTBhOTQ0ODA5MzI5ZTIwNjczYTM3MDgxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5ODE4OTk5NzM3MjcsIC03My44ODA0NTkwMDI2MTA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkMjYxNWIwZjc0NzQ1NDliYjQ0ZTA1YzZlODJkYjJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODEzMzNkMzM0OGM0NGIyOWFmYTYyNDQ4ZWY3YzM0NTMgPSAkKCc8ZGl2IGlkPSJodG1sXzgxMzMzZDMzNDhjNDRiMjlhZmE2MjQ0OGVmN2MzNDUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODM2Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZDI2MTViMGY3NDc0NTQ5YmI0NGUwNWM2ZTgyZGIyZC5zZXRDb250ZW50KGh0bWxfODEzMzNkMzM0OGM0NGIyOWFmYTYyNDQ4ZWY3YzM0NTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lYmJjYTA4NTEwYTk0NDgwOTMyOWUyMDY3M2EzNzA4MS5iaW5kUG9wdXAocG9wdXBfM2QyNjE1YjBmNzQ3NDU0OWJiNDRlMDVjNmU4MmRiMmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzZlODVlZDI4Njc5MDQzYjQ5OGIwZmJkN2RhZWQ0Yjg0ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5OTE2OTk5NzQ1NzEsIC03My44Nzk1MjcwMDA4MjYyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NmUxNjFlNmU4NGU0Y2YyODAxN2FjYTE1ZjdhYjA5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxMzVjNWEyZWRkYTQ3OWQ4YjMxYzViMDZhMWUyMTQxID0gJCgnPGRpdiBpZD0iaHRtbF82MTM1YzVhMmVkZGE0NzlkOGIzMWM1YjA2YTFlMjE0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODM2My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NmUxNjFlNmU4NGU0Y2YyODAxN2FjYTE1ZjdhYjA5OS5zZXRDb250ZW50KGh0bWxfNjEzNWM1YTJlZGRhNDc5ZDhiMzFjNWIwNmExZTIxNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82ZTg1ZWQyODY3OTA0M2I0OThiMGZiZDdkYWVkNGI4NC5iaW5kUG9wdXAocG9wdXBfNjZlMTYxZTZlODRlNGNmMjgwMTdhY2ExNWY3YWIwOTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2E1Y2MzOGJhNWY1MDQ1NjA4OGE1ZDY2ODM5MDQ1NGMyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2NDA0OTk5OTk3MzcsIC03My44OTc5MTAwMDA5MDAxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iN2YzZDc5ZDIyMGU0YzQ4OTJhNWI1NTA3OTRlN2M2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczZGMxNTE5ZTYwZDRlNjE5MjkxZGIyNTlkMjc0NGNiID0gJCgnPGRpdiBpZD0iaHRtbF83M2RjMTUxOWU2MGQ0ZTYxOTI5MWRiMjU5ZDI3NDRjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg1NjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjdmM2Q3OWQyMjBlNGM0ODkyYTViNTUwNzk0ZTdjNmEuc2V0Q29udGVudChodG1sXzczZGMxNTE5ZTYwZDRlNjE5MjkxZGIyNTlkMjc0NGNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTVjYzM4YmE1ZjUwNDU2MDg4YTVkNjY4MzkwNDU0YzIuYmluZFBvcHVwKHBvcHVwX2I3ZjNkNzlkMjIwZTRjNDg5MmE1YjU1MDc5NGU3YzZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mNWU2NjM1YzQ5ZDM0NWNkYjhhMTJjMGUxYmZhODM1YyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjUxMDk5OTg4ODg2LCAtNzMuODk2OTA4MDAzMzYxNzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzg2ZGFlZmU3NjkwNDU2NjhlYTNjNDU3NWQ3YjYzNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NTUwYmIzODhlOTU0NTQxOWY4Y2UxNTEwOGQ5MDU1MCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzU1MGJiMzg4ZTk1NDU0MTlmOGNlMTUxMDhkOTA1NTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4NTY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4NmRhZWZlNzY5MDQ1NjY4ZWEzYzQ1NzVkN2I2MzYzLnNldENvbnRlbnQoaHRtbF83NTUwYmIzODhlOTU0NTQxOWY4Y2UxNTEwOGQ5MDU1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y1ZTY2MzVjNDlkMzQ1Y2RiOGExMmMwZTFiZmE4MzVjLmJpbmRQb3B1cChwb3B1cF83ODZkYWVmZTc2OTA0NTY2OGVhM2M0NTc1ZDdiNjM2MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTk4NzJmMWFiNmRlNDFjNDg1NGNiNDIzYTUxMTFhMTMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY2MDc5OTk5MjMzNiwgLTczLjg5NTk3NjAwMTY1NzQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxZTc2ZWUyM2JkYTQxMDM4MGJiNThjMzI3YjE4M2UxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGE0Y2EwOGY1NDVjNDQ2ZGFmNTU5Y2Q4ODQ5ZTkxYzQgPSAkKCc8ZGl2IGlkPSJodG1sXzRhNGNhMDhmNTQ1YzQ0NmRhZjU1OWNkODg0OWU5MWM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODU2OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MWU3NmVlMjNiZGE0MTAzODBiYjU4YzMyN2IxODNlMS5zZXRDb250ZW50KGh0bWxfNGE0Y2EwOGY1NDVjNDQ2ZGFmNTU5Y2Q4ODQ5ZTkxYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xOTg3MmYxYWI2ZGU0MWM0ODU0Y2I0MjNhNTExMWExMy5iaW5kUG9wdXAocG9wdXBfNTFlNzZlZTIzYmRhNDEwMzgwYmI1OGMzMjdiMTgzZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y2NTgwZGM0Y2QxNjQ1Y2M5MmI4NDJjOWFhNzk2Y2MwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2NzEwOTk5OTk5MzU2LCAtNzMuODk1MDUyMDAwOTE4NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzA5OGZmYjZlOWEyNDM5ZmE2M2JmODdhZjMwYWVjZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mM2Y0NDhhOGQ0ZGY0N2NlODllMTNmNGVlYTE5Y2VkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjNmNDQ4YThkNGRmNDdjZTg5ZTEzZjRlZWExOWNlZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4NTY5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwOThmZmI2ZTlhMjQzOWZhNjNiZjg3YWYzMGFlY2RhLnNldENvbnRlbnQoaHRtbF9mM2Y0NDhhOGQ0ZGY0N2NlODllMTNmNGVlYTE5Y2VkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y2NTgwZGM0Y2QxNjQ1Y2M5MmI4NDJjOWFhNzk2Y2MwLmJpbmRQb3B1cChwb3B1cF8zMDk4ZmZiNmU5YTI0MzlmYTYzYmY4N2FmMzBhZWNkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTM3YmM5NmMyYmEwNDljZWI0NDNkYWVhZWE4NjhmNTEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY3OTQ5OTk3MzM1MzYsIC03My44OTQxMjQwMDI4ODQzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzQ4OGNmNWFjOWQ0OTZmOWVhMmMwNWVmYTNmMTM5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1YTkyYzU3MjEzNTQ3MDU5NDkwZGVkNzU2NTc2YWRjID0gJCgnPGRpdiBpZD0iaHRtbF8yNWE5MmM1NzIxMzU0NzA1OTQ5MGRlZDc1NjU3NmFkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzQ4OGNmNWFjOWQ0OTZmOWVhMmMwNWVmYTNmMTM5OS5zZXRDb250ZW50KGh0bWxfMjVhOTJjNTcyMTM1NDcwNTk0OTBkZWQ3NTY1NzZhZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xMzdiYzk2YzJiYTA0OWNlYjQ0M2RhZWFlYTg2OGY1MS5iaW5kUG9wdXAocG9wdXBfOTM0ODhjZjVhYzlkNDk2ZjllYTJjMDVlZmEzZjEzOTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2JjZTAzMzc2MTE3NzQ5MTdiZWQyYWIwODM4YTEyMjNlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2ODk3OTk5OTA1ODI0LCAtNzMuODkzMTg4MDAyMTc4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NDJiNGI5OTkwZjQ0MWQ2ODBhYzgyNGQwOTIwNGNlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyYTNhZjBlZTcxZDQ1MGU4ZTZmZmY0ZjRlNTFhMTZkID0gJCgnPGRpdiBpZD0iaHRtbF8xMmEzYWYwZWU3MWQ0NTBlOGU2ZmZmNGY0ZTUxYTE2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NDJiNGI5OTkwZjQ0MWQ2ODBhYzgyNGQwOTIwNGNlMy5zZXRDb250ZW50KGh0bWxfMTJhM2FmMGVlNzFkNDUwZThlNmZmZjRmNGU1MWExNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iY2UwMzM3NjExNzc0OTE3YmVkMmFiMDgzOGExMjIzZS5iaW5kUG9wdXAocG9wdXBfNjQyYjRiOTk5MGY0NDFkNjgwYWM4MjRkMDkyMDRjZTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzM4ODE2NDdmMjEyMDQyY2RiZmZhY2JkMjNhZmExN2RjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2OTg5OTk5OTQ0OTA2LCAtNzMuODkyMjYxMDAwNTA0NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDY0MTA2NDllNzIwNGU3OGJiYmQ0OGZiZDViYTQ0ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMWIyOTc1NGEyMjE0NjUxYTc4NDg3YmI3NGQzYmEyNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDFiMjk3NTRhMjIxNDY1MWE3ODQ4N2JiNzRkM2JhMjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDY0MTA2NDllNzIwNGU3OGJiYmQ0OGZiZDViYTQ0ZDYuc2V0Q29udGVudChodG1sXzAxYjI5NzU0YTIyMTQ2NTFhNzg0ODdiYjc0ZDNiYTI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzg4MTY0N2YyMTIwNDJjZGJmZmFjYmQyM2FmYTE3ZGMuYmluZFBvcHVwKHBvcHVwX2Q2NDEwNjQ5ZTcyMDRlNzhiYmJkNDhmYmQ1YmE0NGQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84NmM2ZDE5NGVlZjg0MWM5YTNhZjA3NDAwYThhMDY4OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzA5NTk5OTk1MDcxLCAtNzMuODkxMzMzMDAyNDUxNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTNjM2M0MTYxZjk3NDVkNDhiMTI1YjJkOGQ0MjM4MGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjdjZTAxODcwZjk0MjdjOTYyNGM4M2UxM2YxYWQ4ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNmY3Y2UwMTg3MGY5NDI3Yzk2MjRjODNlMTNmMWFkOGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTNjM2M0MTYxZjk3NDVkNDhiMTI1YjJkOGQ0MjM4MGIuc2V0Q29udGVudChodG1sXzZmN2NlMDE4NzBmOTQyN2M5NjI0YzgzZTEzZjFhZDhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfODZjNmQxOTRlZWY4NDFjOWEzYWYwNzQwMGE4YTA2ODguYmluZFBvcHVwKHBvcHVwXzEzYzNjNDE2MWY5NzQ1ZDQ4YjEyNWIyZDhkNDIzODBiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jMDYzODZhNGZkYjI0MjkxOWZkN2ExMjVkZjJkZGFmOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzE5Mjk5OTg4MzgxLCAtNzMuODkwNDAzMDAyMTEwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjBjNjYwOGZiZDk0MTUzOTU1ZjFjZmFhYjk0NjgzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyYTM2NGM2ZGJmNjRmZWE5NzAzODU4OGJhNjIyNGQyID0gJCgnPGRpdiBpZD0iaHRtbF8xMmEzNjRjNmRiZjY0ZmVhOTcwMzg1ODhiYTYyMjRkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjBjNjYwOGZiZDk0MTUzOTU1ZjFjZmFhYjk0NjgzNC5zZXRDb250ZW50KGh0bWxfMTJhMzY0YzZkYmY2NGZlYTk3MDM4NTg4YmE2MjI0ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jMDYzODZhNGZkYjI0MjkxOWZkN2ExMjVkZjJkZGFmOS5iaW5kUG9wdXAocG9wdXBfMWIwYzY2MDhmYmQ5NDE1Mzk1NWYxY2ZhYWI5NDY4MzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFlNDk3NTk1YjljZDRiNjJhZTk0MjA1N2E2OWZjYWRkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3MjkyOTk5ODY3NTMsIC03My44ODk0NzIwMDE0NDI4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZDI0OWNjOGM2YzI0ZDc0OGQ2ZWRhNmY1ZjdmNDM0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEzMGZiMWJiM2U5MTQyNTU5MmNhMjRmMzM5MzUwODdiID0gJCgnPGRpdiBpZD0iaHRtbF8xMzBmYjFiYjNlOTE0MjU1OTJjYTI0ZjMzOTM1MDg3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDI0OWNjOGM2YzI0ZDc0OGQ2ZWRhNmY1ZjdmNDM0ZS5zZXRDb250ZW50KGh0bWxfMTMwZmIxYmIzZTkxNDI1NTkyY2EyNGYzMzkzNTA4N2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xZTQ5NzU5NWI5Y2Q0YjYyYWU5NDIwNTdhNjlmY2FkZC5iaW5kUG9wdXAocG9wdXBfMGQyNDljYzhjNmMyNGQ3NDhkNmVkYTZmNWY3ZjQzNGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI5OTYwNTM4NzU5YTQ5Mjg4YmExZjA2YzM0NGExMDFhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3Mzg3OTk5NzkyODU0LCAtNzMuODg4NTQ0MDAyMjcwMzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmM4YWMyNTQ1YTAyNGNiYzgzNGVjYWEzZjQ2NTNmMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZGZhY2VmZDEzMWE0ZTY1OTAwNmNjOGViMTk0MGI5MyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2RmYWNlZmQxMzFhNGU2NTkwMDZjYzhlYjE5NDBiOTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmM4YWMyNTQ1YTAyNGNiYzgzNGVjYWEzZjQ2NTNmMTMuc2V0Q29udGVudChodG1sX2NkZmFjZWZkMTMxYTRlNjU5MDA2Y2M4ZWIxOTQwYjkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjk5NjA1Mzg3NTlhNDkyODhiYTFmMDZjMzQ0YTEwMWEuYmluZFBvcHVwKHBvcHVwX2ZjOGFjMjU0NWEwMjRjYmM4MzRlY2FhM2Y0NjUzZjEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85NTAzYTIwNWM0ODM0ZTIwOWMwZGQ0OWVmNTkxY2ZhYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzQ4NDk5OTg0MjE1NiwgLTczLjg4NzYxMzAwMTEyMjY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlYjJjMGY4YzdkOTQ1YjNhNGQ3OThkMDlmZGNmZDBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2I1YTEzYTZiOTgyNGFlODgxY2E4NDAyZWJhNWJhODEgPSAkKCc8ZGl2IGlkPSJodG1sX2NiNWExM2E2Yjk4MjRhZTg4MWNhODQwMmViYTViYTgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTc3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlYjJjMGY4YzdkOTQ1YjNhNGQ3OThkMDlmZGNmZDBjLnNldENvbnRlbnQoaHRtbF9jYjVhMTNhNmI5ODI0YWU4ODFjYTg0MDJlYmE1YmE4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzk1MDNhMjA1YzQ4MzRlMjA5YzBkZDQ5ZWY1OTFjZmFjLmJpbmRQb3B1cChwb3B1cF8xZWIyYzBmOGM3ZDk0NWIzYTRkNzk4ZDA5ZmRjZmQwYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDgxN2Y1ZmEwMDRmNDBkOTkwZjg3NDVkNjE3NjU4YzkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc1ODU5OTk5MDYyOCwgLTczLjg4NjY4NTAwMDgyOTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5Zjk5MDU1YzkzODRlMGQ4YjlmNGZlNDkzYmNjMzg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmM2OTJhNjQ2MGI0NGUxMjg5MzkwOWE2M2ZkYmViMzggPSAkKCc8ZGl2IGlkPSJodG1sX2JjNjkyYTY0NjBiNDRlMTI4OTM5MDlhNjNmZGJlYjM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTc4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5Zjk5MDU1YzkzODRlMGQ4YjlmNGZlNDkzYmNjMzg4LnNldENvbnRlbnQoaHRtbF9iYzY5MmE2NDYwYjQ0ZTEyODkzOTA5YTYzZmRiZWIzOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQ4MTdmNWZhMDA0ZjQwZDk5MGY4NzQ1ZDYxNzY1OGM5LmJpbmRQb3B1cChwb3B1cF85OWY5OTA1NWM5Mzg0ZTBkOGI5ZjRmZTQ5M2JjYzM4OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYmUwZjY5ZjExYTdiNDYxNGFlZTlhNDI0MDQ1NDI2ZDQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc2ODM5OTk3NzY5NjUsIC03My44ODU3NTMwMDM0NDI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmNWMyNWJkYWJmYjRhOTU4ZDY0YWI2MmZlMmNkZGEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzY1MTMyZGJiYzlkNDQ2OThjNjM1MzgyOTk1ZTVmMzEgPSAkKCc8ZGl2IGlkPSJodG1sXzM2NTEzMmRiYmM5ZDQ0Njk4YzYzNTM4Mjk5NWU1ZjMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTc5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmNWMyNWJkYWJmYjRhOTU4ZDY0YWI2MmZlMmNkZGEyLnNldENvbnRlbnQoaHRtbF8zNjUxMzJkYmJjOWQ0NDY5OGM2MzUzODI5OTVlNWYzMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2JlMGY2OWYxMWE3YjQ2MTRhZWU5YTQyNDA0NTQyNmQ0LmJpbmRQb3B1cChwb3B1cF9iZjVjMjViZGFiZmI0YTk1OGQ2NGFiNjJmZTJjZGRhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNjE1MmY5ODRmNTEwNDU1Y2EzZWJlZDhhOTgzODYzNGMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc3Nzk5OTk5NDgzMSwgLTczLjg4NDgyNDAwMjcxMjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1OGYwYjdiOWVhMjRmY2M5NDA5MDY0M2JmNGY3MmI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDUwZDE0NjEzYThkNDBmZTljZjA2NGEzZWE0MzAyZTcgPSAkKCc8ZGl2IGlkPSJodG1sXzQ1MGQxNDYxM2E4ZDQwZmU5Y2YwNjRhM2VhNDMwMmU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTgwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1OGYwYjdiOWVhMjRmY2M5NDA5MDY0M2JmNGY3MmI3LnNldENvbnRlbnQoaHRtbF80NTBkMTQ2MTNhOGQ0MGZlOWNmMDY0YTNlYTQzMDJlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzYxNTJmOTg0ZjUxMDQ1NWNhM2ViZWQ4YTk4Mzg2MzRjLmJpbmRQb3B1cChwb3B1cF83NThmMGI3YjllYTI0ZmNjOTQwOTA2NDNiZjRmNzJiNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTgyZGUxM2ZjMjgzNGY4ZWJiYmFkY2E4ZTEzMmFmMTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc4NzY5OTk3NzAwOCwgLTczLjg4Mzg5NzAwMDg3MDY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhODhkNGZiMDNhYjRjMjVhY2E1NjFjYjBhZDhlMWFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzMyMjU5NjE2MGU4NDAzMzk3M2NjOGFlMzI4MzI0MmEgPSAkKCc8ZGl2IGlkPSJodG1sXzczMjI1OTYxNjBlODQwMzM5NzNjYzhhZTMyODMyNDJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTgxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhODhkNGZiMDNhYjRjMjVhY2E1NjFjYjBhZDhlMWFjLnNldENvbnRlbnQoaHRtbF83MzIyNTk2MTYwZTg0MDMzOTczY2M4YWUzMjgzMjQyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2E4MmRlMTNmYzI4MzRmOGViYmJhZGNhOGUxMzJhZjE5LmJpbmRQb3B1cChwb3B1cF8wYTg4ZDRmYjAzYWI0YzI1YWNhNTYxY2IwYWQ4ZTFhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjg5ZjYxMGJjZDBmNDBlMzk5YjI2OGQyNWI4ZDJiZmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc5NzU5OTk4NjA4MSwgLTczLjg4Mjk2NDAwMDg3NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGVjYjY2NGNjZmI2NGE4YWIxNjAxNTY3MjljYmU0MzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMmVjMDAwNjM3ZmU0OTI1OGNjN2EwZjA0YWIzN2M0MSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTJlYzAwMDYzN2ZlNDkyNThjYzdhMGYwNGFiMzdjNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGVjYjY2NGNjZmI2NGE4YWIxNjAxNTY3MjljYmU0MzQuc2V0Q29udGVudChodG1sXzEyZWMwMDA2MzdmZTQ5MjU4Y2M3YTBmMDRhYjM3YzQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjg5ZjYxMGJjZDBmNDBlMzk5YjI2OGQyNWI4ZDJiZmYuYmluZFBvcHVwKHBvcHVwXzRlY2I2NjRjY2ZiNjRhOGFiMTYwMTU2NzI5Y2JlNDM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kZWVmMTM4MWQ4YWM0ZmZiYjhmNjk5ZWM0NThkMThhNCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODA3Mzk5OTg3NzAzNCwgLTczLjg4MjAzNTAwMjkxMDIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjMjgyNzY0NWUwZjRkNzc5YzFhYzhiMjY1ZDlmZjgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDVjZTU0NTgzYjJkNDQwZmIxOGMyMmE0ODMxZjA1OWEgPSAkKCc8ZGl2IGlkPSJodG1sX2Q1Y2U1NDU4M2IyZDQ0MGZiMThjMjJhNDgzMWYwNTlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODU4My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzI4Mjc2NDVlMGY0ZDc3OWMxYWM4YjI2NWQ5ZmY4MC5zZXRDb250ZW50KGh0bWxfZDVjZTU0NTgzYjJkNDQwZmIxOGMyMmE0ODMxZjA1OWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kZWVmMTM4MWQ4YWM0ZmZiYjhmNjk5ZWM0NThkMThhNC5iaW5kUG9wdXAocG9wdXBfOGMyODI3NjQ1ZTBmNGQ3NzljMWFjOGIyNjVkOWZmODApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2U0ODBmMGFjNzcyNDRhZTA4YmNlM2E5OTYyZmJlNzBlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4MTcwOTk5NzU1MTgsIC03My44ODExMDQwMDA2NTI4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YzViYzljYzk2ODY0NWYwOTQ1ODQyMmJjMDkyN2E5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5NjRlMDM1NWJmMDQ1NzBiZmZiMGFlNjA2MzI4NTA0ID0gJCgnPGRpdiBpZD0iaHRtbF84OTY0ZTAzNTViZjA0NTcwYmZmYjBhZTYwNjMyODUwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YzViYzljYzk2ODY0NWYwOTQ1ODQyMmJjMDkyN2E5MC5zZXRDb250ZW50KGh0bWxfODk2NGUwMzU1YmYwNDU3MGJmZmIwYWU2MDYzMjg1MDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lNDgwZjBhYzc3MjQ0YWUwOGJjZTNhOTk2MmZiZTcwZS5iaW5kUG9wdXAocG9wdXBfOWM1YmM5Y2M5Njg2NDVmMDk0NTg0MjJiYzA5MjdhOTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2NmMTA3YjEzMjc5MDRjMmQ5MDAzMjk4YjZiYzE1YTMxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4MjY4OTk5ODY4OCwgLTczLjg4MDE3NTAwMDgxNDM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlN2NhNjgwNzFmOTRhMDE4YjI1OGE2NGJhNGNmODVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTRlMTEwM2U1YTM4NDA3NGIzMmY2ZjA2YWVhMzgwOGMgPSAkKCc8ZGl2IGlkPSJodG1sXzE0ZTExMDNlNWEzODQwNzRiMzJmNmYwNmFlYTM4MDhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTg1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlN2NhNjgwNzFmOTRhMDE4YjI1OGE2NGJhNGNmODVlLnNldENvbnRlbnQoaHRtbF8xNGUxMTAzZTVhMzg0MDc0YjMyZjZmMDZhZWEzODA4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2NmMTA3YjEzMjc5MDRjMmQ5MDAzMjk4YjZiYzE1YTMxLmJpbmRQb3B1cChwb3B1cF8yZTdjYTY4MDcxZjk0YTAxOGIyNThhNjRiYTRjZjg1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMmFhYzcwNmE0NTEzNDU0NzkxOTRlY2ViOGU4MmQ0YWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTgzNjc5OTk4NjMwMywgLTczLjg3OTI0NTAwMDE2MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDg3OWFlZGFhZjVmNDY5Y2IyZDRlOWI1ODE0NWQxZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMTk1NWU4YTVjNTg0ZmFmYjViYTRhM2FjMDQ4ZDI5NyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzE5NTVlOGE1YzU4NGZhZmI1YmE0YTNhYzA0OGQyOTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDg3OWFlZGFhZjVmNDY5Y2IyZDRlOWI1ODE0NWQxZGQuc2V0Q29udGVudChodG1sXzMxOTU1ZThhNWM1ODRmYWZiNWJhNGEzYWMwNDhkMjk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmFhYzcwNmE0NTEzNDU0NzkxOTRlY2ViOGU4MmQ0YWMuYmluZFBvcHVwKHBvcHVwXzA4NzlhZWRhYWY1ZjQ2OWNiMmQ0ZTliNTgxNDVkMWRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jNjJkZDBjMWU3OTI0ZWVmYjU2OGNiNzVhYTIwMTFmYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODQ2Mzk5OTc1NjEzLCAtNzMuODc4MzE1MDAyMjEyNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmQxYTIwNzFhNzEwNDIyM2EzYmY5MjM3N2Y2ZGJmMzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOGVlY2YyZWNjODc0NWQzYWI1NTFmN2Q3ZjY5ZDY1NyA9ICQoJzxkaXYgaWQ9Imh0bWxfZThlZWNmMmVjYzg3NDVkM2FiNTUxZjdkN2Y2OWQ2NTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQxYTIwNzFhNzEwNDIyM2EzYmY5MjM3N2Y2ZGJmMzQuc2V0Q29udGVudChodG1sX2U4ZWVjZjJlY2M4NzQ1ZDNhYjU1MWY3ZDdmNjlkNjU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYzYyZGQwYzFlNzkyNGVlZmI1NjhjYjc1YWEyMDExZmMuYmluZFBvcHVwKHBvcHVwX2JkMWEyMDcxYTcxMDQyMjNhM2JmOTIzNzdmNmRiZjM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zN2IyOWE1ZDAwMjE0MWM2YjQwZWM2ZDcxYjlhN2QwNCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODU2MTk5OTkyMjM0LCAtNzMuODc3Mzg1MDAxNDk2MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg2ZmVmZWMzNGEzNDA0Yzk5NTBiMTc3OGEzMGE4MTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTc3ZjIzNzk1ZTE0MDU4OGI3NzY0NWFmYTFjMzI5NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjk3N2YyMzc5NWUxNDA1ODhiNzc2NDVhZmExYzMyOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTg2ZmVmZWMzNGEzNDA0Yzk5NTBiMTc3OGEzMGE4MTcuc2V0Q29udGVudChodG1sXzI5NzdmMjM3OTVlMTQwNTg4Yjc3NjQ1YWZhMWMzMjk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzdiMjlhNWQwMDIxNDFjNmI0MGVjNmQ3MWI5YTdkMDQuYmluZFBvcHVwKHBvcHVwXzU4NmZlZmVjMzRhMzQwNGM5OTUwYjE3NzhhMzBhODE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yZWVkNTkwOGIwZmY0Njc1OWM3YTBjMTU2NThjY2E3OSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODY1OTk5OTk5MzkyNCwgLTczLjg3NjQ1NTAwMTYzOTA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IwN2NhMThlM2Y4NTRjOTlhYWM2OTQ3NDZjNWVlZDM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGViMDcwYmM2YjRlNDQ4Y2I0ZjIyNTNhOWE1ZWRiYWEgPSAkKCc8ZGl2IGlkPSJodG1sX2RlYjA3MGJjNmI0ZTQ0OGNiNGYyMjUzYTlhNWVkYmFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODU4OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMDdjYTE4ZTNmODU0Yzk5YWFjNjk0NzQ2YzVlZWQzNy5zZXRDb250ZW50KGh0bWxfZGViMDcwYmM2YjRlNDQ4Y2I0ZjIyNTNhOWE1ZWRiYWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yZWVkNTkwOGIwZmY0Njc1OWM3YTBjMTU2NThjY2E3OS5iaW5kUG9wdXAocG9wdXBfYjA3Y2ExOGUzZjg1NGM5OWFhYzY5NDc0NmM1ZWVkMzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2NiZDEwYTYyMjRiMzRkYmNiZjQ0NTlhNDFjOGY3YTA4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4Njc5OTk5OTkzMjgsIC03My44NzU1MTEwMDIyNTMyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDlkMTE1NjA3YTc0YjgzYjc5NjYyNjQ0NTE1ZGQ5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2YmRiZDNhYzZhYjQ0MjhiMDc2YzhkZmE1MGI5MWY1ID0gJCgnPGRpdiBpZD0iaHRtbF9kNmJkYmQzYWM2YWI0NDI4YjA3NmM4ZGZhNTBiOTFmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg1OTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjA5ZDExNTYwN2E3NGI4M2I3OTY2MjY0NDUxNWRkOWIuc2V0Q29udGVudChodG1sX2Q2YmRiZDNhYzZhYjQ0MjhiMDc2YzhkZmE1MGI5MWY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfY2JkMTBhNjIyNGIzNGRiY2JmNDQ1OWE0MWM4ZjdhMDguYmluZFBvcHVwKHBvcHVwX2YwOWQxMTU2MDdhNzRiODNiNzk2NjI2NDQ1MTVkZDliKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wNDczY2Y3NjIyZjA0NzQ3YmUxZjNlOTdkZTFhOWExNiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODU5Mjk5OTc1NjgxNCwgLTczLjg3NDUxMjAwMTczODY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1OWJmYzk3YWM0MjRiNWU5NjQ2NjhlMjJkOGI1MzJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2M5ZjdiZTQxMDg2NDdkYmJlZjg1OTRmMmMzMWY0MzcgPSAkKCc8ZGl2IGlkPSJodG1sXzdjOWY3YmU0MTA4NjQ3ZGJiZWY4NTk0ZjJjMzFmNDM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTkxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1OWJmYzk3YWM0MjRiNWU5NjQ2NjhlMjJkOGI1MzJiLnNldENvbnRlbnQoaHRtbF83YzlmN2JlNDEwODY0N2RiYmVmODU5NGYyYzMxZjQzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzA0NzNjZjc2MjJmMDQ3NDdiZTFmM2U5N2RlMWE5YTE2LmJpbmRQb3B1cChwb3B1cF82NTliZmM5N2FjNDI0YjVlOTY0NjY4ZTIyZDhiNTMyYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzM5ZTQ2YzMwNmIwNGFkMDg3YzkyMWQ5MDE5NGIwM2YgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTg2OTQ5OTk4ODI4MiwgLTczLjg3MzQ0ODAwMzU5MTUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1MzBmOTYxNzZlNzRkZDRiYTMwZThhYWU4ZjgxY2RiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjU3OTU5NTQzNWM0NGIxNTk3NDVjNWY3YjcxOWMyMDEgPSAkKCc8ZGl2IGlkPSJodG1sXzI1Nzk1OTU0MzVjNDRiMTU5NzQ1YzVmN2I3MTljMjAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODU5Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NTMwZjk2MTc2ZTc0ZGQ0YmEzMGU4YWFlOGY4MWNkYi5zZXRDb250ZW50KGh0bWxfMjU3OTU5NTQzNWM0NGIxNTk3NDVjNWY3YjcxOWMyMDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jMzllNDZjMzA2YjA0YWQwODdjOTIxZDkwMTk0YjAzZi5iaW5kUG9wdXAocG9wdXBfOTUzMGY5NjE3NmU3NGRkNGJhMzBlOGFhZThmODFjZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y2OGM4ZWEyOThhODRkMjA5MWJiMTBlN2RmOTFhMjk1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NzkxOTk5ODQ0NTEsIC03My44NzI1NTIwMDA3MzkzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTgyN2VkMWEwZjI0NzJjYWUzY2MwYmI3ZTM4NWM1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzNjZjZTM2MjEwYzQ4NjM5OWYyNDJjZDYxN2FlYzkzID0gJCgnPGRpdiBpZD0iaHRtbF85MzY2Y2UzNjIxMGM0ODYzOTlmMjQyY2Q2MTdhZWM5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg1OTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmU4MjdlZDFhMGYyNDcyY2FlM2NjMGJiN2UzODVjNWUuc2V0Q29udGVudChodG1sXzkzNjZjZTM2MjEwYzQ4NjM5OWYyNDJjZDYxN2FlYzkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZjY4YzhlYTI5OGE4NGQyMDkxYmIxMGU3ZGY5MWEyOTUuYmluZFBvcHVwKHBvcHVwXzJlODI3ZWQxYTBmMjQ3MmNhZTNjYzBiYjdlMzg1YzVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iYmJmZjkwNzRhMjE0ZjA5YjE1OGVlYTkyNDU4ZjhiZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODg4NTk5OTk3MDA1LCAtNzMuODcxNjU2MDAxMDQ0NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2NhYjMxY2EzMDNlNGZhY2FhYTVmMGU0ZDE2MmRmZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYzhjNDIyYjlhMTk0ZDQzODhiYmMyOWM1Mjg5YTJjOCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmM4YzQyMmI5YTE5NGQ0Mzg4YmJjMjljNTI4OWEyYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4NTk0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjYWIzMWNhMzAzZTRmYWNhYWE1ZjBlNGQxNjJkZmRlLnNldENvbnRlbnQoaHRtbF9mYzhjNDIyYjlhMTk0ZDQzODhiYmMyOWM1Mjg5YTJjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2JiYmZmOTA3NGEyMTRmMDliMTU4ZWVhOTI0NThmOGJlLmJpbmRQb3B1cChwb3B1cF9jY2FiMzFjYTMwM2U0ZmFjYWFhNWYwZTRkMTYyZGZkZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNjNmNWZjZTA3ODMwNDBlY2EyNTFmZGZhNjQ0YjdjOTEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTg5ODI5OTk5NjEzMDQsIC03My44NzA3NDcwMDE4NTc5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWQ4MDYwZGQ5OTM0Y2E5ODFkN2Y1ZjM2MjM4ZTI5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0NDVjOTUzOTg4ZTQ1Zjg4NzU5MjI0NjkxYWM1NTk5ID0gJCgnPGRpdiBpZD0iaHRtbF8wNDQ1Yzk1Mzk4OGU0NWY4ODc1OTIyNDY5MWFjNTU5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg1OTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmFkODA2MGRkOTkzNGNhOTgxZDdmNWYzNjIzOGUyOTQuc2V0Q29udGVudChodG1sXzA0NDVjOTUzOTg4ZTQ1Zjg4NzU5MjI0NjkxYWM1NTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNjNmNWZjZTA3ODMwNDBlY2EyNTFmZGZhNjQ0YjdjOTEuYmluZFBvcHVwKHBvcHVwX2ZhZDgwNjBkZDk5MzRjYTk4MWQ3ZjVmMzYyMzhlMjk0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yYWQ3OGNiM2I1Yjg0ZjlkYjhmOGFmMDQ3ZmNjNGFiZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MjI5Mzk5OTgzNzYzLCAtNzMuODk4Njk5MDAwMDEyOTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDM0YzFmYmUzMTFmNDQ3MTllNWQwOTg4Yzg3ZjQ1NzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZDlkYTViNWYxZTk0MjNiODIyOTIxZGQ1YmRkOWFkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWQ5ZGE1YjVmMWU5NDIzYjgyMjkyMWRkNWJkZDlhZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODMzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzNGMxZmJlMzExZjQ0NzE5ZTVkMDk4OGM4N2Y0NTc3LnNldENvbnRlbnQoaHRtbF8xZDlkYTViNWYxZTk0MjNiODIyOTIxZGQ1YmRkOWFkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzJhZDc4Y2IzYjViODRmOWRiOGY4YWYwNDdmY2M0YWJkLmJpbmRQb3B1cChwb3B1cF9kMzRjMWZiZTMxMWY0NDcxOWU1ZDA5ODhjODdmNDU3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDRiOWNjYzc0ZDUxNDNmNmI0MzcxYWFmMGY0YmRmOWUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIzMTc5OTk4MjQwOCwgLTczLjg5ODQ3MTAwMDk1ODQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4MzAyMWU3Yzc4MzQ2YzRiNTUyNmYzMWI1ZDJhNWFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjkyMDI5M2Q3NDcwNGU3ZGEzZmEzZjBkNmYxOGQ5MWYgPSAkKCc8ZGl2IGlkPSJodG1sXzI5MjAyOTNkNzQ3MDRlN2RhM2ZhM2YwZDZmMThkOTFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODg4My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODMwMjFlN2M3ODM0NmM0YjU1MjZmMzFiNWQyYTVhYi5zZXRDb250ZW50KGh0bWxfMjkyMDI5M2Q3NDcwNGU3ZGEzZmEzZjBkNmYxOGQ5MWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wNGI5Y2NjNzRkNTE0M2Y2YjQzNzFhYWYwZjRiZGY5ZS5iaW5kUG9wdXAocG9wdXBfNzgzMDIxZTdjNzgzNDZjNGI1NTI2ZjMxYjVkMmE1YWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzM3YWI0Yjk2NjI3OTQ3NjNiYjU4MTI4YjM3MDAyNGE0ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUyNDU4OTk5OTA3OTQ0LCAtNzMuODk3MTUxMDAwNTkwNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQyMzQxOWFmNjA2NGY0ZWIyNWYyMDYwYThmNTkwOTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjA5YzE4MTM3ZTA0ZThhYWFmMzQ3YThjZmM5ZGFlMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzIwOWMxODEzN2UwNGU4YWFhZjM0N2E4Y2ZjOWRhZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0MjM0MTlhZjYwNjRmNGViMjVmMjA2MGE4ZjU5MDk0LnNldENvbnRlbnQoaHRtbF83MjA5YzE4MTM3ZTA0ZThhYWFmMzQ3YThjZmM5ZGFlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzM3YWI0Yjk2NjI3OTQ3NjNiYjU4MTI4YjM3MDAyNGE0LmJpbmRQb3B1cChwb3B1cF8zNDIzNDE5YWY2MDY0ZjRlYjI1ZjIwNjBhOGY1OTA5NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDlkYzIyM2ZiZjk2NGMwY2IxZjBhZTE4MzQ4YWZlYmUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI1NTk5OTk3NDIwNSwgLTczLjg5NjE5MjAwMTYwODI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4N2M3YmRiNDJmZjQ5OTc5NGQwNzI4OWQyMTFkNWQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y3MTY0ZGYxOWFlNDc1OGI5ZGFiNTk3NDg0NDE5OGIgPSAkKCc8ZGl2IGlkPSJodG1sX2NmNzE2NGRmMTlhZTQ3NThiOWRhYjU5NzQ4NDQxOThiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODg4NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODdjN2JkYjQyZmY0OTk3OTRkMDcyODlkMjExZDVkNi5zZXRDb250ZW50KGh0bWxfY2Y3MTY0ZGYxOWFlNDc1OGI5ZGFiNTk3NDg0NDE5OGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wOWRjMjIzZmJmOTY0YzBjYjFmMGFlMTgzNDhhZmViZS5iaW5kUG9wdXAocG9wdXBfODg3YzdiZGI0MmZmNDk5Nzk0ZDA3Mjg5ZDIxMWQ1ZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzU3OTRiNmQxYWVjMzQzY2RhOTI1ZTQ3N2JkYzIyZDU5ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUyNjU2OTk5NzU3NDEsIC03My44OTUyNjAwMDM2MDA0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzhkZjhlMGUzYmQ0OGJmYTZjNmUzMzNmN2M4ZDUyOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczNzVlYTUwMDYwNDQ0YTM4ZTQ3NDMxOGJiODM5NDgzID0gJCgnPGRpdiBpZD0iaHRtbF83Mzc1ZWE1MDA2MDQ0NGEzOGU0NzQzMThiYjgzOTQ4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg4ODYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM4ZGY4ZTBlM2JkNDhiZmE2YzZlMzMzZjdjOGQ1Mjguc2V0Q29udGVudChodG1sXzczNzVlYTUwMDYwNDQ0YTM4ZTQ3NDMxOGJiODM5NDgzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNTc5NGI2ZDFhZWMzNDNjZGE5MjVlNDc3YmRjMjJkNTkuYmluZFBvcHVwKHBvcHVwXzkzOGRmOGUwZTNiZDQ4YmZhNmM2ZTMzM2Y3YzhkNTI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mYTU1YjFhOGRkNjY0NTk0ODA5MDc4NWM1YTc2MWU1YSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mjc1NTk5OTkyNzU5LCAtNzMuODk0MzMwMDAyODYxMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTNkZWFjZjA1YjYzNDQxMWI4ZmY3YzUzYjQzZTE1MDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOWJlOTEwMzY5NWE0MzE5ODg4ZTU1YTAwOGEzZjNkOCA9ICQoJzxkaXYgaWQ9Imh0bWxfMTliZTkxMDM2OTVhNDMxOTg4OGU1NWEwMDhhM2YzZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODg3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzZGVhY2YwNWI2MzQ0MTFiOGZmN2M1M2I0M2UxNTA0LnNldENvbnRlbnQoaHRtbF8xOWJlOTEwMzY5NWE0MzE5ODg4ZTU1YTAwOGEzZjNkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2ZhNTViMWE4ZGQ2NjQ1OTQ4MDkwNzg1YzVhNzYxZTVhLmJpbmRQb3B1cChwb3B1cF9hM2RlYWNmMDViNjM0NDExYjhmZjdjNTNiNDNlMTUwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjg0NWYxMGY5MjE3NDVmOGI0OWNiYzA5Zjk3YTc5YzIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI4NTE5OTk3ODU4NzUsIC03My44OTMzOTgwMDA5NzY1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDMzNmRjZjRhNDM0NDY2ODIyNmI2YjIzNDJlNDFjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhMTc1ZGMwZTdjMzQ5ZGZiYzQ1YjgzOWRhM2Q1NmM3ID0gJCgnPGRpdiBpZD0iaHRtbF8xYTE3NWRjMGU3YzM0OWRmYmM0NWI4MzlkYTNkNTZjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODg4OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDMzNmRjZjRhNDM0NDY2ODIyNmI2YjIzNDJlNDFjMi5zZXRDb250ZW50KGh0bWxfMWExNzVkYzBlN2MzNDlkZmJjNDViODM5ZGEzZDU2YzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yODQ1ZjEwZjkyMTc0NWY4YjQ5Y2JjMDlmOTdhNzljMi5iaW5kUG9wdXAocG9wdXBfNWQzMzZkY2Y0YTQzNDQ2NjgyMjZiNmIyMzQyZTQxYzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI1NmMzMmQwMWFjNzRiMmU4ZWQ2MmM5NjU3MTk4YzZjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUyOTQ3OTk5NzM5NzMsIC03My44OTI0NzMwMDIwODYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTNhODhlYWE5YTQ0ZDc5Yjg3NTViMzI5MjNkMjM0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkZjM3ZDdmMDYxNzRhYzRhZGQ1ZTYwYWRhZWQ5Nzc2ID0gJCgnPGRpdiBpZD0iaHRtbF9iZGYzN2Q3ZjA2MTc0YWM0YWRkNWU2MGFkYWVkOTc3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODg4OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTNhODhlYWE5YTQ0ZDc5Yjg3NTViMzI5MjNkMjM0ZS5zZXRDb250ZW50KGh0bWxfYmRmMzdkN2YwNjE3NGFjNGFkZDVlNjBhZGFlZDk3NzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yNTZjMzJkMDFhYzc0YjJlOGVkNjJjOTY1NzE5OGM2Yy5iaW5kUG9wdXAocG9wdXBfOTkzYTg4ZWFhOWE0NGQ3OWI4NzU1YjMyOTIzZDIzNGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzQyNjg0ZDg1NjlhOTRmZWE4N2YwYTBlMjUzYjNjOGI3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzMDQ2OTk5ODgyNzUsIC03My44OTE1NDUwMDM1MDExMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDJhZWZhNjFhNzI0MzA5OGNjNGM5MTc2MWViYjdmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkZDUxNGE1NTY5ZDRhMzFhZjZkMjZhZjFkYzhmOGIxID0gJCgnPGRpdiBpZD0iaHRtbF8xZGQ1MTRhNTU2OWQ0YTMxYWY2ZDI2YWYxZGM4ZjhiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg4OTAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQyYWVmYTYxYTcyNDMwOThjYzRjOTE3NjFlYmI3ZjAuc2V0Q29udGVudChodG1sXzFkZDUxNGE1NTY5ZDRhMzFhZjZkMjZhZjFkYzhmOGIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNDI2ODRkODU2OWE5NGZlYTg3ZjBhMGUyNTNiM2M4YjcuYmluZFBvcHVwKHBvcHVwXzc0MmFlZmE2MWE3MjQzMDk4Y2M0YzkxNzYxZWJiN2YwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lMDFjOGJjM2Q0M2Q0NDY3OGU1NmNhMWIzZjkxOGY2YSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MzE0NDk5OTgxNTcyNCwgLTczLjg5MDYxMzAwMTAzODgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzOTZmOTBhMDA2NjQ2OTA5YzIyMzkwZGQxMmQ0ZjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDBlODEwMDZlYTNmNDVmZmE1N2FjMzBkM2ZlOWI2MjggPSAkKCc8ZGl2IGlkPSJodG1sXzAwZTgxMDA2ZWEzZjQ1ZmZhNTdhYzMwZDNmZTliNjI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODg5MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMzk2ZjkwYTAwNjY0NjkwOWMyMjM5MGRkMTJkNGY4Yy5zZXRDb250ZW50KGh0bWxfMDBlODEwMDZlYTNmNDVmZmE1N2FjMzBkM2ZlOWI2MjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lMDFjOGJjM2Q0M2Q0NDY3OGU1NmNhMWIzZjkxOGY2YS5iaW5kUG9wdXAocG9wdXBfYTM5NmY5MGEwMDY2NDY5MDljMjIzOTBkZDEyZDRmOGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2U5ODBhOTQ4ZjE4YjQxZjM4Y2Q1NWRjMDBlNjU1NTY5ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzMjQyOTk5NzUxOTUsIC03My44ODk2ODQwMDIzOTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kY2JkMmRiNTRmZDk0Mjc0ODYxNWQ4MmE3MzQzYzcxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0YzE1NjY0Njc0NTRlNmQ4ZTVjMjI3MmY2Njg0OWJhID0gJCgnPGRpdiBpZD0iaHRtbF9iNGMxNTY2NDY3NDU0ZTZkOGU1YzIyNzJmNjY4NDliYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg4OTIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGNiZDJkYjU0ZmQ5NDI3NDg2MTVkODJhNzM0M2M3MTIuc2V0Q29udGVudChodG1sX2I0YzE1NjY0Njc0NTRlNmQ4ZTVjMjI3MmY2Njg0OWJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTk4MGE5NDhmMThiNDFmMzhjZDU1ZGMwMGU2NTU1NjkuYmluZFBvcHVwKHBvcHVwX2RjYmQyZGI1NGZkOTQyNzQ4NjE1ZDgyYTczNDNjNzEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kMjNiMTNiNzViMGY0MDkzYjk0Y2NiYTU1MDIyN2UyNyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MzMzOTk5OTgzNzA3LCAtNzMuODg4NzU2MDAyNDcyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE0NjQ1NWJiNWMwNDkyOWE5M2U2ODY5MjQ3ODZmMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGViZDdiMzNkNTI0ZjBhYTBlMDVhOTE0YjM5MjdjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjhlYmQ3YjMzZDUyNGYwYWEwZTA1YTkxNGIzOTI3YzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODkzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxNDY0NTViYjVjMDQ5MjlhOTNlNjg2OTI0Nzg2ZjBlLnNldENvbnRlbnQoaHRtbF82OGViZDdiMzNkNTI0ZjBhYTBlMDVhOTE0YjM5MjdjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QyM2IxM2I3NWIwZjQwOTNiOTRjY2JhNTUwMjI3ZTI3LmJpbmRQb3B1cChwb3B1cF81MTQ2NDU1YmI1YzA0OTI5YTkzZTY4NjkyNDc4NmYwZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDMwM2U1ZDQ0ZGRhNGU5MzhiMDg2OTNiOTJkOWFlN2UgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM0Mzc5OTk5OTE5LCAtNzMuODg3ODI0MDAyNTk4NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1NS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTliY2NiOGM1YzA3NDE0NGI2NjAzMjZkNzBkNjgzNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZGMxN2Q2NDgyOGU0MjYzODdjNjg0ZjBjZjBhMzgxYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGRjMTdkNjQ4MjhlNDI2Mzg3YzY4NGYwY2YwYTM4MWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODk0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5YmNjYjhjNWMwNzQxNDRiNjYwMzI2ZDcwZDY4MzViLnNldENvbnRlbnQoaHRtbF80ZGMxN2Q2NDgyOGU0MjYzODdjNjg0ZjBjZjBhMzgxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QzMDNlNWQ0NGRkYTRlOTM4YjA4NjkzYjkyZDlhZTdlLmJpbmRQb3B1cChwb3B1cF81OWJjY2I4YzVjMDc0MTQ0YjY2MDMyNmQ3MGQ2ODM1YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjNiNmE2NjIyYzliNGMxMWJkOWU3ZWIzYzY4MDcyNDIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM1MzU5OTk4Mjg2MSwgLTczLjg4Njg5NjAwMjc0MjUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlYTVkOThlZDZhNTQ1NGI4MmFkYWZhZmViOTIwM2M1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDRhNTlmNGMyZDk2NGI1YWI1ZjZkNGUyMDI1Y2QxMzIgPSAkKCc8ZGl2IGlkPSJodG1sX2Q0YTU5ZjRjMmQ5NjRiNWFiNWY2ZDRlMjAyNWNkMTMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODg5NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWE1ZDk4ZWQ2YTU0NTRiODJhZGFmYWZlYjkyMDNjNS5zZXRDb250ZW50KGh0bWxfZDRhNTlmNGMyZDk2NGI1YWI1ZjZkNGUyMDI1Y2QxMzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mM2I2YTY2MjJjOWI0YzExYmQ5ZTdlYjNjNjgwNzI0Mi5iaW5kUG9wdXAocG9wdXBfNGVhNWQ5OGVkNmE1NDU0YjgyYWRhZmFmZWI5MjAzYzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I1MWI5Yzk0NzNmZTRhYjlhYWM0MDkxZTM0YmI5ZDQyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzNjMzOTk5OTIyOTc1LCAtNzMuODg1OTY1MDAwNzY1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lN2E1YWE2OTVkZDA0NTNiYTVjN2I3YjQyMGNhNjc2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0ZTQ3N2RjMmU3NTRmYTY4YmI5ODFhMWY2ZTk1ZjVhID0gJCgnPGRpdiBpZD0iaHRtbF9hNGU0NzdkYzJlNzU0ZmE2OGJiOTgxYTFmNmU5NWY1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODg5Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lN2E1YWE2OTVkZDA0NTNiYTVjN2I3YjQyMGNhNjc2MS5zZXRDb250ZW50KGh0bWxfYTRlNDc3ZGMyZTc1NGZhNjhiYjk4MWExZjZlOTVmNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iNTFiOWM5NDczZmU0YWI5YWFjNDA5MWUzNGJiOWQ0Mi5iaW5kUG9wdXAocG9wdXBfZTdhNWFhNjk1ZGQwNDUzYmE1YzdiN2I0MjBjYTY3NjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2E4OWIyN2I3ZDc2ZjQ0OTFhOTM4YzI5MzI4NGNjOTk1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzNzMwOTk5OTY5ODcsIC03My44ODUwMzcwMDA3NTM3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDY0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MzA2M2Y2ZDY0OWU0YTdmYWFlMzEyNjgwMmEzMTQ1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgwOWY3YzAwOGQwYjQ5MzU4N2M0ZTJlZWIxZjA5NjhlID0gJCgnPGRpdiBpZD0iaHRtbF84MDlmN2MwMDhkMGI0OTM1ODdjNGUyZWViMWYwOTY4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODg5Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzA2M2Y2ZDY0OWU0YTdmYWFlMzEyNjgwMmEzMTQ1ZC5zZXRDb250ZW50KGh0bWxfODA5ZjdjMDA4ZDBiNDkzNTg3YzRlMmVlYjFmMDk2OGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hODliMjdiN2Q3NmY0NDkxYTkzOGMyOTMyODRjYzk5NS5iaW5kUG9wdXAocG9wdXBfNTMwNjNmNmQ2NDllNGE3ZmFhZTMxMjY4MDJhMzE0NWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ZiMDA5YTA0MTEwMTQyNjJiOWZlN2FlNDJhMjlmNjk3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzODI4OTk5ODY1MzYsIC03My44ODQxMDYwMDA1MDk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMzBjNGNlNjlkYjc0NGI4YmQzODY2ZjJkNjA5ZWIwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmY2YxZjI2YTY5MTQxZDg4ZmFlYzdhYjM3MjRkMGUwID0gJCgnPGRpdiBpZD0iaHRtbF8xZmNmMWYyNmE2OTE0MWQ4OGZhZWM3YWIzNzI0ZDBlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg4OTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDMwYzRjZTY5ZGI3NDRiOGJkMzg2NmYyZDYwOWViMDAuc2V0Q29udGVudChodG1sXzFmY2YxZjI2YTY5MTQxZDg4ZmFlYzdhYjM3MjRkMGUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZmIwMDlhMDQxMTAxNDI2MmI5ZmU3YWU0MmEyOWY2OTcuYmluZFBvcHVwKHBvcHVwXzAzMGM0Y2U2OWRiNzQ0YjhiZDM4NjZmMmQ2MDllYjAwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kYzBjNzNlMTU5ZWE0YWRiYWEwMTdkMTQ1NjFjNTUwMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MzkyNTk5OTg0NTg5LCAtNzMuODgzMTc3MDAyNDcwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDAxNzU3ZjVmZWRjNDA0YmFhODdjZmY2ZjAyNjA0NGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NGViZTQ0NWY2NzE0OTZiODJkOGY0M2Q2NDg1YTdhMSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTRlYmU0NDVmNjcxNDk2YjgyZDhmNDNkNjQ4NWE3YTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4ODk5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwMTc1N2Y1ZmVkYzQwNGJhYTg3Y2ZmNmYwMjYwNDRiLnNldENvbnRlbnQoaHRtbF85NGViZTQ0NWY2NzE0OTZiODJkOGY0M2Q2NDg1YTdhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2RjMGM3M2UxNTllYTRhZGJhYTAxN2QxNDU2MWM1NTAyLmJpbmRQb3B1cChwb3B1cF8wMDE3NTdmNWZlZGM0MDRiYWE4N2NmZjZmMDI2MDQ0YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMGExZjU2NmQ5MzlmNDU1OGIzNTY4OWIzYjQ3YjMyMjggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQwMjM5OTk4MDU0NTUsIC03My44ODIyNDYwMDAzNDc5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMjY4NjYxY2FjOGY0ZTBhYWVkMzkwYTYwYzIyMTU5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyNWQ1YWJiOWVlNTQ3ZDQ4MDFjYzg4NjUxMjZmY2Y1ID0gJCgnPGRpdiBpZD0iaHRtbF9iMjVkNWFiYjllZTU0N2Q0ODAxY2M4ODY1MTI2ZmNmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5MDAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjI2ODY2MWNhYzhmNGUwYWFlZDM5MGE2MGMyMjE1OTguc2V0Q29udGVudChodG1sX2IyNWQ1YWJiOWVlNTQ3ZDQ4MDFjYzg4NjUxMjZmY2Y1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMGExZjU2NmQ5MzlmNDU1OGIzNTY4OWIzYjQ3YjMyMjguYmluZFBvcHVwKHBvcHVwXzIyNjg2NjFjYWM4ZjRlMGFhZWQzOTBhNjBjMjIxNTk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iN2NiYzAxODJjMDE0NzA3YmI3MTY3ODM5NWFjNTg2OSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDEyMjk5OTg0MTgyLCAtNzMuODgxMzE1MDAwOTA5NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2FiNWZiZjdlYWRkNDg5ZGEzNzI2MTA2YzIyMTZlYjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzA2NDk1YzMzMGM0YTljOTA4ZjNjOGVjMDQzNjgwZiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2MwNjQ5NWMzMzBjNGE5YzkwOGYzYzhlYzA0MzY4MGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTAxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhYjVmYmY3ZWFkZDQ4OWRhMzcyNjEwNmMyMjE2ZWIyLnNldENvbnRlbnQoaHRtbF9jYzA2NDk1YzMzMGM0YTljOTA4ZjNjOGVjMDQzNjgwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2I3Y2JjMDE4MmMwMTQ3MDdiYjcxNjc4Mzk1YWM1ODY5LmJpbmRQb3B1cChwb3B1cF83YWI1ZmJmN2VhZGQ0ODlkYTM3MjYxMDZjMjIxNmViMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjAxYmJlOTViYjBhNDM5YTk5ZjdlNjljMDQ5NmI5MzcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQyMTk5OTk5Nzg2LCAtNzMuODgwMzg4MDAxNDg3MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTkxYzZhNzI2NWMxNGMxZDhiZmEyOTI0M2RhZmNhNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jY2I4YWRkMDdjMzk0OGUzYWZiZGNjNjA3NWE1NWVhZCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2NiOGFkZDA3YzM5NDhlM2FmYmRjYzYwNzVhNTVlYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTAyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5MWM2YTcyNjVjMTRjMWQ4YmZhMjkyNDNkYWZjYTU5LnNldENvbnRlbnQoaHRtbF9jY2I4YWRkMDdjMzk0OGUzYWZiZGNjNjA3NWE1NWVhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IwMWJiZTk1YmIwYTQzOWE5OWY3ZTY5YzA0OTZiOTM3LmJpbmRQb3B1cChwb3B1cF9lOTFjNmE3MjY1YzE0YzFkOGJmYTI5MjQzZGFmY2E1OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjZmZTRiOWNiYTRhNDQwZjgxYzI0Y2NkYjE2Zjg4ZjggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQzMTc5OTk5NjI0NzQsIC03My44Nzk0NTYwMDIxMzc1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOWY5MGE3ODcwNWE0NGU0YmVmY2NhZWI2YzhmMWI3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExYWMxYWFhZTRlODQyODE4NWYyYjZiZGY3MzBkMDAyID0gJCgnPGRpdiBpZD0iaHRtbF9hMWFjMWFhYWU0ZTg0MjgxODVmMmI2YmRmNzMwZDAwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5MDMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTlmOTBhNzg3MDVhNDRlNGJlZmNjYWViNmM4ZjFiNzguc2V0Q29udGVudChodG1sX2ExYWMxYWFhZTRlODQyODE4NWYyYjZiZGY3MzBkMDAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjZmZTRiOWNiYTRhNDQwZjgxYzI0Y2NkYjE2Zjg4ZjguYmluZFBvcHVwKHBvcHVwX2U5ZjkwYTc4NzA1YTQ0ZTRiZWZjY2FlYjZjOGYxYjc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jNmFhYTk2M2ExZTA0YzlkYTFhYTE2YzJlZWNmMTgyNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDQxNDk5OTk2MTY5LCAtNzMuODc4NTI5MDAwODc2ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1OC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTdkZDkxNjE2ZjdlNDg4NTk5NjY1OGU3OTBhMThhYmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTFkOTA4N2ZhNDE0YTFkYmQzNmNkNTQ0MGYzMzg3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzkxZDkwODdmYTQxNGExZGJkMzZjZDU0NDBmMzM4NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTA0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3ZGQ5MTYxNmY3ZTQ4ODU5OTY2NThlNzkwYTE4YWJkLnNldENvbnRlbnQoaHRtbF9jOTFkOTA4N2ZhNDE0YTFkYmQzNmNkNTQ0MGYzMzg3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2M2YWFhOTYzYTFlMDRjOWRhMWFhMTZjMmVlY2YxODI1LmJpbmRQb3B1cChwb3B1cF9lN2RkOTE2MTZmN2U0ODg1OTk2NjU4ZTc5MGExOGFiZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDY5NTM0NDNhYjRmNGI3ZGJkYzM1NjRkYTA5MzM1ZDIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ1MTI5OTk5NzAxLCAtNzMuODc3NTk4MDAzMDYxMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTliZTUyNGNiYzQ1NDlmOThiZjY0M2RmZThlMmFmY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTBjODVlNzdmOTM0MjJlYWViYjUxYjgxMDdlOTllZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjEwYzg1ZTc3ZjkzNDIyZWFlYmI1MWI4MTA3ZTk5ZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTA1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5YmU1MjRjYmM0NTQ5Zjk4YmY2NDNkZmU4ZTJhZmNhLnNldENvbnRlbnQoaHRtbF9mMTBjODVlNzdmOTM0MjJlYWViYjUxYjgxMDdlOTllZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q2OTUzNDQzYWI0ZjRiN2RiZGMzNTY0ZGEwOTMzNWQyLmJpbmRQb3B1cChwb3B1cF8xOWJlNTI0Y2JjNDU0OWY5OGJmNjQzZGZlOGUyYWZjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNWZlMGNjNzg1NGY0NDcwMzg3YmVkMTIwZjRiMjBjYjMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ2MDk5OTk5MjIyNjYsIC03My44NzY2NjgwMDA1NDE5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmI0MGRjZDlmMmE0NzA0YjVkMTBhZDIxM2JmZTcwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyMmJlODcyMmE5ODQzNDM4NjdhZDgxYjFmZDk1NGI4ID0gJCgnPGRpdiBpZD0iaHRtbF9kMjJiZTg3MjJhOTg0MzQzODY3YWQ4MWIxZmQ5NTRiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5MDYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJiNDBkY2Q5ZjJhNDcwNGI1ZDEwYWQyMTNiZmU3MDguc2V0Q29udGVudChodG1sX2QyMmJlODcyMmE5ODQzNDM4NjdhZDgxYjFmZDk1NGI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNWZlMGNjNzg1NGY0NDcwMzg3YmVkMTIwZjRiMjBjYjMuYmluZFBvcHVwKHBvcHVwXzZiYjQwZGNkOWYyYTQ3MDRiNWQxMGFkMjEzYmZlNzA4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xYmVjNWMyYzBhYjM0Yzk3YjhhMTQ3Yjg5NWUyYzJmMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDcwODk5OTg2MjA5LCAtNzMuODc1NzM5MDAyMjA2MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2NC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWJhOGI0NTA1M2NjNDBkMmJhYmMzYjQwZjUzN2ExZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mN2MzYzMxZTM1ZDU0MzA1ODM4ZmNiZGU4MGE2MmNiNyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjdjM2MzMWUzNWQ1NDMwNTgzOGZjYmRlODBhNjJjYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTA3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiYThiNDUwNTNjYzQwZDJiYWJjM2I0MGY1MzdhMWYyLnNldENvbnRlbnQoaHRtbF9mN2MzYzMxZTM1ZDU0MzA1ODM4ZmNiZGU4MGE2MmNiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzFiZWM1YzJjMGFiMzRjOTdiOGExNDdiODk1ZTJjMmYyLmJpbmRQb3B1cChwb3B1cF8xYmE4YjQ1MDUzY2M0MGQyYmFiYzNiNDBmNTM3YTFmMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTVmMDhjNzg4Mzk5NDNiYTljOTZhYmM0YWYzYjZlNzQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ4MDU5OTk5MDY3OSwgLTczLjg3NDgwOTAwMTQzNDE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1YmE3M2FlMDkwNjQ4Njc5ZDhlYjBkMzZmN2ZhMDI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTE5NTc3ZjkxYWVlNGM5YWEzOWI1N2Q0MzlhMGUwOGYgPSAkKCc8ZGl2IGlkPSJodG1sX2UxOTU3N2Y5MWFlZTRjOWFhMzliNTdkNDM5YTBlMDhmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4OTA4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1YmE3M2FlMDkwNjQ4Njc5ZDhlYjBkMzZmN2ZhMDI3LnNldENvbnRlbnQoaHRtbF9lMTk1NzdmOTFhZWU0YzlhYTM5YjU3ZDQzOWEwZTA4Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzk1ZjA4Yzc4ODM5OTQzYmE5Yzk2YWJjNGFmM2I2ZTc0LmJpbmRQb3B1cChwb3B1cF82NWJhNzNhZTA5MDY0ODY3OWQ4ZWIwZDM2ZjdmYTAyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDY2MjQ5OTI1OTFmNDBmYmE2NzgzMmEwYzk3MmQzZDcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ5MDM5OTk3NzAzOCwgLTczLjg3Mzg3OTAwMzI2NTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyM2Y1OTc1MDYzYjQ3ZDlhNzFlZDAwNzJkYTEzOTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDdlOTZiZGVhMDNmNDA2YTg4ZGExZmYyYThmMzdhYjAgPSAkKCc8ZGl2IGlkPSJodG1sXzQ3ZTk2YmRlYTAzZjQwNmE4OGRhMWZmMmE4ZjM3YWIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4OTA5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyM2Y1OTc1MDYzYjQ3ZDlhNzFlZDAwNzJkYTEzOTYwLnNldENvbnRlbnQoaHRtbF80N2U5NmJkZWEwM2Y0MDZhODhkYTFmZjJhOGYzN2FiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzA2NjI0OTkyNTkxZjQwZmJhNjc4MzJhMGM5NzJkM2Q3LmJpbmRQb3B1cChwb3B1cF8wMjNmNTk3NTA2M2I0N2Q5YTcxZWQwMDcyZGExMzk2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDk4NmJiODNlODEzNGU4MDllZWExZTkwYzRhNTBlYzIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUxMTM5OTk5OTEyOSwgLTczLjg3MTg4NjAwMDAxNDY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyNzBlNTdhMDA5YTQyZDBhZjMwOThiMDQ5ZTJhMTE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjg1ZTgxYTg0Mjk0NGY2Y2EzY2UxYjhkZGQ4MTNmYjUgPSAkKCc8ZGl2IGlkPSJodG1sX2Y4NWU4MWE4NDI5NDRmNmNhM2NlMWI4ZGRkODEzZmI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41ODkxMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MjcwZTU3YTAwOWE0MmQwYWYzMDk4YjA0OWUyYTExNC5zZXRDb250ZW50KGh0bWxfZjg1ZTgxYTg0Mjk0NGY2Y2EzY2UxYjhkZGQ4MTNmYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80OTg2YmI4M2U4MTM0ZTgwOWVlYTFlOTBjNGE1MGVjMi5iaW5kUG9wdXAocG9wdXBfODI3MGU1N2EwMDlhNDJkMGFmMzA5OGIwNDllMmExMTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2RhYjE1ZDgyOWRkMDRjZWFiMWU4NDY0Yjg1YmMzZDEwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU1MjA3OTk5OTg0Mzg1LCAtNzMuODcwOTk1MDAxMDAxNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWJlY2ZhOWMyMjI5NDNlYTg0Y2JhNWExYTUxOWYxNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMGE2Njk2NDVjMDA0ZDEzODNlMWE3Y2Y0YzNiZjYyOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjBhNjY5NjQ1YzAwNGQxMzgzZTFhN2NmNGMzYmY2MjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTExLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliZWNmYTljMjIyOTQzZWE4NGNiYTVhMWE1MTlmMTViLnNldENvbnRlbnQoaHRtbF8yMGE2Njk2NDVjMDA0ZDEzODNlMWE3Y2Y0YzNiZjYyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2RhYjE1ZDgyOWRkMDRjZWFiMWU4NDY0Yjg1YmMzZDEwLmJpbmRQb3B1cChwb3B1cF85YmVjZmE5YzIyMjk0M2VhODRjYmE1YTFhNTE5ZjE1YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTUyODFkNGUzYmUwNGY3Zjk1ODM4ODFmNmMxNjUxYjEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUwMjk5OTk4NzYyNiwgLTczLjg3MjY5MjAwMDQ2ODE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTQxODlhM2NjODY0OTI2OWFkMTE0YmQ1ZTUxZDM0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjZGNmMTE2MGU0YzRkMmNhNjJjYzgyNDc1MjRiZDUzID0gJCgnPGRpdiBpZD0iaHRtbF8xY2RjZjExNjBlNGM0ZDJjYTYyY2M4MjQ3NTI0YmQ1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5MjkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzU0MTg5YTNjYzg2NDkyNjlhZDExNGJkNWU1MWQzNDYuc2V0Q29udGVudChodG1sXzFjZGNmMTE2MGU0YzRkMmNhNjJjYzgyNDc1MjRiZDUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTUyODFkNGUzYmUwNGY3Zjk1ODM4ODFmNmMxNjUxYjEuYmluZFBvcHVwKHBvcHVwXzM1NDE4OWEzY2M4NjQ5MjY5YWQxMTRiZDVlNTFkMzQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83MThiNDEwNGJiNDc0YzYwODE2ZTA1MjA3ZjZiNDQ4NyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MjM2NDk5OTkzMTMxLCAtNzMuODk3Njk5MDAzMzc2NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDY0OTM4NWEyZjBlNDE3MTkyNGJiZTM4YzdkMGU0NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NmU1MDliZmFlNDM0YjAwOTBjNTFhZGU4ODc4ZGJhMCA9ICQoJzxkaXYgaWQ9Imh0bWxfODZlNTA5YmZhZTQzNGIwMDkwYzUxYWRlODg3OGRiYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTMwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2NDkzODVhMmYwZTQxNzE5MjRiYmUzOGM3ZDBlNDRhLnNldENvbnRlbnQoaHRtbF84NmU1MDliZmFlNDM0YjAwOTBjNTFhZGU4ODc4ZGJhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzcxOGI0MTA0YmI0NzRjNjA4MTZlMDUyMDdmNmI0NDg3LmJpbmRQb3B1cChwb3B1cF80NjQ5Mzg1YTJmMGU0MTcxOTI0YmJlMzhjN2QwZTQ0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGI3YmVmNTViZDJlNGM0MWEwYTY3YzcxYWIyOGYzNTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM5NjA5OTk4ODEyNDQsIC03My44NzE2ODUwMDIzNjIzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjlhYmNkMDMyNzA0NGZlODRhODk5YjRkNmU2NjgwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0NjkyMjE5NTYyMTRiNzBiYjhlNjY4MzA1OGQ1Mjk0ID0gJCgnPGRpdiBpZD0iaHRtbF9kNDY5MjIxOTU2MjE0YjcwYmI4ZTY2ODMwNThkNTI5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5NzQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGI5YWJjZDAzMjcwNDRmZTg0YTg5OWI0ZDZlNjY4MDcuc2V0Q29udGVudChodG1sX2Q0NjkyMjE5NTYyMTRiNzBiYjhlNjY4MzA1OGQ1Mjk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGI3YmVmNTViZDJlNGM0MWEwYTY3YzcxYWIyOGYzNTkuYmluZFBvcHVwKHBvcHVwX2RiOWFiY2QwMzI3MDQ0ZmU4NGE4OTliNGQ2ZTY2ODA3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hZDljZDRmZWNmMmU0MDc3YWJhNWY5ODAwZWNlM2M5YSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mzg2MTk5OTg0MDg2LCAtNzMuODcyMDcwMDAyNjQ0NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjBhMzA4NGMwYTM1NDU5YjkxMTczNThkMWFiMjE4NjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZWQxMmE5MWM3N2U0MjE4YThhYjQ3OWQ1NjdkMDAxYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZmVkMTJhOTFjNzdlNDIxOGE4YWI0NzlkNTY3ZDAwMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTc1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwYTMwODRjMGEzNTQ1OWI5MTE3MzU4ZDFhYjIxODY0LnNldENvbnRlbnQoaHRtbF9mZWQxMmE5MWM3N2U0MjE4YThhYjQ3OWQ1NjdkMDAxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FkOWNkNGZlY2YyZTQwNzdhYmE1Zjk4MDBlY2UzYzlhLmJpbmRQb3B1cChwb3B1cF9iMGEzMDg0YzBhMzU0NTliOTExNzM1OGQxYWIyMTg2NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDA4ZjVhN2VkYzdmNGI5NThjYWFmZjhmYTNjMmJhOTAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM2NzE5OTk5NTQ2NTUsIC03My44NzM2NTUwMDM2MDY0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDM0MTQ2NDRmOTE0ZjRmOTcwY2FkMGQ5MzhmM2Q1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4Y2M1MDYxYWM3MTQyZWZhYzMwZjMwMGQ3MmVkNzlkID0gJCgnPGRpdiBpZD0iaHRtbF9kOGNjNTA2MWFjNzE0MmVmYWMzMGYzMDBkNzJlZDc5ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTg5ODMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQzNDE0NjQ0ZjkxNGY0Zjk3MGNhZDBkOTM4ZjNkNTAuc2V0Q29udGVudChodG1sX2Q4Y2M1MDYxYWM3MTQyZWZhYzMwZjMwMGQ3MmVkNzlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNDA4ZjVhN2VkYzdmNGI5NThjYWFmZjhmYTNjMmJhOTAuYmluZFBvcHVwKHBvcHVwX2VkMzQxNDY0NGY5MTRmNGY5NzBjYWQwZDkzOGYzZDUwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80NDhlNjQzNDZjYTM0NmM5YjY5YTBlZjU5YTk3M2Y4MyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mzk4NTk5OTk4NTMwNCwgLTczLjg3MjE0MjAwMjYwNzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTlmZGY0ZThjZjJjNGFjYThkZGZjOTU0YjY4ZTU1ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZWEwZTY1MDBlYWE0ZjViYTRmOTEyMzAwNDExZDEzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWVhMGU2NTAwZWFhNGY1YmE0ZjkxMjMwMDQxMWQxMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU4OTg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5ZmRmNGU4Y2YyYzRhY2E4ZGRmYzk1NGI2OGU1NWQ2LnNldENvbnRlbnQoaHRtbF9lZWEwZTY1MDBlYWE0ZjViYTRmOTEyMzAwNDExZDEzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQ0OGU2NDM0NmNhMzQ2YzliNjlhMGVmNTlhOTczZjgzLmJpbmRQb3B1cChwb3B1cF9lOWZkZjRlOGNmMmM0YWNhOGRkZmM5NTRiNjhlNTVkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODliYTFmNWJmZTFiNDIzZThiOWE3NTY5M2QzMDAwY2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTAzMTkwMDAwMDE0NCwgLTczLjg5ODY1OTAwMzU0MzM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0ZDBkMjdlOWE2MDQ5M2E5ZjQxZTI1YmU3YWMzMmI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzQxNWViNjI5ZTkwNDBkY2EwOTNhYmQwNDc3NzJhZmEgPSAkKCc8ZGl2IGlkPSJodG1sX2M0MTVlYjYyOWU5MDQwZGNhMDkzYWJkMDQ3NzcyYWZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA1Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNGQwZDI3ZTlhNjA0OTNhOWY0MWUyNWJlN2FjMzJiOS5zZXRDb250ZW50KGh0bWxfYzQxNWViNjI5ZTkwNDBkY2EwOTNhYmQwNDc3NzJhZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84OWJhMWY1YmZlMWI0MjNlOGI5YTc1NjkzZDMwMDBjYi5iaW5kUG9wdXAocG9wdXBfYjRkMGQyN2U5YTYwNDkzYTlmNDFlMjViZTdhYzMyYjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2EwYTg1MDZjZTA3YjRiZmY5NzI4NzgyZmM1ODlkNDQ5ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNDE2OTk5OTE1MjI0LCAtNzMuODk3NzI4MDAyNjI4MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0My4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGE0NDQ0ODM2MzYzNDUzMzhhMzBiOWY0YmIwN2MxYmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjYwZTMyM2E2YmI0M2FlYmQ4NzA2M2M4NGY3NTk3NSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTY2MGUzMjNhNmJiNDNhZWJkODcwNjNjODRmNzU5NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDUzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhNDQ0NDgzNjM2MzQ1MzM4YTMwYjlmNGJiMDdjMWJlLnNldENvbnRlbnQoaHRtbF9hNjYwZTMyM2E2YmI0M2FlYmQ4NzA2M2M4NGY3NTk3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2EwYTg1MDZjZTA3YjRiZmY5NzI4NzgyZmM1ODlkNDQ5LmJpbmRQb3B1cChwb3B1cF8wYTQ0NDQ4MzYzNjM0NTMzOGEzMGI5ZjRiYjA3YzFiZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjBhN2E5ZWYxYjIzNDM4Yjk0ZDFkYmIzNDAwMDRlY2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA1NDE5OTk4MjE4MDYsIC03My44OTY1NDAwMDA4MDAxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZjcxYWNkYzMzY2Q0MDkwYTdmYjk0NTU5NTRlMDk4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlZjM5YmFhMjU0ODRjNjk4ZDQ3YWIyNzJjNzg2NWRjID0gJCgnPGRpdiBpZD0iaHRtbF9lZWYzOWJhYTI1NDg0YzY5OGQ0N2FiMjcyYzc4NjVkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNTQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Y3MWFjZGMzM2NkNDA5MGE3ZmI5NDU1OTU0ZTA5OGYuc2V0Q29udGVudChodG1sX2VlZjM5YmFhMjU0ODRjNjk4ZDQ3YWIyNzJjNzg2NWRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjBhN2E5ZWYxYjIzNDM4Yjk0ZDFkYmIzNDAwMDRlY2IuYmluZFBvcHVwKHBvcHVwXzdmNzFhY2RjMzNjZDQwOTBhN2ZiOTQ1NTk1NGUwOThmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zYTM0MWRjMGYxMmU0NzljYTc4NDhjZWRjZDRiMDJjMSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDYxOTk5OTk1NTg0NSwgLTczLjg5NTc5OTAwMjE2MjMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxMjhmODQ3ZGE3NTRiNjJhY2MyOTBjY2RkNzMxNDc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzIwZmZjOWUyOGEzNGU2NTg1ZTNiYmJlN2Y5YjZkMTEgPSAkKCc8ZGl2IGlkPSJodG1sXzMyMGZmYzllMjhhMzRlNjU4NWUzYmJiZTdmOWI2ZDExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA1NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTI4Zjg0N2RhNzU0YjYyYWNjMjkwY2NkZDczMTQ3OC5zZXRDb250ZW50KGh0bWxfMzIwZmZjOWUyOGEzNGU2NTg1ZTNiYmJlN2Y5YjZkMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zYTM0MWRjMGYxMmU0NzljYTc4NDhjZWRjZDRiMDJjMS5iaW5kUG9wdXAocG9wdXBfYjEyOGY4NDdkYTc1NGI2MmFjYzI5MGNjZGQ3MzE0NzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I5ZTc2Zjk4OWM0MjQ5MzA4ODhkNmQ3NDEwOTU0YTc4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNzE2OTk5OTE5MjIsIC03My44OTQ4OTkwMDEwMTUxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZmE3MzI4MjNhNmM0MTFhYThlNzY5NTg5NTM2M2FhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNlMGY2MjI1ODVlNjQ3OTRiOTYzNjJiNGVkNTYzOGU1ID0gJCgnPGRpdiBpZD0iaHRtbF8zZTBmNjIyNTg1ZTY0Nzk0Yjk2MzYyYjRlZDU2MzhlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGZhNzMyODIzYTZjNDExYWE4ZTc2OTU4OTUzNjNhYTYuc2V0Q29udGVudChodG1sXzNlMGY2MjI1ODVlNjQ3OTRiOTYzNjJiNGVkNTYzOGU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjllNzZmOTg5YzQyNDkzMDg4OGQ2ZDc0MTA5NTRhNzguYmluZFBvcHVwKHBvcHVwXzBmYTczMjgyM2E2YzQxMWFhOGU3Njk1ODk1MzYzYWE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80NDMyZTY0ZTk2MTY0YjAwYTI2NjMzMDUzYjlkZDg1MSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDgxMDk5OTk0MzY4LCAtNzMuODkzOTc2MDAwNTQzMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZiZGI3NGI2NGRiNGU1ZWI5YjA0OWRiYWYzMThkNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MjQ2MDZhZGM2Njc0NWU3ODkxMTM3NDgzZGEzMjg5MiA9ICQoJzxkaXYgaWQ9Imh0bWxfODI0NjA2YWRjNjY3NDVlNzg5MTEzNzQ4M2RhMzI4OTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWZiZGI3NGI2NGRiNGU1ZWI5YjA0OWRiYWYzMThkNDYuc2V0Q29udGVudChodG1sXzgyNDYwNmFkYzY2NzQ1ZTc4OTExMzc0ODNkYTMyODkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNDQzMmU2NGU5NjE2NGIwMGEyNjYzMzA1M2I5ZGQ4NTEuYmluZFBvcHVwKHBvcHVwX2FmYmRiNzRiNjRkYjRlNWViOWIwNDlkYmFmMzE4ZDQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mNjExNTJiOWZlNGE0MmFkOWMzZDgzNmE2MjcwMzg4MCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDkwNzk5OTc0NTA5LCAtNzMuODkzMDQ4MDAxMTAwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNThmM2M0MDZjZDAzNDZlY2JjZGUyOGU5ODM2OTQ0MGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjQ5MDRiOGZlMzk0NDllYjA4NTY2YmY5YjlkYWFkZCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTI0OTA0YjhmZTM5NDQ5ZWIwODU2NmJmOWI5ZGFhZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNTguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNThmM2M0MDZjZDAzNDZlY2JjZGUyOGU5ODM2OTQ0MGYuc2V0Q29udGVudChodG1sXzUyNDkwNGI4ZmUzOTQ0OWViMDg1NjZiZjliOWRhYWRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZjYxMTUyYjlmZTRhNDJhZDljM2Q4MzZhNjI3MDM4ODAuYmluZFBvcHVwKHBvcHVwXzU4ZjNjNDA2Y2QwMzQ2ZWNiY2RlMjhlOTgzNjk0NDBmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zY2M2YjgzZjZhMTk0NWQwOThkY2UwMDUyNTY1ZDEzOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTAwMzk5OTk1NjIsIC03My44OTIxMjEwMDAzMTQ2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjNjYjkzZTBlMjI0NjhjYTRkMTk5ZDM2YzI4NzAxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViNzM0ZTk3NmJjZDRlOWFiZWM4Njc3NWFkMDQxY2YxID0gJCgnPGRpdiBpZD0iaHRtbF81YjczNGU5NzZiY2Q0ZTlhYmVjODY3NzVhZDA0MWNmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTA1OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjNjYjkzZTBlMjI0NjhjYTRkMTk5ZDM2YzI4NzAxZS5zZXRDb250ZW50KGh0bWxfNWI3MzRlOTc2YmNkNGU5YWJlYzg2Nzc1YWQwNDFjZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zY2M2YjgzZjZhMTk0NWQwOThkY2UwMDUyNTY1ZDEzOC5iaW5kUG9wdXAocG9wdXBfYjIzY2I5M2UwZTIyNDY4Y2E0ZDE5OWQzNmMyODcwMWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y4NjdjZTRlYjljODRjZjhiYzFlNWUxODFjMjYwM2I4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUxMTAwOTk5OTc0NTc1LCAtNzMuODkxMTg5MDAwMDQ5NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmUwMGZkNzAwMDFmNGI4Mzk3ODQwYmE3ZTcyOWZjN2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOWZkZmE5MjA2NGM0NDgwOTNjZTJmYTU1ODQyNjAxZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDlmZGZhOTIwNjRjNDQ4MDkzY2UyZmE1NTg0MjYwMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmUwMGZkNzAwMDFmNGI4Mzk3ODQwYmE3ZTcyOWZjN2Yuc2V0Q29udGVudChodG1sXzA5ZmRmYTkyMDY0YzQ0ODA5M2NlMmZhNTU4NDI2MDFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZjg2N2NlNGViOWM4NGNmOGJjMWU1ZTE4MWMyNjAzYjguYmluZFBvcHVwKHBvcHVwX2ZlMDBmZDcwMDAxZjRiODM5Nzg0MGJhN2U3MjlmYzdmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yZGQ5NTI1ZGQ2YWM0MTc2YjhiYTJlNDdhZDhlZmI3OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTE5OTk5OTc4OTI3LCAtNzMuODkwMjYyMDAzMzcwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMTQwNzAzNDAwYzI0MjlhODVkMzZmNzUwOTc3M2M4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlNzk1NjZmNzc0YjRhNzU4NmZlN2E1Y2RjNmJlMTFiID0gJCgnPGRpdiBpZD0iaHRtbF80ZTc5NTY2Zjc3NGI0YTc1ODZmZTdhNWNkYzZiZTExYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNjEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE0MDcwMzQwMGMyNDI5YTg1ZDM2Zjc1MDk3NzNjOGYuc2V0Q29udGVudChodG1sXzRlNzk1NjZmNzc0YjRhNzU4NmZlN2E1Y2RjNmJlMTFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmRkOTUyNWRkNmFjNDE3NmI4YmEyZTQ3YWQ4ZWZiNzguYmluZFBvcHVwKHBvcHVwX2MxNDA3MDM0MDBjMjQyOWE4NWQzNmY3NTA5NzczYzhmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV81OWI1ODU3ODc1YTM0NzYzYTUyNDRiYzg3NWIwYjliMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTI5Njk5OTg2MjU5NiwgLTczLjg4OTMzMjAwMDc1NTUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzZjg0MGE1YjU5NzRiMTI4YmVhZmUyYTk5M2ZjMzgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzAwM2UxOWQ2Zjg0NDU5YWFjZWQ3ODdhMTljOTAwOWMgPSAkKCc8ZGl2IGlkPSJodG1sXzMwMDNlMTlkNmY4NDQ1OWFhY2VkNzg3YTE5YzkwMDljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA2Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zM2Y4NDBhNWI1OTc0YjEyOGJlYWZlMmE5OTNmYzM4Mi5zZXRDb250ZW50KGh0bWxfMzAwM2UxOWQ2Zjg0NDU5YWFjZWQ3ODdhMTljOTAwOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81OWI1ODU3ODc1YTM0NzYzYTUyNDRiYzg3NWIwYjliMy5iaW5kUG9wdXAocG9wdXBfMzNmODQwYTViNTk3NGIxMjhiZWFmZTJhOTkzZmMzODIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFhNTA1ZTJlMmZjNjQzYTU4ZTViOGY1Y2NkNWRjYWRkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUxMzk1OTk5Nzk3NTQsIC03My44ODg0MDEwMDMxMzgzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NzdmZDQ0MTRlZjI0MmY1OTdmYmVkNDA2M2Q2NmQ1NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5ZDk2ZTM5ZGUxMjRlZTNiNDkyYjEzYWZhMDBlN2ZhID0gJCgnPGRpdiBpZD0iaHRtbF84OWQ5NmUzOWRlMTI0ZWUzYjQ5MmIxM2FmYTAwZTdmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNjMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTc3ZmQ0NDE0ZWYyNDJmNTk3ZmJlZDQwNjNkNjZkNTQuc2V0Q29udGVudChodG1sXzg5ZDk2ZTM5ZGUxMjRlZTNiNDkyYjEzYWZhMDBlN2ZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMWE1MDVlMmUyZmM2NDNhNThlNWI4ZjVjY2Q1ZGNhZGQuYmluZFBvcHVwKHBvcHVwXzk3N2ZkNDQxNGVmMjQyZjU5N2ZiZWQ0MDYzZDY2ZDU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hZTZkYTgxMzBjYWQ0MDAyYmNmNGQ2YTk3ZWRhZjM3YyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTQ5NDk5OTg5MTU3LCAtNzMuODg3NDcwMDAyNzQxMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyNS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjI2ZjVkZjIzOGFiNGFjZDk5ZTA0ZTNmNjM3ODRkNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MTY3ZjM4MDY1MjY0MDM1OWI5ZmQxMzZiOGVjMWI2ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTE2N2YzODA2NTI2NDAzNTliOWZkMTM2YjhlYzFiNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjI2ZjVkZjIzOGFiNGFjZDk5ZTA0ZTNmNjM3ODRkNGEuc2V0Q29udGVudChodG1sXzUxNjdmMzgwNjUyNjQwMzU5YjlmZDEzNmI4ZWMxYjZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWU2ZGE4MTMwY2FkNDAwMmJjZjRkNmE5N2VkYWYzN2MuYmluZFBvcHVwKHBvcHVwXzYyNmY1ZGYyMzhhYjRhY2Q5OWUwNGUzZjYzNzg0ZDRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zODVlZGExNGIxNjY0OGM0OGFhMjQ0N2RjN2M4YTIwMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTU5MTk5OTg3MTA0LCAtNzMuODg2NTQzMDAyMDE3NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDUxOTk2NTY5YjVhNDJhODkwNzYyNjY4M2JkNTlhMGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMmQ5MzJmNDM2NzI0ZDE5YjE3YWYxZTJkODkzNzM5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTJkOTMyZjQzNjcyNGQxOWIxN2FmMWUyZDg5MzczOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDUxOTk2NTY5YjVhNDJhODkwNzYyNjY4M2JkNTlhMGYuc2V0Q29udGVudChodG1sXzEyZDkzMmY0MzY3MjRkMTliMTdhZjFlMmQ4OTM3MzllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzg1ZWRhMTRiMTY2NDhjNDhhYTI0NDdkYzdjOGEyMDMuYmluZFBvcHVwKHBvcHVwXzA1MTk5NjU2OWI1YTQyYTg5MDc2MjY2ODNiZDU5YTBmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iOTU5NTBlZTI3ZWY0ZWFiOWNkOWFkMzY0ZWYyZDJiNiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTY4OTk5OTc1NDU2LCAtNzMuODg1NjEzMDAxMTg0MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdlNjU3Nzk3MjNiNGQ3MWFmM2FmZTk4ZGE1YTM1M2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81M2E5NWU5ZTZmNjg0YzkyYTRhMjZmMmY0YzMwNDRjOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTNhOTVlOWU2ZjY4NGM5MmE0YTI2ZjJmNGMzMDQ0YzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzdlNjU3Nzk3MjNiNGQ3MWFmM2FmZTk4ZGE1YTM1M2Yuc2V0Q29udGVudChodG1sXzUzYTk1ZTllNmY2ODRjOTJhNGEyNmYyZjRjMzA0NGM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjk1OTUwZWUyN2VmNGVhYjljZDlhZDM2NGVmMmQyYjYuYmluZFBvcHVwKHBvcHVwX2M3ZTY1Nzc5NzIzYjRkNzFhZjNhZmU5OGRhNWEzNTNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84ZjFhZTJlNTc1OTE0MTFlYmUwMGU5YzVjNjk3ZTQ1ZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTc4Nzk5OTk5NDM4NCwgLTczLjg4NDY4NDAwMDk3NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDUxMWE0MGQ1OGIwNDBhZWI3YmRlZjY4NTI5YmE0MGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ODg4OTRhMzMyNTc0ZjBkYTcxOTY1Y2Q0M2FjODExZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTg4ODk0YTMzMjU3NGYwZGE3MTk2NWNkNDNhYzgxMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDUxMWE0MGQ1OGIwNDBhZWI3YmRlZjY4NTI5YmE0MGQuc2V0Q29udGVudChodG1sXzU4ODg5NGEzMzI1NzRmMGRhNzE5NjVjZDQzYWM4MTFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGYxYWUyZTU3NTkxNDExZWJlMDBlOWM1YzY5N2U0NWQuYmluZFBvcHVwKHBvcHVwX2Q1MTFhNDBkNThiMDQwYWViN2JkZWY2ODUyOWJhNDBkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85ZTY1YTI5NGFkMzk0MTM4YTNkMTBlMWIyZGE3YTUzMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTg4NDk5OTg2OTYzLCAtNzMuODgzNzUzMDAwMjMzMjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGM2OWJhZmU0M2M0NDg0Zjg0ZTgwZTJhM2I4NjdlNGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjFhYmNkMTM0ZDM0MTQxYjM0N2IwYWM1OGZkMGZkMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNWYxYWJjZDEzNGQzNDE0MWIzNDdiMGFjNThmZDBmZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGM2OWJhZmU0M2M0NDg0Zjg0ZTgwZTJhM2I4NjdlNGIuc2V0Q29udGVudChodG1sXzVmMWFiY2QxMzRkMzQxNDFiMzQ3YjBhYzU4ZmQwZmQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOWU2NWEyOTRhZDM5NDEzOGEzZDEwZTFiMmRhN2E1MzIuYmluZFBvcHVwKHBvcHVwXzRjNjliYWZlNDNjNDQ4NGY4NGU4MGUyYTNiODY3ZTRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yMzBiNjc2NDc4OTg0NDllOTYxYWQ4Y2ZkNTA0MDljOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTk4MTk5OTgyNjgzLCAtNzMuODgyODIzMDAwMTQzNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTUwM2U3N2NmMmE0NDZkNjg4MTExOTgwMjM2NjZiMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzE3MzhjMjYyNjA0YTUxOTg2MjBlOWY5OTIyMDhkMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDcxNzM4YzI2MjYwNGE1MTk4NjIwZTlmOTkyMjA4ZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNjkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTUwM2U3N2NmMmE0NDZkNjg4MTExOTgwMjM2NjZiMzYuc2V0Q29udGVudChodG1sXzQ3MTczOGMyNjI2MDRhNTE5ODYyMGU5Zjk5MjIwOGQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjMwYjY3NjQ3ODk4NDQ5ZTk2MWFkOGNmZDUwNDA5YzkuYmluZFBvcHVwKHBvcHVwX2E1MDNlNzdjZjJhNDQ2ZDY4ODExMTk4MDIzNjY2YjM2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xMDUzNTIxOWNhMTY0NDllODIwYmNhYjBmZmNiZDdiNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MjA4MDk5OTk4OTEzLCAtNzMuODgxODk0MDAwNzczNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGZiODIxNjE5Mzk5NGQ5ZTk3OWVkNWUzYzQ3YWQzMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYWU1OTQ1Y2FlOTI0MjdlYjJjMTAyNTE4ZTM3NGI5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWFlNTk0NWNhZTkyNDI3ZWIyYzEwMjUxOGUzNzRiOWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDcwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmYjgyMTYxOTM5OTRkOWU5NzllZDVlM2M0N2FkMzE4LnNldENvbnRlbnQoaHRtbF8xYWU1OTQ1Y2FlOTI0MjdlYjJjMTAyNTE4ZTM3NGI5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzEwNTM1MjE5Y2ExNjQ0OWU4MjBiY2FiMGZmY2JkN2I1LmJpbmRQb3B1cChwb3B1cF8wZmI4MjE2MTkzOTk0ZDllOTc5ZWQ1ZTNjNDdhZDMxOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMmMwMTdkMWY0NDFkNDI5ZmEzZDhiY2E2YTEzZThiZTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIxNzg5OTk3Mzg1OCwgLTczLjg4MDk2MzAwMDg3NTMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwNWIzMTViZjM3ODRmMzVhYzM3Njk4ZmI4ODUzZjNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWRiNzY3MmE3YzJiNGM4YWIxYmRiNTgxMWJiYzI3MGMgPSAkKCc8ZGl2IGlkPSJodG1sX2FkYjc2NzJhN2MyYjRjOGFiMWJkYjU4MTFiYmMyNzBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDcxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwNWIzMTViZjM3ODRmMzVhYzM3Njk4ZmI4ODUzZjNiLnNldENvbnRlbnQoaHRtbF9hZGI3NjcyYTdjMmI0YzhhYjFiZGI1ODExYmJjMjcwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzJjMDE3ZDFmNDQxZDQyOWZhM2Q4YmNhNmExM2U4YmU2LmJpbmRQb3B1cChwb3B1cF9jMDViMzE1YmYzNzg0ZjM1YWMzNzY5OGZiODg1M2YzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjI3NGFiZDVkZjk1NDgyMTkwZWFhZWNlMWQ0MmUwNWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIyODQ5OTk5MzMwNSwgLTczLjg4MDAzNDAwMTQwNzIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiZDIyODljNzc1NDRhY2I4Y2I0NTg3YjZiYTJmMzQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2UwZThhOWMzMmJmNDlmODhjOTRlMzdkZmI1ZWViMjYgPSAkKCc8ZGl2IGlkPSJodG1sX2NlMGU4YTljMzJiZjQ5Zjg4Yzk0ZTM3ZGZiNWVlYjI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDcyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiZDIyODljNzc1NDRhY2I4Y2I0NTg3YjZiYTJmMzQ3LnNldENvbnRlbnQoaHRtbF9jZTBlOGE5YzMyYmY0OWY4OGM5NGUzN2RmYjVlZWIyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzIyNzRhYmQ1ZGY5NTQ4MjE5MGVhYWVjZTFkNDJlMDVjLmJpbmRQb3B1cChwb3B1cF8yYmQyMjg5Yzc3NTQ0YWNiOGNiNDU4N2I2YmEyZjM0NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYWVhNGY5YWYwNzJlNDBmMWJlZGJkNjcyMjMwYmFmYzAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIzNzI5OTk3NTYxLCAtNzMuODc5MTA0MDAyOTg4OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjEyYTA0MGRlNjVmNDk5ZGI0ZWRmOWEyNDEwZTc1N2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NGQ3ODhmZmZkMDg0ZjIwODljMTEwZDI1NTVhYmY0NyA9ICQoJzxkaXYgaWQ9Imh0bWxfODRkNzg4ZmZmZDA4NGYyMDg5YzExMGQyNTU1YWJmNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDczLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxMmEwNDBkZTY1ZjQ5OWRiNGVkZjlhMjQxMGU3NTdiLnNldENvbnRlbnQoaHRtbF84NGQ3ODhmZmZkMDg0ZjIwODljMTEwZDI1NTVhYmY0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FlYTRmOWFmMDcyZTQwZjFiZWRiZDY3MjIzMGJhZmMwLmJpbmRQb3B1cChwb3B1cF8yMTJhMDQwZGU2NWY0OTlkYjRlZGY5YTI0MTBlNzU3YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODU3ZDQ5YTRlNTc1NDU1YjhhYTRhOTE4YWVhMmViZWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI0NzA5OTk5NzQzNiwgLTczLjg3ODE3NDAwMTg1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODg4NjY4MjYzM2UwNGJmMmJiNDMxNWVjOGVlZGVjNzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjcwMTNmMzIxODA0M2NhYTNlNzY1ZjJkMWE5M2I1OSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTY3MDEzZjMyMTgwNDNjYWEzZTc2NWYyZDFhOTNiNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDc0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4ODY2ODI2MzNlMDRiZjJiYjQzMTVlYzhlZWRlYzc3LnNldENvbnRlbnQoaHRtbF9lNjcwMTNmMzIxODA0M2NhYTNlNzY1ZjJkMWE5M2I1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzg1N2Q0OWE0ZTU3NTQ1NWI4YWE0YTkxOGFlYTJlYmVjLmJpbmRQb3B1cChwb3B1cF84ODg2NjgyNjMzZTA0YmYyYmI0MzE1ZWM4ZWVkZWM3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTQ0OWE2ZDE1YTk0NGVhMGEwNzY5MmNmODZhNDczMWYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI1Njc5OTk4MTUyMiwgLTczLjg3NzI0NzAwMjc1ODM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkMGQ3ZmU2YzQ2YzQ5Zjc4M2Q2OWUxMmMyZDI2ZmQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQyNzE3YWZkN2U5NDI2MjkwOGQyNGVlZmIwYzZhOTEgPSAkKCc8ZGl2IGlkPSJodG1sXzQ0MjcxN2FmZDdlOTQyNjI5MDhkMjRlZWZiMGM2YTkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA3NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDBkN2ZlNmM0NmM0OWY3ODNkNjllMTJjMmQyNmZkMC5zZXRDb250ZW50KGh0bWxfNDQyNzE3YWZkN2U5NDI2MjkwOGQyNGVlZmIwYzZhOTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85NDQ5YTZkMTVhOTQ0ZWEwYTA3NjkyY2Y4NmE0NzMxZi5iaW5kUG9wdXAocG9wdXBfNGQwZDdmZTZjNDZjNDlmNzgzZDY5ZTEyYzJkMjZmZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzkzY2NhNDA0M2Q1YjRhZGY5NWEzYzExZmEyNDQxNTY2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUyNjY1OTk5OTEyMDQsIC03My44NzYzMTUwMDAxOTg2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OGI0NDE3ZDQ1ZTc0NmIxOTVmN2FmODIyZmMyODA4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4ZTUwYjUzMTk0YjQzNzI5NDJhYzQ4YTU4N2E3NzAwID0gJCgnPGRpdiBpZD0iaHRtbF8xOGU1MGI1MzE5NGI0MzcyOTQyYWM0OGE1ODdhNzcwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkwNzYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODhiNDQxN2Q0NWU3NDZiMTk1ZjdhZjgyMmZjMjgwODAuc2V0Q29udGVudChodG1sXzE4ZTUwYjUzMTk0YjQzNzI5NDJhYzQ4YTU4N2E3NzAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTNjY2E0MDQzZDViNGFkZjk1YTNjMTFmYTI0NDE1NjYuYmluZFBvcHVwKHBvcHVwXzg4YjQ0MTdkNDVlNzQ2YjE5NWY3YWY4MjJmYzI4MDgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mODNhNjNjNGUyNjQ0NjI3YTJkOTk1YzA1ZmE1ZDAyZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mjc2Mjk5OTkyNjA5LCAtNzMuODc1Mzg2MDAzMzEwNTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjJkMzEwM2E3ZmMwNDhlOWI4NWNkZTYxM2M5OGE5MWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNGJiOTczNjM2OTE0ZDFiODFlMDE4MGYzYjEyNTFiNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjRiYjk3MzYzNjkxNGQxYjgxZTAxODBmM2IxMjUxYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDc3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyZDMxMDNhN2ZjMDQ4ZTliODVjZGU2MTNjOThhOTFhLnNldENvbnRlbnQoaHRtbF9iNGJiOTczNjM2OTE0ZDFiODFlMDE4MGYzYjEyNTFiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y4M2E2M2M0ZTI2NDQ2MjdhMmQ5OTVjMDVmYTVkMDJlLmJpbmRQb3B1cChwb3B1cF9iMmQzMTAzYTdmYzA0OGU5Yjg1Y2RlNjEzYzk4YTkxYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNWIyNTU5NjEyMzhkNDg2MmFiYmE1ZTQ0NzMyMzk3NjYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI4NTg5OTk5NTk2OCwgLTczLjg3NDQ1NTAwMjQxNjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0MjRmYTc3OTAxZjRlZDlhZmRlMTQzMTA5NGY4MjE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmY4MDk1NGFiMjdlNGEyZGI3NzJkNTRjMzY3NGU3MTYgPSAkKCc8ZGl2IGlkPSJodG1sX2JmODA5NTRhYjI3ZTRhMmRiNzcyZDU0YzM2NzRlNzE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDc4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0MjRmYTc3OTAxZjRlZDlhZmRlMTQzMTA5NGY4MjE4LnNldENvbnRlbnQoaHRtbF9iZjgwOTU0YWIyN2U0YTJkYjc3MmQ1NGMzNjc0ZTcxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzViMjU1OTYxMjM4ZDQ4NjJhYmJhNWU0NDczMjM5NzY2LmJpbmRQb3B1cChwb3B1cF8zNDI0ZmE3NzkwMWY0ZWQ5YWZkZTE0MzEwOTRmODIxOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMThjOWE5NjRjZmNmNDQ5ZjkzOWU2M2Q2ZWNlYjJjZmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI5NjE5OTk4MTY4OSwgLTczLjg3MzUyODAwMjcxMTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwMzRkYTEwZTJkMjRlMDdhYWJjMTJkZGVkYjc0YTNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOThlMmQ0NWU5Y2UyNGU3NzgxNTVhOTgxYjY4M2ZkNGMgPSAkKCc8ZGl2IGlkPSJodG1sXzk4ZTJkNDVlOWNlMjRlNzc4MTU1YTk4MWI2ODNmZDRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDc5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwMzRkYTEwZTJkMjRlMDdhYWJjMTJkZGVkYjc0YTNjLnNldENvbnRlbnQoaHRtbF85OGUyZDQ1ZTljZTI0ZTc3ODE1NWE5ODFiNjgzZmQ0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzE4YzlhOTY0Y2ZjZjQ0OWY5MzllNjNkNmVjZWIyY2ZmLmJpbmRQb3B1cChwb3B1cF8wMDM0ZGExMGUyZDI0ZTA3YWFiYzEyZGRlZGI3NGEzYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjE5MjUyYWE0M2ExNGRlMzlmN2JhNjlhOWE3YzExZWUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTMxNDE5OTk4Mjk4OCwgLTczLjg3MjYxNDAwMTY2MjQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5N2YwMWQ2YTRhZTQxYmY4ODdmZWUyNTc5OTI1OWIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTE5MjkyMjYzZjJhNGYyYWIxZmMzMWM1MjliNjIwYjUgPSAkKCc8ZGl2IGlkPSJodG1sXzUxOTI5MjI2M2YyYTRmMmFiMWZjMzFjNTI5YjYyMGI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA4MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOTdmMDFkNmE0YWU0MWJmODg3ZmVlMjU3OTkyNTliMS5zZXRDb250ZW50KGh0bWxfNTE5MjkyMjYzZjJhNGYyYWIxZmMzMWM1MjliNjIwYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mMTkyNTJhYTQzYTE0ZGUzOWY3YmE2OWE5YTdjMTFlZS5iaW5kUG9wdXAocG9wdXBfMzk3ZjAxZDZhNGFlNDFiZjg4N2ZlZTI1Nzk5MjU5YjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzdkOGZhMmEzYzEwNTQ4NWFiMjMxNGJiYzgxNDMwZTkyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUzNTYzOTk5ODIxNywgLTczLjg3MDY5NTAwMjUxNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q0MWZjZjk0ZjM1NDY1NjlkMmVhMDFkNGE2MDc0MjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOGEyMmYzZTgwMTk0MmFjOWQ0YTk0ZDg5ZTk3MDU2MiA9ICQoJzxkaXYgaWQ9Imh0bWxfMThhMjJmM2U4MDE5NDJhYzlkNGE5NGQ4OWU5NzA1NjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MDgxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkNDFmY2Y5NGYzNTQ2NTY5ZDJlYTAxZDRhNjA3NDI2LnNldENvbnRlbnQoaHRtbF8xOGEyMmYzZTgwMTk0MmFjOWQ0YTk0ZDg5ZTk3MDU2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdkOGZhMmEzYzEwNTQ4NWFiMjMxNGJiYzgxNDMwZTkyLmJpbmRQb3B1cChwb3B1cF83ZDQxZmNmOTRmMzU0NjU2OWQyZWEwMWQ0YTYwNzQyNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjJiMWYzYmQyMjNiNDM1ZTgxMGE0ODkyZmI0Y2VhYmMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTMzMjU5OTk5ODAzMDUsIC03My44NzE3OTIwMDA5MzUwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzcyZDY1Y2ExN2Y0NjllYmZkZmY1ODFmODEyMjc0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3MGFmOWE2ZWY0ZjRhNjBiMjI5MjczOTgxNjgwOTlmID0gJCgnPGRpdiBpZD0iaHRtbF82NzBhZjlhNmVmNGY0YTYwYjIyOTI3Mzk4MTY4MDk5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTA5MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NzcyZDY1Y2ExN2Y0NjllYmZkZmY1ODFmODEyMjc0MS5zZXRDb250ZW50KGh0bWxfNjcwYWY5YTZlZjRmNGE2MGIyMjkyNzM5ODE2ODA5OWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mMmIxZjNiZDIyM2I0MzVlODEwYTQ4OTJmYjRjZWFiYy5iaW5kUG9wdXAocG9wdXBfODc3MmQ2NWNhMTdmNDY5ZWJmZGZmNTgxZjgxMjI3NDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y5NDZmNmY0ZTQ0NzQ4OGZiMzhlNDAwZTYyN2E3MTg3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNDE3OTk5OTkxNjgsIC03My44OTcyODQwMDI4OTA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjNjA3NTNkYjI5MTRlMjI4MWUwZTQyMzg3MWQ4MDM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDFhZjVmZmNjMzlkNGQ1Yjg5MTlmYjQxNjdmNGVjNTMgPSAkKCc8ZGl2IGlkPSJodG1sXzAxYWY1ZmZjYzM5ZDRkNWI4OTE5ZmI0MTY3ZjRlYzUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTA5My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YzYwNzUzZGIyOTE0ZTIyODFlMGU0MjM4NzFkODAzOC5zZXRDb250ZW50KGh0bWxfMDFhZjVmZmNjMzlkNGQ1Yjg5MTlmYjQxNjdmNGVjNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mOTQ2ZjZmNGU0NDc0ODhmYjM4ZTQwMGU2MjdhNzE4Ny5iaW5kUG9wdXAocG9wdXBfN2M2MDc1M2RiMjkxNGUyMjgxZTBlNDIzODcxZDgwMzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2IxMzhlNDRlYzk5NzRiOGJiNGNmMTFjZTU2ZTcwNTA3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NDQ4OTk5NzgzNzQ1LCAtNzMuODk1NjMyMDAyMjMxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDZhZTMzNTdmYTk4NGI2Y2I5Yzc4NjQzZjM5ZTg5NTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZmJhZjM4MGZkMTg0NDZjOTkxMjE3YzBiMDQ5YmFlYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNWZiYWYzODBmZDE4NDQ2Yzk5MTIxN2MwYjA0OWJhZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5MTg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2YWUzMzU3ZmE5ODRiNmNiOWM3ODY0M2YzOWU4OTUyLnNldENvbnRlbnQoaHRtbF81ZmJhZjM4MGZkMTg0NDZjOTkxMjE3YzBiMDQ5YmFlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IxMzhlNDRlYzk5NzRiOGJiNGNmMTFjZTU2ZTcwNTA3LmJpbmRQb3B1cChwb3B1cF8wNmFlMzM1N2ZhOTg0YjZjYjljNzg2NDNmMzllODk1MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDc5MzUzNmVkODk5NDQzM2E3NWQxNGEzODhiY2U1Y2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk0MzE5OTk5NzM3MTYsIC03My44OTU4NzUwMDI3NTY1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MTM5NjI0NzcxNjQ0MDA0Yjk5MjU4ZDYyZmZkMGE0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxNmE2OTIxYThhNjQyNjZhOTlkZWFmZjM2OWRlZjA4ID0gJCgnPGRpdiBpZD0iaHRtbF9jMTZhNjkyMWE4YTY0MjY2YTk5ZGVhZmYzNjlkZWYwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTkxODUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDEzOTYyNDc3MTY0NDAwNGI5OTI1OGQ2MmZmZDBhNGMuc2V0Q29udGVudChodG1sX2MxNmE2OTIxYThhNjQyNjZhOTlkZWFmZjM2OWRlZjA4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMDc5MzUzNmVkODk5NDQzM2E3NWQxNGEzODhiY2U1Y2IuYmluZFBvcHVwKHBvcHVwXzQxMzk2MjQ3NzE2NDQwMDRiOTkyNThkNjJmZmQwYTRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hYWMwOGEyZTlkNzE0ZGFkYWMxZDg2YmJhMWU1OWMzMCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0OTUxNTk5OTczNDYyNiwgLTczLjg5NDY5MzAwMjM5MzY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0YWY1MmFkNzFiZDQ2MTBhNDgzZTg1NzQ0NGZmOTUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWU5MTUyMGY0OTk1NDM1MWJkMjQwZmFiYjA1YTVjZGUgPSAkKCc8ZGl2IGlkPSJodG1sXzVlOTE1MjBmNDk5NTQzNTFiZDI0MGZhYmIwNWE1Y2RlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTE4Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNGFmNTJhZDcxYmQ0NjEwYTQ4M2U4NTc0NDRmZjk1MS5zZXRDb250ZW50KGh0bWxfNWU5MTUyMGY0OTk1NDM1MWJkMjQwZmFiYjA1YTVjZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hYWMwOGEyZTlkNzE0ZGFkYWMxZDg2YmJhMWU1OWMzMC5iaW5kUG9wdXAocG9wdXBfZDRhZjUyYWQ3MWJkNDYxMGE0ODNlODU3NDQ0ZmY5NTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2FkMjEwNDNkNTI1YjQyZDhiYjk1MGE2ODkwNGQyZTUwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NDkzOTk5OTE3NzgsIC03My44OTc5MTcwMDI4NDUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyYTQ4YTc0MDY3NzQ2YjQ4NWVmNjVlZDJkMjQ0YTAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTczMDc2NjQ2OGE1NDczYmJmNjBmNTcwOGMwNGFhN2UgPSAkKCc8ZGl2IGlkPSJodG1sX2E3MzA3NjY0NjhhNTQ3M2JiZjYwZjU3MDhjMDRhYTdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ2MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMmE0OGE3NDA2Nzc0NmI0ODVlZjY1ZWQyZDI0NGEwMi5zZXRDb250ZW50KGh0bWxfYTczMDc2NjQ2OGE1NDczYmJmNjBmNTcwOGMwNGFhN2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hZDIxMDQzZDUyNWI0MmQ4YmI5NTBhNjg5MDRkMmU1MC5iaW5kUG9wdXAocG9wdXBfZDJhNDhhNzQwNjc3NDZiNDg1ZWY2NWVkMmQyNDRhMDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI2ODUxMDBkMjgzYTRlNzFhYjk2OTQxMWFmZWQ5NmMzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NDA4OTk5Nzk0NzIsIC03My44OTc2MzIwMDE3MjQ1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMmNlNzllNDcwODY0Y2ZlYjU4ZjBjNGEzNzViMGQ3NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2YjdiN2M2NDY1MTQ5NjVhMmNkYTE1OGUwZDM4NjE1ID0gJCgnPGRpdiBpZD0iaHRtbF82NmI3YjdjNjQ2NTE0OTY1YTJjZGExNThlMGQzODYxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0NjIuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDJjZTc5ZTQ3MDg2NGNmZWI1OGYwYzRhMzc1YjBkNzQuc2V0Q29udGVudChodG1sXzY2YjdiN2M2NDY1MTQ5NjVhMmNkYTE1OGUwZDM4NjE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjY4NTEwMGQyODNhNGU3MWFiOTY5NDExYWZlZDk2YzMuYmluZFBvcHVwKHBvcHVwXzAyY2U3OWU0NzA4NjRjZmViNThmMGM0YTM3NWIwZDc0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hMmNmOTdiYjJkNDg0NmZiODJkNmE0NDVkMGY2OWQ5YyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODQ0MTk5OTkzODgzLCAtNzMuODk2NzM2MDAxMjc3MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI0YzU3ODBkODFmNDYzNjkzNGJiYmMzZjQxMTZiZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjU5OWJjZWNmMzk0NjdkOTRmOWI1ZmIxOWIyNWMyOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWI1OTliY2VjZjM5NDY3ZDk0ZjliNWZiMTliMjVjMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDYzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiNGM1NzgwZDgxZjQ2MzY5MzRiYmJjM2Y0MTE2YmQ5LnNldENvbnRlbnQoaHRtbF81YjU5OWJjZWNmMzk0NjdkOTRmOWI1ZmIxOWIyNWMyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2EyY2Y5N2JiMmQ0ODQ2ZmI4MmQ2YTQ0NWQwZjY5ZDljLmJpbmRQb3B1cChwb3B1cF80YjRjNTc4MGQ4MWY0NjM2OTM0YmJiYzNmNDExNmJkOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTMyZWEzOGRhOWYyNGI1MmI2ZWI1ZjA2Mzc3OGMxZmIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg1OTI5OTk4MzgwNCwgLTczLjg5NTM1MTAwMDkzODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwZGFmOTkwZmZmMDQxMGQ4YWViOWY3NTI0NGU2ZjQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTIwMTBjZWUwOTQ4NDczODg2MGNjMzEwYTRhYzE5OWIgPSAkKCc8ZGl2IGlkPSJodG1sXzkyMDEwY2VlMDk0ODQ3Mzg4NjBjYzMxMGE0YWMxOTliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ2NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMGRhZjk5MGZmZjA0MTBkOGFlYjlmNzUyNDRlNmY0My5zZXRDb250ZW50KGh0bWxfOTIwMTBjZWUwOTQ4NDczODg2MGNjMzEwYTRhYzE5OWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81MzJlYTM4ZGE5ZjI0YjUyYjZlYjVmMDYzNzc4YzFmYi5iaW5kUG9wdXAocG9wdXBfZDBkYWY5OTBmZmYwNDEwZDhhZWI5Zjc1MjQ0ZTZmNDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzg5MGZiNjE2MjYyZDQwYmRhZTEwYTM2NmExYThmZWViID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4Njc5OTk5OTMwNDc0LCAtNzMuODk0NTQwMDAyODE5NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZhMTYzNmViODQ0NGY5Zjk0NjhiYzA3ZDkzMjYzZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Y2QzOTY4OWJiZTk0N2UyODgzNDNiMTVhZTgxZjkzNCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWNkMzk2ODliYmU5NDdlMjg4MzQzYjE1YWU4MWY5MzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDY1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmYTE2MzZlYjg0NDRmOWY5NDY4YmMwN2Q5MzI2M2YzLnNldENvbnRlbnQoaHRtbF85Y2QzOTY4OWJiZTk0N2UyODgzNDNiMTVhZTgxZjkzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzg5MGZiNjE2MjYyZDQwYmRhZTEwYTM2NmExYThmZWViLmJpbmRQb3B1cChwb3B1cF9kZmExNjM2ZWI4NDQ0ZjlmOTQ2OGJjMDdkOTMyNjNmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfY2IzMTA4MjE1YjgzNGIzZTk1YTBjYTI3ZWNlMzIwZjQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg3NzA5OTk5MDc5MjYsIC03My44OTM2MDcwMDE1NjYxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYmU1NTY2Y2IzZjg0ZmZmYTIwN2YxNzYwYzIyOTkyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjYWRhZDRmNTRjNzRlN2E4MDhlMDAwN2Y3YzMyNDI0ID0gJCgnPGRpdiBpZD0iaHRtbF9hY2FkYWQ0ZjU0Yzc0ZTdhODA4ZTAwMDdmN2MzMjQyNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0NjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2JlNTU2NmNiM2Y4NGZmZmEyMDdmMTc2MGMyMjk5MjMuc2V0Q29udGVudChodG1sX2FjYWRhZDRmNTRjNzRlN2E4MDhlMDAwN2Y3YzMyNDI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfY2IzMTA4MjE1YjgzNGIzZTk1YTBjYTI3ZWNlMzIwZjQuYmluZFBvcHVwKHBvcHVwXzNiZTU1NjZjYjNmODRmZmZhMjA3ZjE3NjBjMjI5OTIzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iMDNjNGZjYmNhOTQ0ZmYyYTkzZWRjYTRkZWNhOWEzOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODczMzk5OTgwNDA1LCAtNzMuODkzOTg1MDAxMjU3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODBjOGQ0NDdkODczNDUzYjk3NjlkZGMwNDI0N2JjOTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzg4MjU5MTQ2MWU0ZjUxYTFkMDFlNWEwOGZhOTJjNSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzM4ODI1OTE0NjFlNGY1MWExZDAxZTVhMDhmYTkyYzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwYzhkNDQ3ZDg3MzQ1M2I5NzY5ZGRjMDQyNDdiYzkyLnNldENvbnRlbnQoaHRtbF9jMzg4MjU5MTQ2MWU0ZjUxYTFkMDFlNWEwOGZhOTJjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IwM2M0ZmNiY2E5NDRmZjJhOTNlZGNhNGRlY2E5YTM5LmJpbmRQb3B1cChwb3B1cF84MGM4ZDQ0N2Q4NzM0NTNiOTc2OWRkYzA0MjQ3YmM5MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTBkNjg2N2EzZDQ5NGIxZjkwZTIzMGNjZjM3ZTgxYzUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg4NjI5OTk3NjQzNCwgLTczLjg5MjcwODAwMTA4MDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0Y2YwZGEyZWE0NjRjZjliYjQzMjE4MzFlNThiYzdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmRlMGUwNzAzM2M3NDJjNDg1ZDA4MzdjZTAwNDkwZmIgPSAkKCc8ZGl2IGlkPSJodG1sX2JkZTBlMDcwMzNjNzQyYzQ4NWQwODM3Y2UwMDQ5MGZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ2OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNGNmMGRhMmVhNDY0Y2Y5YmI0MzIxODMxZTU4YmM3ZC5zZXRDb250ZW50KGh0bWxfYmRlMGUwNzAzM2M3NDJjNDg1ZDA4MzdjZTAwNDkwZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85MGQ2ODY3YTNkNDk0YjFmOTBlMjMwY2NmMzdlODFjNS5iaW5kUG9wdXAocG9wdXBfMjRjZjBkYTJlYTQ2NGNmOWJiNDMyMTgzMWU1OGJjN2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzM3MTUxMzRhMTRmMTQwMjBhZmI0ZDE5MTFjNGE1YzIwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4OTY0OTk5NzQzMzgsIC03My44OTE3NDgwMDI0MTMxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMDBiZjM3MzdlNjE0YzAyOTNhMjYzMDAxNWE2YTk4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2N2NiMWQ0MzVlNDRkZDdhZGQ1Mjg4NjI0NzExYjA3ID0gJCgnPGRpdiBpZD0iaHRtbF8wNjdjYjFkNDM1ZTQ0ZGQ3YWRkNTI4ODYyNDcxMWIwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0NjkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTAwYmYzNzM3ZTYxNGMwMjkzYTI2MzAwMTVhNmE5OGYuc2V0Q29udGVudChodG1sXzA2N2NiMWQ0MzVlNDRkZDdhZGQ1Mjg4NjI0NzExYjA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMzcxNTEzNGExNGYxNDAyMGFmYjRkMTkxMWM0YTVjMjAuYmluZFBvcHVwKHBvcHVwX2EwMGJmMzczN2U2MTRjMDI5M2EyNjMwMDE1YTZhOThmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xNWZlOWRhMTFmMWI0ZWI0OWFmODA4ODJkMGU3NDU5MSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODk1OTk5OTc5NDQyLCAtNzMuODkxNzk5MDAzNTg2MDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTcyMTZmMjcxNzJiNDY1MGE2OTY3ZmU0NjI0MDE5NGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNTg4MDk2NmIxMTI0ZTEyYTZmM2ZjYzFmMzgxMGQ1MiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzU4ODA5NjZiMTEyNGUxMmE2ZjNmY2MxZjM4MTBkNTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDcwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3MjE2ZjI3MTcyYjQ2NTBhNjk2N2ZlNDYyNDAxOTRlLnNldENvbnRlbnQoaHRtbF9jNTg4MDk2NmIxMTI0ZTEyYTZmM2ZjYzFmMzgxMGQ1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzE1ZmU5ZGExMWYxYjRlYjQ5YWY4MDg4MmQwZTc0NTkxLmJpbmRQb3B1cChwb3B1cF9lNzIxNmYyNzE3MmI0NjUwYTY5NjdmZTQ2MjQwMTk0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYWVkMzQwNzc3ZWI4NDhhYWI3YzE2ZmMzNTFiNjQ4ZjcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkwNTY5OTk5ODAyNiwgLTczLjg5MDg2NTAwMzEyMzYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlNGI5N2NhY2Y5OTRkZjY5YmYzNmNjNTRlMjBiNTNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRlNDE0NjFmODY2NDBmZjk2MmZlOTgxNTJiMjllMTUgPSAkKCc8ZGl2IGlkPSJodG1sX2E0ZTQxNDYxZjg2NjQwZmY5NjJmZTk4MTUyYjI5ZTE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ3MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZTRiOTdjYWNmOTk0ZGY2OWJmMzZjYzU0ZTIwYjUzYS5zZXRDb250ZW50KGh0bWxfYTRlNDE0NjFmODY2NDBmZjk2MmZlOTgxNTJiMjllMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hZWQzNDA3NzdlYjg0OGFhYjdjMTZmYzM1MWI2NDhmNy5iaW5kUG9wdXAocG9wdXBfMmU0Yjk3Y2FjZjk5NGRmNjliZjM2Y2M1NGUyMGI1M2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNjNDVjZTRhYzYxYTQyZTFiOGUyNmI0M2NmZmEyOGZjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MDYwOTk5NzQ4ODE0LCAtNzMuODkwODI0MDAwNjgxNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDE3MGJhZjRlZjM3NDUwYjk1NGZmZjA1ZjFlZTU5ODAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MWUxOWNhZTMxZjU0ODJiODYwMWVjMDc3MWU5NTVhYyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTFlMTljYWUzMWY1NDgyYjg2MDFlYzA3NzFlOTU1YWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDcyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQxNzBiYWY0ZWYzNzQ1MGI5NTRmZmYwNWYxZWU1OTgwLnNldENvbnRlbnQoaHRtbF85MWUxOWNhZTMxZjU0ODJiODYwMWVjMDc3MWU5NTVhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzNjNDVjZTRhYzYxYTQyZTFiOGUyNmI0M2NmZmEyOGZjLmJpbmRQb3B1cChwb3B1cF80MTcwYmFmNGVmMzc0NTBiOTU0ZmZmMDVmMWVlNTk4MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZWVjNGFlMjZiZmFlNDBjN2I2ODZhNWY1MDdiZGEzZjMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkxNTM5OTk4NjI3OCwgLTczLjg4OTkzMjAwMzI2MzUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5YTk0NDdhM2NkODRjMjU4ZmQ4ZjBhODAzOWVlNGNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2NiMjVjZDFiMTNhNDQ4YThkZTg3ZmI0ZDI3OWI0MjUgPSAkKCc8ZGl2IGlkPSJodG1sX2NjYjI1Y2QxYjEzYTQ0OGE4ZGU4N2ZiNGQyNzliNDI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDczLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5YTk0NDdhM2NkODRjMjU4ZmQ4ZjBhODAzOWVlNGNlLnNldENvbnRlbnQoaHRtbF9jY2IyNWNkMWIxM2E0NDhhOGRlODdmYjRkMjc5YjQyNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2VlYzRhZTI2YmZhZTQwYzdiNjg2YTVmNTA3YmRhM2YzLmJpbmRQb3B1cChwb3B1cF9hOWE5NDQ3YTNjZDg0YzI1OGZkOGYwYTgwMzllZTRjZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjEwOGY2MzhjNDE1NDJlMjhkNzM3YzIyZGQ4YTBhMWEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkyNDQ5OTk3NzI5NCwgLTczLjg4OTAyMDAwMTMxODEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwN2FmMzkyYmQ4NzQyNDdhMTNhYTcyNTAzMjlhNGQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjkxMzcwYzEwNzlkNDJlYzkwNmI0YmY3ZTdkZDMzYWYgPSAkKCc8ZGl2IGlkPSJodG1sXzI5MTM3MGMxMDc5ZDQyZWM5MDZiNGJmN2U3ZGQzM2FmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwN2FmMzkyYmQ4NzQyNDdhMTNhYTcyNTAzMjlhNGQzLnNldENvbnRlbnQoaHRtbF8yOTEzNzBjMTA3OWQ0MmVjOTA2YjRiZjdlN2RkMzNhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2YxMDhmNjM4YzQxNTQyZTI4ZDczN2MyMmRkOGEwYTFhLmJpbmRQb3B1cChwb3B1cF80MDdhZjM5MmJkODc0MjQ3YTEzYWE3MjUwMzI5YTRkMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTkwNzM3NTA0N2MxNDNjNWEyNzE0YTY5MDVjZTdiYmUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkzNTU5OTk4NTczLCAtNzMuODg4MDI5MDAyNzk4MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmU0N2U3MjFiNWJmNDI5YWEwZDA0NTE2ZjMwYmJlNDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzQ5MTM0ZThjN2I0ZmRlYTFkNGI2OTJiMjA1YjVmNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjM0OTEzNGU4YzdiNGZkZWExZDRiNjkyYjIwNWI1ZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTk0NzUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmU0N2U3MjFiNWJmNDI5YWEwZDA0NTE2ZjMwYmJlNDcuc2V0Q29udGVudChodG1sX2YzNDkxMzRlOGM3YjRmZGVhMWQ0YjY5MmIyMDViNWY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTkwNzM3NTA0N2MxNDNjNWEyNzE0YTY5MDVjZTdiYmUuYmluZFBvcHVwKHBvcHVwX2ZlNDdlNzIxYjViZjQyOWFhMGQwNDUxNmYzMGJiZTQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV82YzUwYmVmYTJmN2Q0Y2JmODcyYTg5ZTM4Y2MyZjZmOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0OTQ1Mzk5OTc3OTM4NCwgLTczLjg4NzA5ODAwMzE3NDYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkODFiNThmNmY5ZjRmMDdiNjMwOTFjYzUxNWY1YTY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWQ3MjdiYmMzOGZjNGE5ZTk1NjFjNDA1NGFlMzgzYmYgPSAkKCc8ZGl2IGlkPSJodG1sXzlkNzI3YmJjMzhmYzRhOWU5NTYxYzQwNTRhZTM4M2JmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ3Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDgxYjU4ZjZmOWY0ZjA3YjYzMDkxY2M1MTVmNWE2Ni5zZXRDb250ZW50KGh0bWxfOWQ3MjdiYmMzOGZjNGE5ZTk1NjFjNDA1NGFlMzgzYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82YzUwYmVmYTJmN2Q0Y2JmODcyYTg5ZTM4Y2MyZjZmOS5iaW5kUG9wdXAocG9wdXBfOGQ4MWI1OGY2ZjlmNGYwN2I2MzA5MWNjNTE1ZjVhNjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2M4MzI5MzIxNWNmMzQxZTNhN2MxYTk4OWJhZmNkNGI2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NTUxOTk5NzUwMzcsIC03My44ODYxNjgwMDA1MzAyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDJlZjg4ZmUzMDg0Y2NmYWFjYjRjMGU1OGZkNDE0YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlNzc0Mjg1MGViMDQ5OGE5MzlhMTZhODA5YzcyYzkzID0gJCgnPGRpdiBpZD0iaHRtbF8xZTc3NDI4NTBlYjA0OThhOTM5YTE2YTgwOWM3MmM5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMDJlZjg4ZmUzMDg0Y2NmYWFjYjRjMGU1OGZkNDE0Yi5zZXRDb250ZW50KGh0bWxfMWU3NzQyODUwZWIwNDk4YTkzOWExNmE4MDljNzJjOTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jODMyOTMyMTVjZjM0MWUzYTdjMWE5ODliYWZjZDRiNi5iaW5kUG9wdXAocG9wdXBfZDAyZWY4OGZlMzA4NGNjZmFhY2I0YzBlNThmZDQxNGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzEzOGFiNTQwMzg5MTQ3YjJhZGU2MGRkNTA5MTRlMjQzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NjUwOTk5Nzg2ODYsIC03My44ODUyNDEwMDM0MzkyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDU1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzllZGFhMGE0MGY0YmFkYTU4Y2I1MjAzNDBkNjcwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVhYzdlYmQxMzRjZTQxYmE4NmY4YzdiYjEzZjVjZGRkID0gJCgnPGRpdiBpZD0iaHRtbF81YWM3ZWJkMTM0Y2U0MWJhODZmOGM3YmIxM2Y1Y2RkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzllZGFhMGE0MGY0YmFkYTU4Y2I1MjAzNDBkNjcwZi5zZXRDb250ZW50KGh0bWxfNWFjN2ViZDEzNGNlNDFiYTg2ZjhjN2JiMTNmNWNkZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xMzhhYjU0MDM4OTE0N2IyYWRlNjBkZDUwOTE0ZTI0My5iaW5kUG9wdXAocG9wdXBfMWM5ZWRhYTBhNDBmNGJhZGE1OGNiNTIwMzQwZDY3MGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzUwZjEwYzgzMzY3NTRkZmRiNjA5MjBmMDQ0YzcxYTc1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NzQ0OTk5OTQwMTUsIC03My44ODQzMTEwMDIyMzMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTlmNTJhNDhkMjE0N2YyOGI5NjIzZGFiZTAxOGEyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1NGFlOWE4OGM4MTRlOTdiNmI0OGFiYzM5MTcwY2I1ID0gJCgnPGRpdiBpZD0iaHRtbF84NTRhZTlhODhjODE0ZTk3YjZiNDhhYmMzOTE3MGNiNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTlmNTJhNDhkMjE0N2YyOGI5NjIzZGFiZTAxOGEyNC5zZXRDb250ZW50KGh0bWxfODU0YWU5YTg4YzgxNGU5N2I2YjQ4YWJjMzkxNzBjYjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81MGYxMGM4MzM2NzU0ZGZkYjYwOTIwZjA0NGM3MWE3NS5iaW5kUG9wdXAocG9wdXBfOTk5ZjUyYTQ4ZDIxNDdmMjhiOTYyM2RhYmUwMThhMjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNjODZlNWU2NjhhZTQzNTBhYjMyZGE5OTNiMTU5ZjMwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5ODQ0OTk5ODMzMTY1LCAtNzMuODgzMzgwMDAyNTg3NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzVlNTMwYmM4MThiNGQ3NTllYzRlNjgzYTI1Y2I3N2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNGJlMDQwNWE0YmM0OWEyYmQ2MGNhZDU5NjM1MWUzNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTRiZTA0MDVhNGJjNDlhMmJkNjBjYWQ1OTYzNTFlMzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDgwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1ZTUzMGJjODE4YjRkNzU5ZWM0ZTY4M2EyNWNiNzdhLnNldENvbnRlbnQoaHRtbF8xNGJlMDQwNWE0YmM0OWEyYmQ2MGNhZDU5NjM1MWUzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzNjODZlNWU2NjhhZTQzNTBhYjMyZGE5OTNiMTU5ZjMwLmJpbmRQb3B1cChwb3B1cF8zNWU1MzBiYzgxOGI0ZDc1OWVjNGU2ODNhMjVjYjc3YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNGRhNWU5OTIwZGRmNDNlNzkxMGIxM2RiMzAyYzcwODEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk5Mzk5OTk4OTQ0OSwgLTczLjg4MjQ1MTAwMTIxMjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1Mzc1NTM1YTRhMDQyOGU5NDE3YTU1ZWNjOWI0MWIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM3ZjcwYzJiY2IzNDc3Njg4OWZkZDliODY1Zjc2MWIgPSAkKCc8ZGl2IGlkPSJodG1sXzljN2Y3MGMyYmNiMzQ3NzY4ODlmZGQ5Yjg2NWY3NjFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ4MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NTM3NTUzNWE0YTA0MjhlOTQxN2E1NWVjYzliNDFiMS5zZXRDb250ZW50KGh0bWxfOWM3ZjcwYzJiY2IzNDc3Njg4OWZkZDliODY1Zjc2MWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80ZGE1ZTk5MjBkZGY0M2U3OTEwYjEzZGIzMDJjNzA4MS5iaW5kUG9wdXAocG9wdXBfODUzNzU1MzVhNGEwNDI4ZTk0MTdhNTVlY2M5YjQxYjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzQyNjM3NGE2ZmYwNjRkOTg5ZmJhMzhlNjJmMTIyYmFiID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwMDM4OTk5OTM5OTYsIC03My44ODE1MjAwMDE0MTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwYjE2Nzg5MGU2MDQ5ZmViYzA1YjkyNWE5MDQ3ZDI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWZmNTNlMGQ0OGIyNDdkZDg4YTEwM2RjYzRhODY0Y2QgPSAkKCc8ZGl2IGlkPSJodG1sXzlmZjUzZTBkNDhiMjQ3ZGQ4OGExMDNkY2M0YTg2NGNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ4Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MGIxNjc4OTBlNjA0OWZlYmMwNWI5MjVhOTA0N2QyOS5zZXRDb250ZW50KGh0bWxfOWZmNTNlMGQ0OGIyNDdkZDg4YTEwM2RjYzRhODY0Y2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80MjYzNzRhNmZmMDY0ZDk4OWZiYTM4ZTYyZjEyMmJhYi5iaW5kUG9wdXAocG9wdXBfODBiMTY3ODkwZTYwNDlmZWJjMDViOTI1YTkwNDdkMjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFiNmM0Y2NjZGVkYTQ2ODRiMjAyYjVkMzM3NTgyMTI3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwMTM3OTk5OTAyMDksIC03My44ODA1OTMwMDEzOTc0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MjYxY2ZjZmQ1NDE0MDhlOWFiNWNlNjUxZmEyM2UzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0NjRlNjIyMjYwMzRhYmViNDQ2MDM3NmY3YmUyZjNmID0gJCgnPGRpdiBpZD0iaHRtbF9hNDY0ZTYyMjI2MDM0YWJlYjQ0NjAzNzZmN2JlMmYzZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0ODMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDI2MWNmY2ZkNTQxNDA4ZTlhYjVjZTY1MWZhMjNlMzguc2V0Q29udGVudChodG1sX2E0NjRlNjIyMjYwMzRhYmViNDQ2MDM3NmY3YmUyZjNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMWI2YzRjY2NkZWRhNDY4NGIyMDJiNWQzMzc1ODIxMjcuYmluZFBvcHVwKHBvcHVwXzQyNjFjZmNmZDU0MTQwOGU5YWI1Y2U2NTFmYTIzZTM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mYTA4MDIwNWRiMzI0OTkwOTI2NDc2ZjNiN2QzOTQ2ZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDIzNjk5OTc1NjIzLCAtNzMuODc5NjYyMDAzMjU5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODBlMzU3ZmE2MmQ4NDMyZTg5MmE5MjVjNzAxNzY0ZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YmE3YTZmNGI0ZWI0MGJlOTM2ZmZhYmI5ZGFmY2FjOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNGJhN2E2ZjRiNGViNDBiZTkzNmZmYWJiOWRhZmNhYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwZTM1N2ZhNjJkODQzMmU4OTJhOTI1YzcwMTc2NGVlLnNldENvbnRlbnQoaHRtbF80YmE3YTZmNGI0ZWI0MGJlOTM2ZmZhYmI5ZGFmY2FjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2ZhMDgwMjA1ZGIzMjQ5OTA5MjY0NzZmM2I3ZDM5NDZlLmJpbmRQb3B1cChwb3B1cF84MGUzNTdmYTYyZDg0MzJlODkyYTkyNWM3MDE3NjRlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTAxY2MyNjMxNmRhNDhkNTgyNTQwNjEyZGMxZGE3ZTQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTAzMzM5OTk4OTkwMzQsIC03My44Nzg3MzIwMDIxMTQyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MmU0OTQ1MjIxYjc0NzNhOGVmYzBhMTM2ZWMyOTM2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlNDg3OWVjZGYwYzRkZDc4ZmU4ZmUwNjBlZTA2Mjk5ID0gJCgnPGRpdiBpZD0iaHRtbF81ZTQ4NzllY2RmMGM0ZGQ3OGZlOGZlMDYwZWUwNjI5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0ODUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDJlNDk0NTIyMWI3NDczYThlZmMwYTEzNmVjMjkzNjAuc2V0Q29udGVudChodG1sXzVlNDg3OWVjZGYwYzRkZDc4ZmU4ZmUwNjBlZTA2Mjk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTAxY2MyNjMxNmRhNDhkNTgyNTQwNjEyZGMxZGE3ZTQuYmluZFBvcHVwKHBvcHVwXzQyZTQ5NDUyMjFiNzQ3M2E4ZWZjMGExMzZlYzI5MzYwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83Zjc3MDUwM2E1YjQ0OTdlOGI5YmFkZjcxYTVhMjhlOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDQzMTk5OTg1NjgxNSwgLTczLjg3NzgwMjAwMDAyMjUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2MGQxZTBmNTE2NjQ1YzJiZGJmZmY2YjA4ODdjN2QzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2NmYWRkNTYxYTM1NDIwZGI0MDFhZjFjYTJlNTc5ZTAgPSAkKCc8ZGl2IGlkPSJodG1sXzNjZmFkZDU2MWEzNTQyMGRiNDAxYWYxY2EyZTU3OWUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ4Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjBkMWUwZjUxNjY0NWMyYmRiZmZmNmIwODg3YzdkMy5zZXRDb250ZW50KGh0bWxfM2NmYWRkNTYxYTM1NDIwZGI0MDFhZjFjYTJlNTc5ZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83Zjc3MDUwM2E1YjQ0OTdlOGI5YmFkZjcxYTVhMjhlOC5iaW5kUG9wdXAocG9wdXBfMzYwZDFlMGY1MTY2NDVjMmJkYmZmZjZiMDg4N2M3ZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzkzYzhiMmJiODMzNjQ4MzBiZWE2NDZhNDRhNWE5OTVhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNTI5OTk5ODgwNDg0LCAtNzMuODc2ODc2MDAxMzgyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZmZTkzOGQ5YTk4NDUzYWIyOTI2MjI3ZmM3MzU4YTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZmQ3MmU4YjZhNDQ0YzVmODlhMDE3YjllY2Y4ZjY2YiA9ICQoJzxkaXYgaWQ9Imh0bWxfM2ZkNzJlOGI2YTQ0NGM1Zjg5YTAxN2I5ZWNmOGY2NmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDg3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmZmU5MzhkOWE5ODQ1M2FiMjkyNjIyN2ZjNzM1OGExLnNldENvbnRlbnQoaHRtbF8zZmQ3MmU4YjZhNDQ0YzVmODlhMDE3YjllY2Y4ZjY2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzkzYzhiMmJiODMzNjQ4MzBiZWE2NDZhNDRhNWE5OTVhLmJpbmRQb3B1cChwb3B1cF9kZmZlOTM4ZDlhOTg0NTNhYjI5MjYyMjdmYzczNThhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNmU4ZmRlMWU2MTBkNGI4Yzg3MjdkMDViOTBmNTlkNTggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA2MjY5OTk3OTAyNCwgLTczLjg3NTk0NTAwMzEzMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWNjZWFkY2UyN2Y3NDIzZjgzNTEyZGVkNGUwYjBlYWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzYzYTc4N2NiY2Y0YmI0YWMyYjRhMzlmNjc4OTQ1NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzM2M2E3ODdjYmNmNGJiNGFjMmI0YTM5ZjY3ODk0NTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDg4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljY2VhZGNlMjdmNzQyM2Y4MzUxMmRlZDRlMGIwZWFjLnNldENvbnRlbnQoaHRtbF8zMzYzYTc4N2NiY2Y0YmI0YWMyYjRhMzlmNjc4OTQ1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzZlOGZkZTFlNjEwZDRiOGM4NzI3ZDA1YjkwZjU5ZDU4LmJpbmRQb3B1cChwb3B1cF85Y2NlYWRjZTI3Zjc0MjNmODM1MTJkZWQ0ZTBiMGVhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMGYxNWQ0YjBiOTBhNDA1ZTgwNGYzNDQ3NjJlYThjYmUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA3MjQ5OTk3NTY0MywgLTczLjg3NTAxNTAwMDAyNDc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhMWNmYmZjZjkxYTQxZGU4MWQ5NThkMTIzOTAwZGY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWEwYWViOTJmMjEyNGIwY2JhYzk4ZmVkNzc2OWM5MDYgPSAkKCc8ZGl2IGlkPSJodG1sX2FhMGFlYjkyZjIxMjRiMGNiYWM5OGZlZDc3NjljOTA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ4OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTFjZmJmY2Y5MWE0MWRlODFkOTU4ZDEyMzkwMGRmNS5zZXRDb250ZW50KGh0bWxfYWEwYWViOTJmMjEyNGIwY2JhYzk4ZmVkNzc2OWM5MDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wZjE1ZDRiMGI5MGE0MDVlODA0ZjM0NDc2MmVhOGNiZS5iaW5kUG9wdXAocG9wdXBfZGExY2ZiZmNmOTFhNDFkZTgxZDk1OGQxMjM5MDBkZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzlkZTViMjQ4OTlhYTQxZTE5YTEwNjJhZmE2NTM2MzJmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwODIyOTk5OTA1NTY2LCAtNzMuODc0MDg1MDAxMzg3MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDlkNTY4YTI2ZDA5NGRkOTg5YjQyNDZhZWM5NDA4NDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MmE5OTdlZTdhMmE0MDMzYTIwNmY2MTBhZDk1YTc0MyA9ICQoJzxkaXYgaWQ9Imh0bWxfODJhOTk3ZWU3YTJhNDAzM2EyMDZmNjEwYWQ5NWE3NDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NDkwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ5ZDU2OGEyNmQwOTRkZDk4OWI0MjQ2YWVjOTQwODQ3LnNldENvbnRlbnQoaHRtbF84MmE5OTdlZTdhMmE0MDMzYTIwNmY2MTBhZDk1YTc0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzlkZTViMjQ4OTlhYTQxZTE5YTEwNjJhZmE2NTM2MzJmLmJpbmRQb3B1cChwb3B1cF80OWQ1NjhhMjZkMDk0ZGQ5ODliNDI0NmFlYzk0MDg0NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMmMxODZmZGM5N2U1NGJjY2JiOTJmYTE5NmUzNjRiMTAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA5MTQ5OTk5NTEyMzUsIC03My44NzMxNjAwMDI5NjQzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MTYzNDY4NDY4YzM0YzhlOTM4YjBhYTIzNzJjOTk1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkMjdkM2NlYTUwMjQ1ZDlhYTkyYTM1ZGI2ZDkwNTE0ID0gJCgnPGRpdiBpZD0iaHRtbF8wZDI3ZDNjZWE1MDI0NWQ5YWE5MmEzNWRiNmQ5MDUxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk0OTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTE2MzQ2ODQ2OGMzNGM4ZTkzOGIwYWEyMzcyYzk5NTkuc2V0Q29udGVudChodG1sXzBkMjdkM2NlYTUwMjQ1ZDlhYTkyYTM1ZGI2ZDkwNTE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmMxODZmZGM5N2U1NGJjY2JiOTJmYTE5NmUzNjRiMTAuYmluZFBvcHVwKHBvcHVwXzkxNjM0Njg0NjhjMzRjOGU5MzhiMGFhMjM3MmM5OTU5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wNmQxNjQ3MzllYTg0YWFiYjczMTYxZTYyNWVmYmFiOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTA0NDk5OTkzNDA0NSwgLTczLjg3MjIxMDAwMDIxMzY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0ZGY2MWE2Y2NhNTRlNjhiYTZiYTI4ODcxYTI0MGM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTY3YTgyYjE4ODMyNGE3YzhhNjU3NDBkYTg4ZWVjMTYgPSAkKCc8ZGl2IGlkPSJodG1sX2U2N2E4MmIxODgzMjRhN2M4YTY1NzQwZGE4OGVlYzE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTQ5Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNGRmNjFhNmNjYTU0ZTY4YmE2YmEyODg3MWEyNDBjNS5zZXRDb250ZW50KGh0bWxfZTY3YTgyYjE4ODMyNGE3YzhhNjU3NDBkYTg4ZWVjMTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wNmQxNjQ3MzllYTg0YWFiYjczMTYxZTYyNWVmYmFiOC5iaW5kUG9wdXAocG9wdXBfYTRkZjYxYTZjY2E1NGU2OGJhNmJhMjg4NzFhMjQwYzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzg2MjM5NjM3YWU5NDRmYWQ4OWY3ODBlODM1OWM1Y2NlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUxMjYwOTk5NzgwMTY1LCAtNzMuODcxNjYzMDAwMzAzNDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWE5NDczYWU3MWQzNGFjMGI1OGJmNjVlNjg3MWY3ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZmE4NzM2N2UyMjQ0NGE1OGVjMDk2NTg4YjI4MTIzMyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2ZhODczNjdlMjI0NDRhNThlYzA5NjU4OGIyODEyMzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTE0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhOTQ3M2FlNzFkMzRhYzBiNThiZjY1ZTY4NzFmN2Q2LnNldENvbnRlbnQoaHRtbF9jZmE4NzM2N2UyMjQ0NGE1OGVjMDk2NTg4YjI4MTIzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzg2MjM5NjM3YWU5NDRmYWQ4OWY3ODBlODM1OWM1Y2NlLmJpbmRQb3B1cChwb3B1cF9lYTk0NzNhZTcxZDM0YWMwYjU4YmY2NWU2ODcxZjdkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZmQ3YTFjMmYxYzI3NGYxNDk5OWMzMzllYjJiMDg0NmMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg1NDY5OTk5OTAxMSwgLTczLjg5NTg0MDAwMjg0ODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODNmYTk1M2I2Y2JlNGI5ZGI4MDQzMDQ5OTZkOThjM2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzBlOGZmZGRmZTY0NGY4OTQ2Zjg2Y2VjZWQ2MWFhZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzMwZThmZmRkZmU2NDRmODk0NmY4NmNlY2VkNjFhYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTE1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzZmE5NTNiNmNiZTRiOWRiODA0MzA0OTk2ZDk4YzNiLnNldENvbnRlbnQoaHRtbF9jMzBlOGZmZGRmZTY0NGY4OTQ2Zjg2Y2VjZWQ2MWFhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2ZkN2ExYzJmMWMyNzRmMTQ5OTljMzM5ZWIyYjA4NDZjLmJpbmRQb3B1cChwb3B1cF84M2ZhOTUzYjZjYmU0YjlkYjgwNDMwNDk5NmQ5OGMzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMmEwZWJiZDA5MDA0NGYwZTgzOGNkMWRlZmZmOTE4ZDYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE0NDM5OTk5MzM1ODUsIC03My44NzA4OTIwMDI2MTQ4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lM2E4M2JkZGQ1Nzg0YzNlOTgxM2M4MDEyOTU1ZGQxZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmNDczNDhhOTlmZTQ4MWRiYWMwNGY4ZDM4ODI3YjAwID0gJCgnPGRpdiBpZD0iaHRtbF84ZjQ3MzQ4YTk5ZmU0ODFkYmFjMDRmOGQzODgyN2IwMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk1MTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNhODNiZGRkNTc4NGMzZTk4MTNjODAxMjk1NWRkMWQuc2V0Q29udGVudChodG1sXzhmNDczNDhhOTlmZTQ4MWRiYWMwNGY4ZDM4ODI3YjAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmEwZWJiZDA5MDA0NGYwZTgzOGNkMWRlZmZmOTE4ZDYuYmluZFBvcHVwKHBvcHVwX2UzYTgzYmRkZDU3ODRjM2U5ODEzYzgwMTI5NTVkZDFkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xMTdmMTZhMjgyNjY0MDkwOTAxMGI2ZGE4OWU4N2IzNCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODUyMjk5OTk0NzYzLCAtNzMuODk2MDU3MDAwMzAwMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzRlNDdkYzAwMTg5NGUwNWEzYzA3ZmY2ZjI2OWExYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YjNkMTcyZGExMDA0Yzg4OGYxNmNmZDg1ZWQyNDA3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfN2IzZDE3MmRhMTAwNGM4ODhmMTZjZmQ4NWVkMjQwNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTE5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0ZTQ3ZGMwMDE4OTRlMDVhM2MwN2ZmNmYyNjlhMWM0LnNldENvbnRlbnQoaHRtbF83YjNkMTcyZGExMDA0Yzg4OGYxNmNmZDg1ZWQyNDA3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzExN2YxNmEyODI2NjQwOTA5MDEwYjZkYTg5ZTg3YjM0LmJpbmRQb3B1cChwb3B1cF8zNGU0N2RjMDAxODk0ZTA1YTNjMDdmZjZmMjY5YTFjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNzljMjNhNTljNmNkNDY0MzkyY2Y0MmY0MzkzM2E5MTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg0OTY5OTk4MzEyOTYsIC03My44OTYzMDEwMDAyMzYxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZWJlOThkYzc4Mjk0Mzk4ODlmNmY5M2NkZmI3NTI2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmYjZiMDI1NDE5NDQxOWY5NDhhMWFhNDJiNTQyNDE0ID0gJCgnPGRpdiBpZD0iaHRtbF80ZmI2YjAyNTQxOTQ0MTlmOTQ4YTFhYTQyYjU0MjQxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk1MjAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGViZTk4ZGM3ODI5NDM5ODg5ZjZmOTNjZGZiNzUyNmIuc2V0Q29udGVudChodG1sXzRmYjZiMDI1NDE5NDQxOWY5NDhhMWFhNDJiNTQyNDE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNzljMjNhNTljNmNkNDY0MzkyY2Y0MmY0MzkzM2E5MTkuYmluZFBvcHVwKHBvcHVwXzhlYmU5OGRjNzgyOTQzOTg4OWY2ZjkzY2RmYjc1MjZiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jZjIyNWNjMTIxNTQ0NWFjYWFjNjJhNTAwMTdhOWU1MyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzEzNDk5OTc1ODYxLCAtNzMuODkyNDA5MDAyNTMwMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1NS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWNhMjUzMzdiMmZhNGI2NmI0Y2ZlNzU1Yjg2NzgxNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYjExOGVlNDRiZTY0Njg0YTQ0ZDRmZDc3ZTk2Njc1MyA9ICQoJzxkaXYgaWQ9Imh0bWxfZGIxMThlZTQ0YmU2NDY4NGE0NGQ0ZmQ3N2U5NjY3NTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjYTI1MzM3YjJmYTRiNjZiNGNmZTc1NWI4Njc4MTY4LnNldENvbnRlbnQoaHRtbF9kYjExOGVlNDRiZTY0Njg0YTQ0ZDRmZDc3ZTk2Njc1Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2NmMjI1Y2MxMjE1NDQ1YWNhYWM2MmE1MDAxN2E5ZTUzLmJpbmRQb3B1cChwb3B1cF81Y2EyNTMzN2IyZmE0YjY2YjRjZmU3NTViODY3ODE2OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNjUwMjY4ZjQyOGYxNDU1MTgyNmIwNzJiNjNkMDZmMDcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDcyMzc5OTk5Njg0MSwgLTczLjg5MTUwNTAwMjQ0Nzc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkZGZiMGNmMzU4NDQxNGNhODUwNzg2ZTRiMTA0ZGIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQ5NjdlZDI0MWY3NDRlODk1Yzg1NjE2OWIxZjU2Y2EgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0OTY3ZWQyNDFmNzQ0ZTg5NWM4NTYxNjliMWY1NmNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTUzMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZGRmYjBjZjM1ODQ0MTRjYTg1MDc4NmU0YjEwNGRiMS5zZXRDb250ZW50KGh0bWxfZjQ5NjdlZDI0MWY3NDRlODk1Yzg1NjE2OWIxZjU2Y2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82NTAyNjhmNDI4ZjE0NTUxODI2YjA3MmI2M2QwNmYwNy5iaW5kUG9wdXAocG9wdXBfMGRkZmIwY2YzNTg0NDE0Y2E4NTA3ODZlNGIxMDRkYjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzIzZDlhODgyMGM3YTQ5ZjdiN2Q4YWEyMzdkYzA3OGE2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MzQyOTk5OTAwODQsIC03My44OTA1NzYwMDAyMTc3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MzQ2NDhiYTgzMmQ0MGFmYTVhYzNmM2Q0ZGUzNTYwYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1NTNhMjM4N2Q0NjQxNTliZDEyMDI3ZjIzM2E1Y2ZhID0gJCgnPGRpdiBpZD0iaHRtbF85NTUzYTIzODdkNDY0MTU5YmQxMjAyN2YyMzNhNWNmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk1MzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzM0NjQ4YmE4MzJkNDBhZmE1YWMzZjNkNGRlMzU2MGMuc2V0Q29udGVudChodG1sXzk1NTNhMjM4N2Q0NjQxNTliZDEyMDI3ZjIzM2E1Y2ZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjNkOWE4ODIwYzdhNDlmN2I3ZDhhYTIzN2RjMDc4YTYuYmluZFBvcHVwKHBvcHVwXzczNDY0OGJhODMyZDQwYWZhNWFjM2YzZDRkZTM1NjBjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kZjBiNWUzMzI3NDQ0YTc2YjdlZGU5OTAxNzQ3NTA2OSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzQ0NTk5OTkxOTA5NCwgLTczLjg4OTY1MTAwMDc2NjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyNzdmNzIxZWM1ZTRmZGJiOTRlOTBhZTAzNDc5Nzg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQyNGRiZTNkNDk4NGFjZmFiNWNlNDdkMjNiYTJhOWMgPSAkKCc8ZGl2IGlkPSJodG1sXzQ0MjRkYmUzZDQ5ODRhY2ZhYjVjZTQ3ZDIzYmEyYTljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTUzMi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjc3ZjcyMWVjNWU0ZmRiYjk0ZTkwYWUwMzQ3OTc4OC5zZXRDb250ZW50KGh0bWxfNDQyNGRiZTNkNDk4NGFjZmFiNWNlNDdkMjNiYTJhOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kZjBiNWUzMzI3NDQ0YTc2YjdlZGU5OTAxNzQ3NTA2OS5iaW5kUG9wdXAocG9wdXBfMTI3N2Y3MjFlYzVlNGZkYmI5NGU5MGFlMDM0Nzk3ODgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzlkMGE3YmYxZDgwMDQyYTc4MTYyOTYyMGZhMmM4MjRkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTQyOTk5NzgxNTQsIC03My44ODg3NTYwMDMxMDIxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81N2EwYzE2YjdmMTk0YWU3YjZkYWQxMGUxM2E5YWEyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmOGQ2M2Y1NjliOTRjNzc5NGIyZjJlZDM2NmRjZjU5ID0gJCgnPGRpdiBpZD0iaHRtbF9lZjhkNjNmNTY5Yjk0Yzc3OTRiMmYyZWQzNjZkY2Y1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk1MzMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTdhMGMxNmI3ZjE5NGFlN2I2ZGFkMTBlMTNhOWFhMjYuc2V0Q29udGVudChodG1sX2VmOGQ2M2Y1NjliOTRjNzc5NGIyZjJlZDM2NmRjZjU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOWQwYTdiZjFkODAwNDJhNzgxNjI5NjIwZmEyYzgyNGQuYmluZFBvcHVwKHBvcHVwXzU3YTBjMTZiN2YxOTRhZTdiNmRhZDEwZTEzYTlhYTI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV80NjhhZjZiNzUwODU0MjdhYjNkZDAzMDNlOTc3NmVmYSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzU2MDk5OTc3NDA5NSwgLTczLjg5ODMzNjAwMDc4NjczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyYTQzNzJjY2VlZTQzNWI4MDgxY2ExNmNiZTBmNjc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQxYmQ4MThlMjlhNDMzNWJmODVjZmM1ZTJjNmFkZDMgPSAkKCc8ZGl2IGlkPSJodG1sXzM0MWJkODE4ZTI5YTQzMzViZjg1Y2ZjNWUyYzZhZGQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTUzNy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMmE0MzcyY2NlZWU0MzViODA4MWNhMTZjYmUwZjY3OS5zZXRDb250ZW50KGh0bWxfMzQxYmQ4MThlMjlhNDMzNWJmODVjZmM1ZTJjNmFkZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV80NjhhZjZiNzUwODU0MjdhYjNkZDAzMDNlOTc3NmVmYS5iaW5kUG9wdXAocG9wdXBfZjJhNDM3MmNjZWVlNDM1YjgwODFjYTE2Y2JlMGY2NzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzc5ZDY0MDdiNzVmNDRiNTBhZjQ2ZDJkNzZmMWEyMzExID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTg5OTk5ODI5MDc0LCAtNzMuODk3NDgzMDAxODE2MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmY5N2VhMzVhZGM4NDMyNDlkMWQxNzJhZGYzOTFjNmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTE4ZGJiMjc1MzI0NDM3YTJkOWQxMWI3MWE1ZDUzMCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjExOGRiYjI3NTMyNDQzN2EyZDlkMTFiNzFhNWQ1MzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmOTdlYTM1YWRjODQzMjQ5ZDFkMTcyYWRmMzkxYzZiLnNldENvbnRlbnQoaHRtbF9mMTE4ZGJiMjc1MzI0NDM3YTJkOWQxMWI3MWE1ZDUzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzc5ZDY0MDdiNzVmNDRiNTBhZjQ2ZDJkNzZmMWEyMzExLmJpbmRQb3B1cChwb3B1cF9iZjk3ZWEzNWFkYzg0MzI0OWQxZDE3MmFkZjM5MWM2YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOWJjNTNmZjg1NTdlNDYxMmJkZGE0MDc1YWE4NTU0ZmEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc2MjI5OTk5ODQ0OCwgLTczLjg5NjU3NzAwMDg1MjE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwYmExOWI5NjAxNzQ5Nzk4NjUyNTUwNzc4MzA2Zjk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTM1MjE1MDM3NWY0NGQ1NWIyZTk3ODZjNzhiMWMyZjAgPSAkKCc8ZGl2IGlkPSJodG1sXzEzNTIxNTAzNzVmNDRkNTViMmU5Nzg2Yzc4YjFjMmYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41OTUzOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MGJhMTliOTYwMTc0OTc5ODY1MjU1MDc3ODMwNmY5Ny5zZXRDb250ZW50KGh0bWxfMTM1MjE1MDM3NWY0NGQ1NWIyZTk3ODZjNzhiMWMyZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85YmM1M2ZmODU1N2U0NjEyYmRkYTQwNzVhYTg1NTRmYS5iaW5kUG9wdXAocG9wdXBfNzBiYTE5Yjk2MDE3NDk3OTg2NTI1NTA3NzgzMDZmOTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Q3YTVjNDk3ZTFmNTRjNGI4ZDViZDk1MmUyNjc5ODMwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTc0OTk5ODI0MDc0LCAtNzMuODk1ODI5MDAyODQ3NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzc3NTA0MWY3YTFhNDQxOWJjMDNhYzg4MmRkZTllYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjM5OGJkNzBhOWU0NGI2YTIyZjBiZGNjY2NmOTAxMCA9ICQoJzxkaXYgaWQ9Imh0bWxfM2YzOThiZDcwYTllNDRiNmEyMmYwYmRjY2NjZjkwMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5NTQwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3NzUwNDFmN2ExYTQ0MTliYzAzYWM4ODJkZGU5ZWM0LnNldENvbnRlbnQoaHRtbF8zZjM5OGJkNzBhOWU0NGI2YTIyZjBiZGNjY2NmOTAxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q3YTVjNDk3ZTFmNTRjNGI4ZDViZDk1MmUyNjc5ODMwLmJpbmRQb3B1cChwb3B1cF8zNzc1MDQxZjdhMWE0NDE5YmMwM2FjODgyZGRlOWVjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjRiYzI1MDc1NmQyNDBjM2JiZmQxMzc4NWM0NTQzNzkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDcwMTQ5OTk5NjY0LCAtNzMuODk1NTMwMDAzMDk5ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjBmMTg0NTc2NWVkNDhmZWIxODA3ZDQ1YzE0ZDA3ZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MzFkMGNhZGMyOTY0YmJhODNkZTZhZDFiZGMyOWEzNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjMxZDBjYWRjMjk2NGJiYTgzZGU2YWQxYmRjMjlhMzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjU5Njg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwZjE4NDU3NjVlZDQ4ZmViMTgwN2Q0NWMxNGQwN2RiLnNldENvbnRlbnQoaHRtbF82MzFkMGNhZGMyOTY0YmJhODNkZTZhZDFiZGMyOWEzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y0YmMyNTA3NTZkMjQwYzNiYmZkMTM3ODVjNDU0Mzc5LmJpbmRQb3B1cChwb3B1cF8yMGYxODQ1NzY1ZWQ0OGZlYjE4MDdkNDVjMTRkMDdkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfN2QxODVjMmFhZWYzNDc3MWJkZTkyNzY5NzNkY2EwM2MgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc0ODA5OTk4MzI4OTUsIC03My44NzIwNjgwMDA0Mzc0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZGU3OGJhMTk5N2Q0OTJlYTgxNDkzYjkyODFmZjczNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1ZjBiZTQzMzM2YzQ4Y2FiNGI3NWRiYWE4MTliYjI4ID0gJCgnPGRpdiBpZD0iaHRtbF8wNWYwYmU0MzMzNmM0OGNhYjRiNzVkYmFhODE5YmIyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk5OTUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2RlNzhiYTE5OTdkNDkyZWE4MTQ5M2I5MjgxZmY3Mzcuc2V0Q29udGVudChodG1sXzA1ZjBiZTQzMzM2YzQ4Y2FiNGI3NWRiYWE4MTliYjI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfN2QxODVjMmFhZWYzNDc3MWJkZTkyNzY5NzNkY2EwM2MuYmluZFBvcHVwKHBvcHVwXzNkZTc4YmExOTk3ZDQ5MmVhODE0OTNiOTI4MWZmNzM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jODNjYWU0NmJjZmI0YWVkOTVlMDJjYmQ5ZjUwMzk5YiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzY1NDk5OTg5MDkzLCAtNzMuODcwNzA5MDAxNTAyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYmYxMTk3NWNjZGU0ZDA5OTllYTM2OWY4YWZjZGEwYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlNzJiNzhjNWNlNDQzMWFiMWE0Yzg2MzU2ODk4OGU2ID0gJCgnPGRpdiBpZD0iaHRtbF80ZTcyYjc4YzVjZTQ0MzFhYjFhNGM4NjM1Njg5ODhlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NTk5OTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2JmMTE5NzVjY2RlNGQwOTk5ZWEzNjlmOGFmY2RhMGEuc2V0Q29udGVudChodG1sXzRlNzJiNzhjNWNlNDQzMWFiMWE0Yzg2MzU2ODk4OGU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYzgzY2FlNDZiY2ZiNGFlZDk1ZTAyY2JkOWY1MDM5OWIuYmluZFBvcHVwKHBvcHVwXzNiZjExOTc1Y2NkZTRkMDk5OWVhMzY5ZjhhZmNkYTBhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8zZTNkNzQ4YTUxODg0Y2E0OWY4NDVlNTk4NmQzZjE3NCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODE1Njk5OTkyOTEyLCAtNzMuODcyMjIwMDAwODMzNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQ4YjI5NDQ0N2U1NGU5MTk3YWI1MjdlODNjYjk2NzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYmM5ZDFhNzBiMjY0NmNhYmM2ZjY0N2RmMjFmNTI4NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGJjOWQxYTcwYjI2NDZjYWJjNmY2NDdkZjIxZjUyODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjYwMDA4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkOGIyOTQ0NDdlNTRlOTE5N2FiNTI3ZTgzY2I5Njc3LnNldENvbnRlbnQoaHRtbF8wYmM5ZDFhNzBiMjY0NmNhYmM2ZjY0N2RmMjFmNTI4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzNlM2Q3NDhhNTE4ODRjYTQ5Zjg0NWU1OTg2ZDNmMTc0LmJpbmRQb3B1cChwb3B1cF9lZDhiMjk0NDQ3ZTU0ZTkxOTdhYjUyN2U4M2NiOTY3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZGM1ZDdhZTU0MDNhNGUwNDkzZjZjYWQxZWIxYjFlNzcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgzMDc5OTk5MDc0MDQsIC03My44NzEwMzAwMDI1ODQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTZlOTAwNGNlMDU0NjAyOWRlMzQ5YTIyYTliNzhmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxZmRiYjQwMjY4MTQ2NDJhODU0ZTMwZmE5NDhmODQ1ID0gJCgnPGRpdiBpZD0iaHRtbF9kMWZkYmI0MDI2ODE0NjQyYTg1NGUzMGZhOTQ4Zjg0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjAwMDkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjU2ZTkwMDRjZTA1NDYwMjlkZTM0OWEyMmE5Yjc4ZjIuc2V0Q29udGVudChodG1sX2QxZmRiYjQwMjY4MTQ2NDJhODU0ZTMwZmE5NDhmODQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZGM1ZDdhZTU0MDNhNGUwNDkzZjZjYWQxZWIxYjFlNzcuYmluZFBvcHVwKHBvcHVwX2I1NmU5MDA0Y2UwNTQ2MDI5ZGUzNDlhMjJhOWI3OGYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yZDcyZmE1ODYxYjQ0ZjY0OTFhMmI1NjA4NDAyM2ZjNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODE1NDk5OTg1NzIzLCAtNzMuODcwOTU5MDAxNzQ2NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzAzN2JmZTFjMzk4NGQ4ZTgxOThlYjJlOTQ0YTAyZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjM3MjBlNzEyMWM0YWE3OTI2YzgzNzJlNDExMDhlOCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTIzNzIwZTcxMjFjNGFhNzkyNmM4MzcyZTQxMTA4ZTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjYwMDEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwMzdiZmUxYzM5ODRkOGU4MTk4ZWIyZTk0NGEwMmU0LnNldENvbnRlbnQoaHRtbF85MjM3MjBlNzEyMWM0YWE3OTI2YzgzNzJlNDExMDhlOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzJkNzJmYTU4NjFiNDRmNjQ5MWEyYjU2MDg0MDIzZmM1LmJpbmRQb3B1cChwb3B1cF9jMDM3YmZlMWMzOTg0ZDhlODE5OGViMmU5NDRhMDJlNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGEzNWRhYWJiODg5NGQyYmFlNDJkNzQzOGM1ZTIxOGQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk2Nzg5OTk5MTUxMywgLTczLjg5ODQ3NzAwMDc1Nzk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyZTk2MTg1NjU5YzQ4OGViYzU5NjYyMmFjM2I5Nzg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDg4ZTk3Y2Q2MmJmNGMyZWE2ZmRhYmE2MzRmNjlhMzYgPSAkKCc8ZGl2IGlkPSJodG1sXzA4OGU5N2NkNjJiZjRjMmVhNmZkYWJhNjM0ZjY5YTM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42MzU4MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMmU5NjE4NTY1OWM0ODhlYmM1OTY2MjJhYzNiOTc4Ni5zZXRDb250ZW50KGh0bWxfMDg4ZTk3Y2Q2MmJmNGMyZWE2ZmRhYmE2MzRmNjlhMzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84YTM1ZGFhYmI4ODk0ZDJiYWU0MmQ3NDM4YzVlMjE4ZC5iaW5kUG9wdXAocG9wdXBfZDJlOTYxODU2NTljNDg4ZWJjNTk2NjIyYWMzYjk3ODYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzA2Y2FiY2Y5MzMzNDRhNTU4M2E1NTU5ZDMzYWJlODIxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5Mjk5OTk5OTUzNzMsIC03My44OTc1NzcwMDEwMDE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YWQ1Mzc0MjU3MTY0YzI4YjUzYTY3MGYyMDM2ZjFkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2YTAzNjU2ZmQ1NDRmZmJhNzE5OGU2MmNkNTI5NDRjID0gJCgnPGRpdiBpZD0iaHRtbF9mNmEwMzY1NmZkNTQ0ZmZiYTcxOThlNjJjZDUyOTQ0YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjM3ODQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGFkNTM3NDI1NzE2NGMyOGI1M2E2NzBmMjAzNmYxZGQuc2V0Q29udGVudChodG1sX2Y2YTAzNjU2ZmQ1NDRmZmJhNzE5OGU2MmNkNTI5NDRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMDZjYWJjZjkzMzM0NGE1NTgzYTU1NTlkMzNhYmU4MjEuYmluZFBvcHVwKHBvcHVwXzhhZDUzNzQyNTcxNjRjMjhiNTNhNjcwZjIwMzZmMWRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jZWQwODE0ODVhYTU0OGQwYmI1OTI5YmU3NDhjMThjMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTg2NDk5OTgxOTkwNCwgLTczLjg5ODQ4NTAwMzIzNjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5NWRmZGMzYjZkZDQwMjE4MjdkZTQ2M2EwNDljODFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGZlYWM1YTZkNmYyNGQzMThjNTU2MDkzMTgzNGU1MWMgPSAkKCc8ZGl2IGlkPSJodG1sXzRmZWFjNWE2ZDZmMjRkMzE4YzU1NjA5MzE4MzRlNTFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42NDIzNC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOTVkZmRjM2I2ZGQ0MDIxODI3ZGU0NjNhMDQ5YzgxYS5zZXRDb250ZW50KGh0bWxfNGZlYWM1YTZkNmYyNGQzMThjNTU2MDkzMTgzNGU1MWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jZWQwODE0ODVhYTU0OGQwYmI1OTI5YmU3NDhjMThjMi5iaW5kUG9wdXAocG9wdXBfZjk1ZGZkYzNiNmRkNDAyMTgyN2RlNDYzYTA0OWM4MWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I0ZDEwMTE5NWU1NDQ2Yjg5OWRhZDdjNzE5NWUwMmQzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU0NjkwOTk5OTQyNTQsIC03My44OTg2NDEwMDA1ODcyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZGUxODEwNWFjZDU0NTc1YTBmYTU5MDUwNzhkYzhmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhMGVkMTkwNzNjNDQ5ZjRiNjFlMzJkYjUzNmY5ZDY3ID0gJCgnPGRpdiBpZD0iaHRtbF9mYTBlZDE5MDczYzQ0OWY0YjYxZTMyZGI1MzZmOWQ2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjQyNDAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWRlMTgxMDVhY2Q1NDU3NWEwZmE1OTA1MDc4ZGM4ZjUuc2V0Q29udGVudChodG1sX2ZhMGVkMTkwNzNjNDQ5ZjRiNjFlMzJkYjUzNmY5ZDY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjRkMTAxMTk1ZTU0NDZiODk5ZGFkN2M3MTk1ZTAyZDMuYmluZFBvcHVwKHBvcHVwXzVkZTE4MTA1YWNkNTQ1NzVhMGZhNTkwNTA3OGRjOGY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83NGFmMjI5MzhkZjI0NGYxODAwZTQxZTM3MWFiNWI3OSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0OTc2NDk5OTg2MzUxLCAtNzMuODk2MDk5MDAwMTg4MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmNjZTI3YWY5YTYwNDk5YWFjMWZiYWY5M2IzMjY3OWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTdjNjk5MGU3Yjk0OWU0YjNkNWExZGM5OGNkMjNkNSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmU3YzY5OTBlN2I5NDllNGIzZDVhMWRjOThjZDIzZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY0NDUzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJjY2UyN2FmOWE2MDQ5OWFhYzFmYmFmOTNiMzI2NzlmLnNldENvbnRlbnQoaHRtbF9iZTdjNjk5MGU3Yjk0OWU0YjNkNWExZGM5OGNkMjNkNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzc0YWYyMjkzOGRmMjQ0ZjE4MDBlNDFlMzcxYWI1Yjc5LmJpbmRQb3B1cChwb3B1cF8yY2NlMjdhZjlhNjA0OTlhYWMxZmJhZjkzYjMyNjc5ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYThmODIwZjMwYTdmNDM3MThkOGQ1ZmIwNzMwYWI5NzAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkwMDQ5OTk5ODIzMjYsIC03My44OTY4OTgwMDAzNzk4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDU2ZWYyMGIxNGU0ZWYxODU5NGIwYjExYWQ3OTBmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IxMjA5MmQ5NGJhYzRlMmQ4Y2NiZTM5NGY0ZTg1ZjA3ID0gJCgnPGRpdiBpZD0iaHRtbF9iMTIwOTJkOTRiYWM0ZTJkOGNjYmUzOTRmNGU4NWYwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjQ1MTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjA1NmVmMjBiMTRlNGVmMTg1OTRiMGIxMWFkNzkwZjguc2V0Q29udGVudChodG1sX2IxMjA5MmQ5NGJhYzRlMmQ4Y2NiZTM5NGY0ZTg1ZjA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYThmODIwZjMwYTdmNDM3MThkOGQ1ZmIwNzMwYWI5NzAuYmluZFBvcHVwKHBvcHVwXzIwNTZlZjIwYjE0ZTRlZjE4NTk0YjBiMTFhZDc5MGY4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83ZTFjYWZmZDNlYzA0ODc1OGU3Y2E2ZGUyODJjYTNmYiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0OTM0Nzk5OTkxOTI2LCAtNzMuODk2ODc2MDAyNDUwMThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGNhZWYxNDllOGFiNDY0NmI4YzU2MTUyMDU0YTdjMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMGEyMzQyNDM2ZTI0NDRiYWZmNmY1NzY1NzZjOTVkNSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDBhMjM0MjQzNmUyNDQ0YmFmZjZmNTc2NTc2Yzk1ZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY0NTI5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRjYWVmMTQ5ZThhYjQ2NDZiOGM1NjE1MjA1NGE3YzMyLnNldENvbnRlbnQoaHRtbF9kMGEyMzQyNDM2ZTI0NDRiYWZmNmY1NzY1NzZjOTVkNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdlMWNhZmZkM2VjMDQ4NzU4ZTdjYTZkZTI4MmNhM2ZiLmJpbmRQb3B1cChwb3B1cF80Y2FlZjE0OWU4YWI0NjQ2YjhjNTYxNTIwNTRhN2MzMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTI3NTNkYzVlYWNkNDM5NDlhMzM1YmI0MzI5YTg2ODggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg4MzI5OTk3Mzc2MTYsIC03My44OTU1MDEwMDA2MTQ3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZTVjNTA0ZTM5OWU0ZDVlYjk0MmUwM2M5MzA5NDZjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1YjI2MmExYWJhMTRhMmNhYzZiOTE2NGYzMmZmNzhlID0gJCgnPGRpdiBpZD0iaHRtbF8wNWIyNjJhMWFiYTE0YTJjYWM2YjkxNjRmMzJmZjc4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjQ1MzcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWU1YzUwNGUzOTllNGQ1ZWI5NDJlMDNjOTMwOTQ2Yzkuc2V0Q29udGVudChodG1sXzA1YjI2MmExYWJhMTRhMmNhYzZiOTE2NGYzMmZmNzhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTI3NTNkYzVlYWNkNDM5NDlhMzM1YmI0MzI5YTg2ODguYmluZFBvcHVwKHBvcHVwX2FlNWM1MDRlMzk5ZTRkNWViOTQyZTAzYzkzMDk0NmM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84YTRjMTg2NTFiZjg0MzhlYmUxOGM1M2Q4MDA4YzVjNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODMwNzk5OTgxNzk2LCAtNzMuODk1MjU1MDAzNDYyMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGUxMzc2NjgzODU0NDdhYTgzMmFmZGIxMmNlOWUxMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTFmOWZmM2JiYmY0NDVhYWEyOGQyYWM1ZjAxMTU3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTUxZjlmZjNiYmJmNDQ1YWFhMjhkMmFjNWYwMTE1NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY0NTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlMTM3NjY4Mzg1NDQ3YWE4MzJhZmRiMTJjZTllMTE4LnNldENvbnRlbnQoaHRtbF8xNTFmOWZmM2JiYmY0NDVhYWEyOGQyYWM1ZjAxMTU3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzhhNGMxODY1MWJmODQzOGViZTE4YzUzZDgwMDhjNWM1LmJpbmRQb3B1cChwb3B1cF80ZTEzNzY2ODM4NTQ0N2FhODMyYWZkYjEyY2U5ZTExOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDBhYTg3MmQwNWMwNDUxOGEwM2MwOWM5YjcyNmE4OTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc2OTE5OTk3ODMyMiwgLTczLjg5Mzc5NzAwMDk2OTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkYjhmYjQ0ZWVkODQ5MzBhYjExMDVjNzMwNzhlYjczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzU5NjBiYTY1YWVkNDlkMWEzNGEzZjUwNjY0ZTY2ZDUgPSAkKCc8ZGl2IGlkPSJodG1sX2M1OTYwYmE2NWFlZDQ5ZDFhMzRhM2Y1MDY2NGU2NmQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42NTAyMy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZGI4ZmI0NGVlZDg0OTMwYWIxMTA1YzczMDc4ZWI3My5zZXRDb250ZW50KGh0bWxfYzU5NjBiYTY1YWVkNDlkMWEzNGEzZjUwNjY0ZTY2ZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kMGFhODcyZDA1YzA0NTE4YTAzYzA5YzliNzI2YTg5OS5iaW5kUG9wdXAocG9wdXBfNGRiOGZiNDRlZWQ4NDkzMGFiMTEwNWM3MzA3OGViNzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNlYThkNTVjNjZiMTQ4Y2NiNGU0M2Q0OGZmMTJjZTZkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MDM4OTk5OTIzNDI2LCAtNzMuODg5NTcxMDAyOTEwODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0OS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTgwYmI0MzM4MjI2NDVhYWJmMTI5OWFlMzU1MDAzMzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMTE4MmFjNWNiNGQ0OWFhOTMyNzczMDExZWI1ZTY2OSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTExODJhYzVjYjRkNDlhYTkzMjc3MzAxMWViNWU2NjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjU2MjAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTgwYmI0MzM4MjI2NDVhYWJmMTI5OWFlMzU1MDAzMzguc2V0Q29udGVudChodG1sXzExMTgyYWM1Y2I0ZDQ5YWE5MzI3NzMwMTFlYjVlNjY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfM2VhOGQ1NWM2NmIxNDhjY2I0ZTQzZDQ4ZmYxMmNlNmQuYmluZFBvcHVwKHBvcHVwXzU4MGJiNDMzODIyNjQ1YWFiZjEyOTlhZTM1NTAwMzM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85MzE0OWIwMDRhODg0ZGJmOWM2NzM3YTU5ODZlZjgyNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzEzMzk5OTg5NzE1LCAtNzMuODg4Njc4MDAyNTAxMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWU5NTBjZThjYzZjNDM0MTgyZTY4ZTEzZWJlOGRlNDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDM0OTk3OTE1ODk0ZTVmOTdkMmJmYzFmZTBjNWE5YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjQzNDk5NzkxNTg5NGU1Zjk3ZDJiZmMxZmUwYzVhOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjU4MzQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWU5NTBjZThjYzZjNDM0MTgyZTY4ZTEzZWJlOGRlNDAuc2V0Q29udGVudChodG1sX2Y0MzQ5OTc5MTU4OTRlNWY5N2QyYmZjMWZlMGM1YTljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTMxNDliMDA0YTg4NGRiZjljNjczN2E1OTg2ZWY4MjUuYmluZFBvcHVwKHBvcHVwXzllOTUwY2U4Y2M2YzQzNDE4MmU2OGUxM2ViZThkZTQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iYWU4NDkwZjBmZjM0YTY1ODBmYmY0Y2FjNDM3MzZmZiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzE2Njk5OTc5Mjg5NiwgLTczLjg4NzgwMDAwMTk1MjI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkMTc4NGU0NDhhYTRiNjY5MDdmMWIwOWQxODFkNDE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGIyYjE1ZjAzMjJiNDg0NDlhNjkzN2VmZTM4ZDgzZmEgPSAkKCc8ZGl2IGlkPSJodG1sXzhiMmIxNWYwMzIyYjQ4NDQ5YTY5MzdlZmUzOGQ4M2ZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42NTk2Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDE3ODRlNDQ4YWE0YjY2OTA3ZjFiMDlkMTgxZDQxNS5zZXRDb250ZW50KGh0bWxfOGIyYjE1ZjAzMjJiNDg0NDlhNjkzN2VmZTM4ZDgzZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iYWU4NDkwZjBmZjM0YTY1ODBmYmY0Y2FjNDM3MzZmZi5iaW5kUG9wdXAocG9wdXBfOGQxNzg0ZTQ0OGFhNGI2NjkwN2YxYjA5ZDE4MWQ0MTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNlNDVmM2ZjYmQ1NTRhM2ZhOTJiZjk1YTMzZGFjOWQyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3Mjg3MDAwMDAyNjQsIC03My44ODc2MDYwMDI5NzE2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NjI0NWY4NjMyNDY0MGZhOTRkNTZmODI1MGVkYWRlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkNjg4Y2IyMjBlNDQyZTg4NmFhNGI5OTYxOTgwZDZhID0gJCgnPGRpdiBpZD0iaHRtbF83ZDY4OGNiMjIwZTQ0MmU4ODZhYTRiOTk2MTk4MGQ2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjAwNS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NjI0NWY4NjMyNDY0MGZhOTRkNTZmODI1MGVkYWRlNy5zZXRDb250ZW50KGh0bWxfN2Q2ODhjYjIyMGU0NDJlODg2YWE0Yjk5NjE5ODBkNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zZTQ1ZjNmY2JkNTU0YTNmYTkyYmY5NWEzM2RhYzlkMi5iaW5kUG9wdXAocG9wdXBfNzYyNDVmODYzMjQ2NDBmYTk0ZDU2ZjgyNTBlZGFkZTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzE5ZDM5MzM5NjBiNDQ4ZDZhODUzODhjNjAxMjc0Y2YyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MzQwOTk5OTQwMDg2LCAtNzMuODg2NzE3MDAzNTY4NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2MS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ2NGQ5MjJkMTZjNGUyZGEwNGFhMDE5OWZlOTQ5YzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NWQ2ZDdhNDdlN2I0MmQ5YjZhYTllYjU2M2Q2NTMwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjVkNmQ3YTQ3ZTdiNDJkOWI2YWE5ZWI1NjNkNjUzMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjYxMTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQ2NGQ5MjJkMTZjNGUyZGEwNGFhMDE5OWZlOTQ5Yzkuc2V0Q29udGVudChodG1sXzY1ZDZkN2E0N2U3YjQyZDliNmFhOWViNTYzZDY1MzAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTlkMzkzMzk2MGI0NDhkNmE4NTM4OGM2MDEyNzRjZjIuYmluZFBvcHVwKHBvcHVwXzk0NjRkOTIyZDE2YzRlMmRhMDRhYTAxOTlmZTk0OWM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jYjkzODkxOGJiYWY0YTMxODgyNTU4MzU3OTBjZDU1ZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzQzOTk5OTc2OTg3LCAtNzMuODg1Nzg3MDAyODc4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTU5MzljODA0ZjY0MGM2YWZlZWZkMzc1NjU2YjBjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4OTAxOWE3ZmExMTQ1ODE4OGQxM2NiOTg3MjQ5N2ZhID0gJCgnPGRpdiBpZD0iaHRtbF80ODkwMTlhN2ZhMTE0NTgxODhkMTNjYjk4NzI0OTdmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjMzOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTU5MzljODA0ZjY0MGM2YWZlZWZkMzc1NjU2YjBjOC5zZXRDb250ZW50KGh0bWxfNDg5MDE5YTdmYTExNDU4MTg4ZDEzY2I5ODcyNDk3ZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9jYjkzODkxOGJiYWY0YTMxODgyNTU4MzU3OTBjZDU1ZS5iaW5kUG9wdXAocG9wdXBfNWU1OTM5YzgwNGY2NDBjNmFmZWVmZDM3NTY1NmIwYzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2YxODk1NTRiOGIxYjQ5MjJhMTg5OTA4NGVlNDU4NTg3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTM0OTk5Nzc0NTksIC03My44ODQ4NTUwMDMzMTM3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOThjODZkNzAzNzE0YTk3YmU0ZTJmZDBjMzhiNGZlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzM2Q1YjM1YWQwYjRkNzg4OWYxYTEwN2YxMDU3OTg1ID0gJCgnPGRpdiBpZD0iaHRtbF81MzNkNWIzNWFkMGI0ZDc4ODlmMWExMDdmMTA1Nzk4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjQ0OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOThjODZkNzAzNzE0YTk3YmU0ZTJmZDBjMzhiNGZlZS5zZXRDb250ZW50KGh0bWxfNTMzZDViMzVhZDBiNGQ3ODg5ZjFhMTA3ZjEwNTc5ODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mMTg5NTU0YjhiMWI0OTIyYTE4OTkwODRlZTQ1ODU4Ny5iaW5kUG9wdXAocG9wdXBfZTk4Yzg2ZDcwMzcxNGE5N2JlNGUyZmQwYzM4YjRmZWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I4ZGMwMGFiOGNhMDQ4YjlhY2Q0NDNjMjBhOWVhODViID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NjI5OTk5ODQ3MjYsIC03My44ODM5MzYwMDA4MTY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDc2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMGYwM2M5YmZlNmQ0ZjM1YTUyMzNmNWM1M2NmYzgyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzYjBkMDAyMTA1MDQ3MDA5MzI4YTlkMTNjYzc4NWYzID0gJCgnPGRpdiBpZD0iaHRtbF9hM2IwZDAwMjEwNTA0NzAwOTMyOGE5ZDEzY2M3ODVmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjYzMS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMGYwM2M5YmZlNmQ0ZjM1YTUyMzNmNWM1M2NmYzgyYS5zZXRDb250ZW50KGh0bWxfYTNiMGQwMDIxMDUwNDcwMDkzMjhhOWQxM2NjNzg1ZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iOGRjMDBhYjhjYTA0OGI5YWNkNDQzYzIwYTllYTg1Yi5iaW5kUG9wdXAocG9wdXBfMzBmMDNjOWJmZTZkNGYzNWE1MjMzZjVjNTNjZmM4MmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I5YmQyN2EwYjgyZDQ5Zjc5NGQ4NGI1NTc0MGE1ZmZmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MTkxOTk5Nzc3NjcsIC03My44ODI4OTMwMDIxMzE1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDFmMDVjZTc0MWI0NzA3YjVhYzUzMTk0MzMzZTZkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlZTQ3ZjlkNWE3NTQyNzg5N2FkYTZlYzIyMGUwNTkyID0gJCgnPGRpdiBpZD0iaHRtbF8xZWU0N2Y5ZDVhNzU0Mjc4OTdhZGE2ZWMyMjBlMDU5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjY3MTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQxZjA1Y2U3NDFiNDcwN2I1YWM1MzE5NDMzM2U2ZGIuc2V0Q29udGVudChodG1sXzFlZTQ3ZjlkNWE3NTQyNzg5N2FkYTZlYzIyMGUwNTkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjliZDI3YTBiODJkNDlmNzk0ZDg0YjU1NzQwYTVmZmYuYmluZFBvcHVwKHBvcHVwX2ZkMWYwNWNlNzQxYjQ3MDdiNWFjNTMxOTQzMzNlNmRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85OGJjYWQ3MTlkNjg0NDk0OWFiNDVlNGYyMWUwZjA3MiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzczMzk5OTg3NTQyLCAtNzMuODgyOTk5MDAzMjU3NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Mi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWVjZDU0YzRhYjdlNGNhOWFmYmE3ZTMzZjEzMDRlOTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTcwMDhiMTQ3NDc0MjYyOGNhZDE3MDlmN2JmMGI1ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZWE3MDA4YjE0NzQ3NDI2MjhjYWQxNzA5ZjdiZjBiNWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjY3MTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWVjZDU0YzRhYjdlNGNhOWFmYmE3ZTMzZjEzMDRlOTkuc2V0Q29udGVudChodG1sX2VhNzAwOGIxNDc0NzQyNjI4Y2FkMTcwOWY3YmYwYjVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOThiY2FkNzE5ZDY4NDQ5NDlhYjQ1ZTRmMjFlMGYwNzIuYmluZFBvcHVwKHBvcHVwXzFlY2Q1NGM0YWI3ZTRjYTlhZmJhN2UzM2YxMzA0ZTk5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV82Y2M5YWUyYmRmYTY0NjBlODFlMzEwYmMyMjg0OTJlYSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzgyOTk5OTk5NzE1LCAtNzMuODgyMDcxMDAzNDQyNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjE5Yzc4NGUzZDQyNGQxOTg0ZDQ1NTg3NDg4ZWI3YTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzE3ZDdlYjhlMDE0ZDI0YmJhMDk5NjA1NWQxMDc3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2MxN2Q3ZWI4ZTAxNGQyNGJiYTA5OTYwNTVkMTA3N2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjY5MjYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjE5Yzc4NGUzZDQyNGQxOTg0ZDQ1NTg3NDg4ZWI3YTguc2V0Q29udGVudChodG1sX2NjMTdkN2ViOGUwMTRkMjRiYmEwOTk2MDU1ZDEwNzdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNmNjOWFlMmJkZmE2NDYwZTgxZTMxMGJjMjI4NDkyZWEuYmluZFBvcHVwKHBvcHVwXzIxOWM3ODRlM2Q0MjRkMTk4NGQ0NTU4NzQ4OGViN2E4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kNTM2YTQyNjhkZDI0NWM2OWUyOTBjMGJjYmFlYjA1YSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzkyNjk5OTgxMTEwNiwgLTczLjg4MTEzNzAwMDkxNTczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3YzE1MzZmYmUwZjRhNWM5ZmZiNzQwOGQxNjE4ZTQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWY4ODI0MzdmMGU2NGQ5ODgxNzA5YmYwMjE4YjE1ZGEgPSAkKCc8ZGl2IGlkPSJodG1sX2VmODgyNDM3ZjBlNjRkOTg4MTcwOWJmMDIxOGIxNWRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDY3MTI1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3YzE1MzZmYmUwZjRhNWM5ZmZiNzQwOGQxNjE4ZTQwLnNldENvbnRlbnQoaHRtbF9lZjg4MjQzN2YwZTY0ZDk4ODE3MDliZjAyMThiMTVkYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q1MzZhNDI2OGRkMjQ1YzY5ZTI5MGMwYmNiYWViMDVhLmJpbmRQb3B1cChwb3B1cF9kN2MxNTM2ZmJlMGY0YTVjOWZmYjc0MDhkMTYxOGU0MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTZkNjNhZmYwY2EyNGYyOGEzMTUxMThmYTYyMjIzYjEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgwMjQ5OTk3NTM2MywgLTczLjg4MDIwNjAwMDE5OTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5MGM0ODI0N2U1NTRjYjdhNjUzMTYxYjk2ZmU2YjExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjM3MmI2NTRkODc4NDQ3ODk3NTdkOTY2YzZmNTgyYmYgPSAkKCc8ZGl2IGlkPSJodG1sXzYzNzJiNjU0ZDg3ODQ0Nzg5NzU3ZDk2NmM2ZjU4MmJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42NzMwNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OTBjNDgyNDdlNTU0Y2I3YTY1MzE2MWI5NmZlNmIxMS5zZXRDb250ZW50KGh0bWxfNjM3MmI2NTRkODc4NDQ3ODk3NTdkOTY2YzZmNTgyYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85NmQ2M2FmZjBjYTI0ZjI4YTMxNTExOGZhNjIyMjNiMS5iaW5kUG9wdXAocG9wdXBfNzkwYzQ4MjQ3ZTU1NGNiN2E2NTMxNjFiOTZmZTZiMTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNiYTk1NTQzOTAzODQ2OTI4NDEzYjZiZDcyNDAyMzk2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4MTIzOTk5ODk3NTMsIC03My44NzkyNzgwMDEyNjYzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTc1MmIyNjBhOWU0M2RkYTE4MmNlNWFkOWU3YjZhNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjMTMyM2ZkMDY3MTQzY2Q4ZmRkMmY4YjE3MjE3MTlhID0gJCgnPGRpdiBpZD0iaHRtbF8yYzEzMjNmZDA2NzE0M2NkOGZkZDJmOGIxNzIxNzE5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njc0NzkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGE3NTJiMjYwYTllNDNkZGExODJjZTVhZDllN2I2YTUuc2V0Q29udGVudChodG1sXzJjMTMyM2ZkMDY3MTQzY2Q4ZmRkMmY4YjE3MjE3MTlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfM2JhOTU1NDM5MDM4NDY5Mjg0MTNiNmJkNzI0MDIzOTYuYmluZFBvcHVwKHBvcHVwX2RhNzUyYjI2MGE5ZTQzZGRhMTgyY2U1YWQ5ZTdiNmE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85YTQxYTE2YzZiMjE0YjI1YmE0MGUyZWZkZTY0NzRmOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODIxNTk5OTg4NDM0NCwgLTczLjg3ODQwNjAwMzM4ODczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmNzMyZTUyYzI0MzQ4MTE4MTM2ODljMzg5N2IxYjIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzY3YmJkYzk2OTY4NDExMmJmZWY2ZGNjZWY0ODE2NDMgPSAkKCc8ZGl2IGlkPSJodG1sXzc2N2JiZGM5Njk2ODQxMTJiZmVmNmRjY2VmNDgxNjQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDY3NjEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmNzMyZTUyYzI0MzQ4MTE4MTM2ODljMzg5N2IxYjIzLnNldENvbnRlbnQoaHRtbF83NjdiYmRjOTY5Njg0MTEyYmZlZjZkY2NlZjQ4MTY0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzlhNDFhMTZjNmIyMTRiMjViYTQwZTJlZmRlNjQ3NGY4LmJpbmRQb3B1cChwb3B1cF8wZjczMmU1MmMyNDM0ODExODEzNjg5YzM4OTdiMWIyMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYmU1NTkxYmMxNDVmNDExMzg5YWViMzkwN2U4Y2Y5ZTcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgzMTg5OTk5MDU0NywgLTczLjg3NzQxNjAwMjMyODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Q4MDI1NDRmNDM3NDk2YTg1ZDE2YjNmZjExODcwNDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNTFjMGZmY2ZiOTE0ZDY1YTU4ZjhkMmI2ZjM2ZDRiOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjUxYzBmZmNmYjkxNGQ2NWE1OGY4ZDJiNmYzNmQ0YjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY3ODY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkODAyNTQ0ZjQzNzQ5NmE4NWQxNmIzZmYxMTg3MDQ0LnNldENvbnRlbnQoaHRtbF8yNTFjMGZmY2ZiOTE0ZDY1YTU4ZjhkMmI2ZjM2ZDRiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2JlNTU5MWJjMTQ1ZjQxMTM4OWFlYjM5MDdlOGNmOWU3LmJpbmRQb3B1cChwb3B1cF8zZDgwMjU0NGY0Mzc0OTZhODVkMTZiM2ZmMTE4NzA0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTg5ZjMyNzdjMTRlNGRmOGIwZjU1N2UzNzQ2NDM2NzkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg0MTU5OTk5MDk2MDQsIC03My44NzY0ODAwMDExMDY0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODFkNWMxZWZjMWY0ZGJlOGYyY2M3MWQ0Nzc3NGEwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5MzU3NjFiZTZhNzQzNGNiMzRlNWE2NjZkNmZiMDkxID0gJCgnPGRpdiBpZD0iaHRtbF9mOTM1NzYxYmU2YTc0MzRjYjM0ZTVhNjY2ZDZmYjA5MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njc5OTcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTgxZDVjMWVmYzFmNGRiZThmMmNjNzFkNDc3NzRhMDIuc2V0Q29udGVudChodG1sX2Y5MzU3NjFiZTZhNzQzNGNiMzRlNWE2NjZkNmZiMDkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTg5ZjMyNzdjMTRlNGRmOGIwZjU1N2UzNzQ2NDM2NzkuYmluZFBvcHVwKHBvcHVwXzk4MWQ1YzFlZmMxZjRkYmU4ZjJjYzcxZDQ3Nzc0YTAyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV81ODVmODZiNWNkOTA0OWEyYmJhOGJmNGE2ZmE4NzVhZiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODUyMDk5OTk2NjkxNCwgLTczLjg3NTQ4OTAwMTQzODY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3NzQ2YzAyMGY5YTQ2OWNhMTQxZTg3YmM3Y2ExNWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQ4YmU0MDlmODNhNGNjMWE5MjU4ODliZmNmOTY2OTggPSAkKCc8ZGl2IGlkPSJodG1sXzU0OGJlNDA5ZjgzYTRjYzFhOTI1ODg5YmZjZjk2Njk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODE3NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80Nzc0NmMwMjBmOWE0NjljYTE0MWU4N2JjN2NhMTVjMy5zZXRDb250ZW50KGh0bWxfNTQ4YmU0MDlmODNhNGNjMWE5MjU4ODliZmNmOTY2OTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81ODVmODZiNWNkOTA0OWEyYmJhOGJmNGE2ZmE4NzVhZi5iaW5kUG9wdXAocG9wdXBfNDc3NDZjMDIwZjlhNDY5Y2ExNDFlODdiYzdjYTE1YzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ZkMTU5ZjRjMzg4YzQzYmM5N2UxNjYzYzQ4M2U2NGZmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5Mzk5OTk5NzQ0MjcsIC03My44NzU3MjQwMDE5OTI3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNGMyMDc2ODI0ODg0ZGZkOWQ5Y2FiNmMxM2FiZTMxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjYjk4YTY0ZTVlODRmZjdhN2VkZDg2Zjc4ZmZjMzBjID0gJCgnPGRpdiBpZD0iaHRtbF8xY2I5OGE2NGU1ZTg0ZmY3YTdlZGQ4NmY3OGZmYzMwYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjgxNzcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRjMjA3NjgyNDg4NGRmZDlkOWNhYjZjMTNhYmUzMWMuc2V0Q29udGVudChodG1sXzFjYjk4YTY0ZTVlODRmZjdhN2VkZDg2Zjc4ZmZjMzBjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZmQxNTlmNGMzODhjNDNiYzk3ZTE2NjNjNDgzZTY0ZmYuYmluZFBvcHVwKHBvcHVwXzE0YzIwNzY4MjQ4ODRkZmQ5ZDljYWI2YzEzYWJlMzFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85NTYxYTk5ODQyMTY0YjNjODMwYzkxMDgxNzlkMTEyYSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MDA5Nzk5OTk5NTM3NiwgLTczLjg3NDkwMjAwMDM1ODAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmM2NkYjQ4NTExMDRjYmE4NDY2OTY1ZjBmNWViNTc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGE0Yjg4ZjZlZmZlNGY1YjkzNzJkOTg1NmNhYzViZmMgPSAkKCc8ZGl2IGlkPSJodG1sXzRhNGI4OGY2ZWZmZTRmNWI5MzcyZDk4NTZjYWM1YmZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODI2NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjNjZGI0ODUxMTA0Y2JhODQ2Njk2NWYwZjVlYjU3NC5zZXRDb250ZW50KGh0bWxfNGE0Yjg4ZjZlZmZlNGY1YjkzNzJkOTg1NmNhYzViZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85NTYxYTk5ODQyMTY0YjNjODMwYzkxMDgxNzlkMTEyYS5iaW5kUG9wdXAocG9wdXBfNmYzY2RiNDg1MTEwNGNiYTg0NjY5NjVmMGY1ZWI1NzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzgxMzJkMWZiNTc0ZjQyYmFiYzU0MThjNDNhNzI2ZmI1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NjEzOTk5ODkzMTI0LCAtNzMuODc0NjI5MDAyMjQwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNkOTNkODI3ZDQ1NDcwYjg3MDZiZDZiOGE2MTFjMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MWNhOWI3ZWNlZDI0ZDEwYTVkOThkNDUzMzkwOTc3NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzFjYTliN2VjZWQyNGQxMGE1ZDk4ZDQ1MzM5MDk3NzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4MjY2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzZDkzZDgyN2Q0NTQ3MGI4NzA2YmQ2YjhhNjExYzM2LnNldENvbnRlbnQoaHRtbF83MWNhOWI3ZWNlZDI0ZDEwYTVkOThkNDUzMzkwOTc3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzgxMzJkMWZiNTc0ZjQyYmFiYzU0MThjNDNhNzI2ZmI1LmJpbmRQb3B1cChwb3B1cF8yM2Q5M2Q4MjdkNDU0NzBiODcwNmJkNmI4YTYxMWMzNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYmRiZjRkNWJmMDI3NDljODkzMjViMzZkZmVmYTczMzcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA0MTI5OTk4NjMyMTUsIC03My44NzQwMTIwMDA5OTQ0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYzBlMWJjN2E5MWQ0Nzg1OGMxYjNlZjQwYTU0ZDUyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgwMTU4MzZlMTM0NzRmMDc5MzA1OGY0MDg3MjljMTdmID0gJCgnPGRpdiBpZD0iaHRtbF84MDE1ODM2ZTEzNDc0ZjA3OTMwNThmNDA4NzI5YzE3ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njg0MDkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmMwZTFiYzdhOTFkNDc4NThjMWIzZWY0MGE1NGQ1MmUuc2V0Q29udGVudChodG1sXzgwMTU4MzZlMTM0NzRmMDc5MzA1OGY0MDg3MjljMTdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYmRiZjRkNWJmMDI3NDljODkzMjViMzZkZmVmYTczMzcuYmluZFBvcHVwKHBvcHVwXzJjMGUxYmM3YTkxZDQ3ODU4YzFiM2VmNDBhNTRkNTJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9mMDE5YmQ5MGE1M2M0NTMyYTllYWYwMGQ4MzljNjY3NSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODcxNjk5OTc3NTczLCAtNzMuODczNzAxMDAwODAyNTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWJmY2E0MzNkM2I2NDRlOGE1ZTlhMWM1MTQyODkyY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDc4ZmJlZGY5MDU0ZTg1ODQ3YWNhNmNhODJkOTA0NCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTA3OGZiZWRmOTA1NGU4NTg0N2FjYTZjYTgyZDkwNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4NDExLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViZmNhNDMzZDNiNjQ0ZThhNWU5YTFjNTE0Mjg5MmNhLnNldENvbnRlbnQoaHRtbF9hMDc4ZmJlZGY5MDU0ZTg1ODQ3YWNhNmNhODJkOTA0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2YwMTliZDkwYTUzYzQ1MzJhOWVhZjAwZDgzOWM2Njc1LmJpbmRQb3B1cChwb3B1cF81YmZjYTQzM2QzYjY0NGU4YTVlOWExYzUxNDI4OTJjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTgyOGJkZWFjYzQzNGE3Y2IxNTU0ZDM4ZDA2MThlOTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc4NzE5OTk4MjkxMTUsIC03My44NzIxNTUwMDM1NzEzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83Yjc4OWFiMjAyNGU0ZjNlYmM4NTgxZWQwMzZkMTllMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmOGIzM2Y3NmI2ODQxOTk4NjAwMjE2NmY0YmQyZDVlID0gJCgnPGRpdiBpZD0iaHRtbF9lZjhiMzNmNzZiNjg0MTk5ODYwMDIxNjZmNGJkMmQ1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njg0ODcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2I3ODlhYjIwMjRlNGYzZWJjODU4MWVkMDM2ZDE5ZTEuc2V0Q29udGVudChodG1sX2VmOGIzM2Y3NmI2ODQxOTk4NjAwMjE2NmY0YmQyZDVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTgyOGJkZWFjYzQzNGE3Y2IxNTU0ZDM4ZDA2MThlOTYuYmluZFBvcHVwKHBvcHVwXzdiNzg5YWIyMDI0ZTRmM2ViYzg1ODFlZDAzNmQxOWUxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xYWM5ZWRlNTY4MTQ0YTFmOGE5YzkxZTU3NGM5MDQ3NiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODg1MTk5OTc1NTEwNCwgLTczLjg3MjM3MzAwMDExNzE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5NGQwYjQ2NTVkZjRkYmE4YjIzYjdkMzE0NzMyMGI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDdkZWIyMWIwMjVlNGRiYjlmNzBiMzhjYmEwZTc3ZjEgPSAkKCc8ZGl2IGlkPSJodG1sXzA3ZGViMjFiMDI1ZTRkYmI5ZjcwYjM4Y2JhMGU3N2YxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODQ5My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOTRkMGI0NjU1ZGY0ZGJhOGIyM2I3ZDMxNDczMjBiNy5zZXRDb250ZW50KGh0bWxfMDdkZWIyMWIwMjVlNGRiYjlmNzBiMzhjYmEwZTc3ZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xYWM5ZWRlNTY4MTQ0YTFmOGE5YzkxZTU3NGM5MDQ3Ni5iaW5kUG9wdXAocG9wdXBfZjk0ZDBiNDY1NWRmNGRiYThiMjNiN2QzMTQ3MzIwYjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzE2OTYzOTNiZjk2ZDQ1ZjU4YTUzMzc4MjUwMmI1MmZkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwNzM0OTk5OTEyMDc2LCAtNzMuODczMTE5MDAyMjc2MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDE0ZDE5YWE2MWMxNGY1YTg5ZTU1NWY0NjBkZDAyYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZmNlYjZmYTE0MTk0YjBlODcyZGViNjYzYTBiYmY3YSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGZjZWI2ZmExNDE5NGIwZTg3MmRlYjY2M2EwYmJmN2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4NTIxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxNGQxOWFhNjFjMTRmNWE4OWU1NTVmNDYwZGQwMmEwLnNldENvbnRlbnQoaHRtbF84ZmNlYjZmYTE0MTk0YjBlODcyZGViNjYzYTBiYmY3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzE2OTYzOTNiZjk2ZDQ1ZjU4YTUzMzc4MjUwMmI1MmZkLmJpbmRQb3B1cChwb3B1cF8wMTRkMTlhYTYxYzE0ZjVhODllNTU1ZjQ2MGRkMDJhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMzZhNjI1YzNhYzJiNDU1YmE3ZGQ2ZDYwNDY2ODRjY2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg4MTI5OTk5Mzk5NiwgLTczLjg3Mjc3NDAwMjM1MTI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzYjkzMmFmZjZhMTQyZTJiODg4N2I0MDAyMWUwZjU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmZjYzNiNGM3YjExNGViOGI5NjI0YjA4MTdmZmRlY2QgPSAkKCc8ZGl2IGlkPSJodG1sXzJmY2MzYjRjN2IxMTRlYjhiOTYyNGIwODE3ZmZkZWNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODUyMy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81M2I5MzJhZmY2YTE0MmUyYjg4ODdiNDAwMjFlMGY1OS5zZXRDb250ZW50KGh0bWxfMmZjYzNiNGM3YjExNGViOGI5NjI0YjA4MTdmZmRlY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zNmE2MjVjM2FjMmI0NTViYTdkZDZkNjA0NjY4NGNjYi5iaW5kUG9wdXAocG9wdXBfNTNiOTMyYWZmNmExNDJlMmI4ODg3YjQwMDIxZTBmNTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzYxZTU1MzhiYzhjNzQxOWY4NzlhZWI4NmUwMWVkNDU2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4OTk4OTk5ODk0LCAtNzMuODc0NTg0MDAwMTcyOTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzcyNDI0YTgyZjVkNGQ2MWIzYTVhZmI5MzE2YmY2N2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OTliMTUyZTgzYzY0N2VkODc4YmYyODUzNGJiODhkMCA9ICQoJzxkaXYgaWQ9Imh0bWxfODk5YjE1MmU4M2M2NDdlZDg3OGJmMjg1MzRiYjg4ZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4NTM4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3MjQyNGE4MmY1ZDRkNjFiM2E1YWZiOTMxNmJmNjdlLnNldENvbnRlbnQoaHRtbF84OTliMTUyZTgzYzY0N2VkODc4YmYyODUzNGJiODhkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzYxZTU1MzhiYzhjNzQxOWY4NzlhZWI4NmUwMWVkNDU2LmJpbmRQb3B1cChwb3B1cF83NzI0MjRhODJmNWQ0ZDYxYjNhNWFmYjkzMTZiZjY3ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTc2YmM0OTk5Y2I4NGJjZmIzMjljYjZlOWQ3MDk5NmQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg5NTY5OTk5NTE5MzYsIC03My44NzEzNTYwMDE4NTgyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzljZTIwNWViZWU0ZmNjYjNmMzQyNjgxY2VhYTBkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjZmM1NjMyYjU3NDRhMWU4MWQ3MjFiMmQxNTQ4OGYwID0gJCgnPGRpdiBpZD0iaHRtbF80Y2ZjNTYzMmI1NzQ0YTFlODFkNzIxYjJkMTU0ODhmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njg2NDYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjM5Y2UyMDVlYmVlNGZjY2IzZjM0MjY4MWNlYWEwZGEuc2V0Q29udGVudChodG1sXzRjZmM1NjMyYjU3NDRhMWU4MWQ3MjFiMmQxNTQ4OGYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTc2YmM0OTk5Y2I4NGJjZmIzMjljYjZlOWQ3MDk5NmQuYmluZFBvcHVwKHBvcHVwX2YzOWNlMjA1ZWJlZTRmY2NiM2YzNDI2ODFjZWFhMGRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8wMmEwNzgyZThjZWI0Yzc0OGE2YTJjYmMyMGE3MzQyMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODkwNTk5OTk1MjAxNSwgLTczLjg3MTg0MTAwMTQzNzI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZlMGRlMDczZjZjNjRmNzk4NDJlNmY5MGRkYWE3ZWMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzcxNWM3ZWI0YmQwNGQ1YWJlMWFkY2M0MjYxY2UyZDMgPSAkKCc8ZGl2IGlkPSJodG1sXzc3MTVjN2ViNGJkMDRkNWFiZTFhZGNjNDI2MWNlMmQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODY1Mi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTBkZTA3M2Y2YzY0Zjc5ODQyZTZmOTBkZGFhN2VjMC5zZXRDb250ZW50KGh0bWxfNzcxNWM3ZWI0YmQwNGQ1YWJlMWFkY2M0MjYxY2UyZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wMmEwNzgyZThjZWI0Yzc0OGE2YTJjYmMyMGE3MzQyMy5iaW5kUG9wdXAocG9wdXBfZmUwZGUwNzNmNmM2NGY3OTg0MmU2ZjkwZGRhYTdlYzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzZkMTIzOThiMjcyZTQyZWNhZGE5MDU5ZWU4MmM1NTMzID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5MzU3OTk5ODMzMjUsIC03My44NzM1NjYwMDAxODYwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYWQ3NzBmNjNkMjE0YzFkYjljM2QwYWFjNDk1NDA2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4MDgxYmYyNDM3MDRmNTM5ZmE4YWVhNzhkNmYxMTAyID0gJCgnPGRpdiBpZD0iaHRtbF84ODA4MWJmMjQzNzA0ZjUzOWZhOGFlYTc4ZDZmMTEwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Njg2NzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGFkNzcwZjYzZDIxNGMxZGI5YzNkMGFhYzQ5NTQwNjEuc2V0Q29udGVudChodG1sXzg4MDgxYmYyNDM3MDRmNTM5ZmE4YWVhNzhkNmYxMTAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNmQxMjM5OGIyNzJlNDJlY2FkYTkwNTllZTgyYzU1MzMuYmluZFBvcHVwKHBvcHVwXzBhZDc3MGY2M2QyMTRjMWRiOWMzZDBhYWM0OTU0MDYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83Yjk2MTMzMjZkZTg0MzRlOTVlNWZjZDA3YjFhYWNjNSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1OTY1Nzk5OTczMTI2LCAtNzMuODcyNzEwMDAwMTMwMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjhjZTIwMzFkZDdmNGUxYzk2YTE3NzRmZDhmZjkzN2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NWVjZjkxOGE3NDA0NzQwYjNmMzk0MjExNDcxNDFhMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDVlY2Y5MThhNzQwNDc0MGIzZjM5NDIxMTQ3MTQxYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY4NzIyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4Y2UyMDMxZGQ3ZjRlMWM5NmExNzc0ZmQ4ZmY5MzdhLnNldENvbnRlbnQoaHRtbF80NWVjZjkxOGE3NDA0NzQwYjNmMzk0MjExNDcxNDFhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdiOTYxMzMyNmRlODQzNGU5NWU1ZmNkMDdiMWFhY2M1LmJpbmRQb3B1cChwb3B1cF82OGNlMjAzMWRkN2Y0ZTFjOTZhMTc3NGZkOGZmOTM3YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOWRlMWUzMmYwNGNmNDUxMjljZGJmYjcwMmRmNDFkNmUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTk5NTU5OTk4MjE4OSwgLTczLjg3MTg5NzAwMjE5MDIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4MjgxZGZjNjU5ZTQwZjk5NzBkNzc4ZTdmZTZiZDZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWY2MTdhYTk0MDBjNDgyMDg1ZGYxZjY0ZjQ3MzA1YjggPSAkKCc8ZGl2IGlkPSJodG1sX2VmNjE3YWE5NDAwYzQ4MjA4NWRmMWY2NGY0NzMwNWI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42ODkyMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODI4MWRmYzY1OWU0MGY5OTcwZDc3OGU3ZmU2YmQ2Zi5zZXRDb250ZW50KGh0bWxfZWY2MTdhYTk0MDBjNDgyMDg1ZGYxZjY0ZjQ3MzA1YjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85ZGUxZTMyZjA0Y2Y0NTEyOWNkYmZiNzAyZGY0MWQ2ZS5iaW5kUG9wdXAocG9wdXBfMjgyODFkZmM2NTllNDBmOTk3MGQ3NzhlN2ZlNmJkNmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2YzMTc3ZmE3MzM2MzRhMTVhNWUzNWUyZjkwN2FlOGUyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NDY3OTk5OTA4NzU1LCAtNzMuODczNTEzMDAzMTIyMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzVlNDgzMjUzOGE4NDVmYmExYWQzOTdjZDQzMmEyMDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzUyMTY3NTNlMjE0ZDVmYTJhMWJkZTllYzU2NmVjZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDc1MjE2NzUzZTIxNGQ1ZmEyYTFiZGU5ZWM1NjZlY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY5MTI1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1ZTQ4MzI1MzhhODQ1ZmJhMWFkMzk3Y2Q0MzJhMjA0LnNldENvbnRlbnQoaHRtbF80NzUyMTY3NTNlMjE0ZDVmYTJhMWJkZTllYzU2NmVjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2YzMTc3ZmE3MzM2MzRhMTVhNWUzNWUyZjkwN2FlOGUyLmJpbmRQb3B1cChwb3B1cF9jNWU0ODMyNTM4YTg0NWZiYTFhZDM5N2NkNDMyYTIwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNmNmNmI4OTgyOGU4NDA0MDlmYTQ4M2YxMDgxZWZmYTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg2ODU5OTk4MjI5MDQsIC03My44NzM5ODMwMDE3OTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmNGZhMTcwYjU4MDRjNDk5YzI1YjRlOTA3ZjIyOTIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI5MDc0MTMzZjJkNGVjNjgzY2Q2NGEyMWZjMWM4NjcgPSAkKCc8ZGl2IGlkPSJodG1sXzRiOTA3NDEzM2YyZDRlYzY4M2NkNjRhMjFmYzFjODY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42OTEyNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZjRmYTE3MGI1ODA0YzQ5OWMyNWI0ZTkwN2YyMjkyMS5zZXRDb250ZW50KGh0bWxfNGI5MDc0MTMzZjJkNGVjNjgzY2Q2NGEyMWZjMWM4NjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82Y2Y2Yjg5ODI4ZTg0MDQwOWZhNDgzZjEwODFlZmZhNi5iaW5kUG9wdXAocG9wdXBfYWY0ZmExNzBiNTgwNGM0OTljMjViNGU5MDdmMjI5MjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzk0ODM1OTEwNWJkNjQ5MzViNjNkZGQwOGZlMTI3ZDhhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MjYxOTk5ODY1OTg0LCAtNzMuODc0NDQyMDAxMTE5MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTBjMjU1YWY2M2MzNDQzY2E0ZDNmZWUxNzJjYjRjOGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iODAyYTU1ZTEzNDM0ZGU0ODJmMmFmYzliMjI1MGJiYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjgwMmE1NWUxMzQzNGRlNDgyZjJhZmM5YjIyNTBiYmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjY5MjY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwYzI1NWFmNjNjMzQ0M2NhNGQzZmVlMTcyY2I0YzhlLnNldENvbnRlbnQoaHRtbF9iODAyYTU1ZTEzNDM0ZGU0ODJmMmFmYzliMjI1MGJiYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzk0ODM1OTEwNWJkNjQ5MzViNjNkZGQwOGZlMTI3ZDhhLmJpbmRQb3B1cChwb3B1cF85MGMyNTVhZjYzYzM0NDNjYTRkM2ZlZTE3MmNiNGM4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODFiYmJhNzA2ZTI2NGFjZThmZDE5OTNhYWE5MDk2ZGYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgxNDA5OTk5MjM0ODYsIC03My44NzY0MTgwMDIwNDExOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YWQ5ODEwNjFjMGY0ZjExYTVmOWU5NzY1MzA4MDAyYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmMTc4YTVjN2ZkYzQxYTE5OGUzMTM0NjRmOWQ3ZjAxID0gJCgnPGRpdiBpZD0iaHRtbF9lZjE3OGE1YzdmZGM0MWExOThlMzEzNDY0ZjlkN2YwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NjkyNjguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGFkOTgxMDYxYzBmNGYxMWE1ZjllOTc2NTMwODAwMmIuc2V0Q29udGVudChodG1sX2VmMTc4YTVjN2ZkYzQxYTE5OGUzMTM0NjRmOWQ3ZjAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfODFiYmJhNzA2ZTI2NGFjZThmZDE5OTNhYWE5MDk2ZGYuYmluZFBvcHVwKHBvcHVwXzhhZDk4MTA2MWMwZjRmMTFhNWY5ZTk3NjUzMDgwMDJiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xYzRhOTY3YWU3NTE0NGE4YjJkYjhkN2I4NzBkZTZkMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODM2ODk5OTc1Njk2LCAtNzMuODc2OTI1MDAwNDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5MGEzNzZlNDJjYTRmOGNiMjM1ZWU3M2UzZWZlYjQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM5NGYwMWM4NzRkNDdjMGI3ZTc2NTU4NWJjOGEwMDEgPSAkKCc8ZGl2IGlkPSJodG1sXzljOTRmMDFjODc0ZDQ3YzBiN2U3NjU1ODViYzhhMDAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDY5MjY5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5MGEzNzZlNDJjYTRmOGNiMjM1ZWU3M2UzZWZlYjQ0LnNldENvbnRlbnQoaHRtbF85Yzk0ZjAxYzg3NGQ0N2MwYjdlNzY1NTg1YmM4YTAwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzFjNGE5NjdhZTc1MTQ0YThiMmRiOGQ3Yjg3MGRlNmQyLmJpbmRQb3B1cChwb3B1cF82OTBhMzc2ZTQyY2E0ZjhjYjIzNWVlNzNlM2VmZWI0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNzk5NjZkZmM4ZGQ3NDkyODk4YTcxMmNmYmQxODkzMTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDc3Nzc5OTk3OTQ1MiwgLTczLjg4MjU2OTAwMjQ5ODY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0OTRhNWU2YmE5ODQzNDc4MWRjMmE1ZTliNmY1YWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmNiYjdiZWY5Mjk5NGI5OTg0M2MwNzllYmFhYTdmMDkgPSAkKCc8ZGl2IGlkPSJodG1sX2JjYmI3YmVmOTI5OTRiOTk4NDNjMDc5ZWJhYWE3ZjA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij44NDQyMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNDk0YTVlNmJhOTg0MzQ3ODFkYzJhNWU5YjZmNWFmMS5zZXRDb250ZW50KGh0bWxfYmNiYjdiZWY5Mjk5NGI5OTg0M2MwNzllYmFhYTdmMDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83OTk2NmRmYzhkZDc0OTI4OThhNzEyY2ZiZDE4OTMxNi5iaW5kUG9wdXAocG9wdXBfMDQ5NGE1ZTZiYTk4NDM0NzgxZGMyYTVlOWI2ZjVhZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFjYjYzMGY3MjE1YzRlNzc5MjZmYWMyZTZhMGRlYTdhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MDM5OTk5OTcxOTgsIC03My44ODI5ODkwMDE3MDA3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YmVhYTU5ZTZmZWQ0NmIwYjhiZGRiODI2OWQ0YzRhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjZDUzMjc5NTRiNDQ3YWZiNTM2MDY3YTViZDNlZmZmID0gJCgnPGRpdiBpZD0iaHRtbF9hY2Q1MzI3OTU0YjQ0N2FmYjUzNjA2N2E1YmQzZWZmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ODQ0MjMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGJlYWE1OWU2ZmVkNDZiMGI4YmRkYjgyNjlkNGM0YTEuc2V0Q29udGVudChodG1sX2FjZDUzMjc5NTRiNDQ3YWZiNTM2MDY3YTViZDNlZmZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMWNiNjMwZjcyMTVjNGU3NzkyNmZhYzJlNmEwZGVhN2EuYmluZFBvcHVwKHBvcHVwXzhiZWFhNTllNmZlZDQ2YjBiOGJkZGI4MjY5ZDRjNGExKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lMzNlYTcxOGUwMDA0MTQyOTYzMzRkZWQxNTg2NzYyYSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0Nzg2NDk5OTc0NDA3NCwgLTczLjg3Mzk3ODAwMDc2NjQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjMWNhMjYzYzFhMjQyZDFiMTgyYTQyMzZlZmE0ODFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWI2YzRjZjc5MjViNGZmNGI1YjkxNzZmYjcwOGJkNTcgPSAkKCc8ZGl2IGlkPSJodG1sXzliNmM0Y2Y3OTI1YjRmZjRiNWI5MTc2ZmI3MDhiZDU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij44NDQ1Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzFjYTI2M2MxYTI0MmQxYjE4MmE0MjM2ZWZhNDgxZi5zZXRDb250ZW50KGh0bWxfOWI2YzRjZjc5MjViNGZmNGI1YjkxNzZmYjcwOGJkNTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lMzNlYTcxOGUwMDA0MTQyOTYzMzRkZWQxNTg2NzYyYS5iaW5kUG9wdXAocG9wdXBfMmMxY2EyNjNjMWEyNDJkMWIxODJhNDIzNmVmYTQ4MWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzE1ZTQ4ZTVhZjFlZjQ2OWU4OTRiOThmOGJlNjgwNjlmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTEwOTk5OTM2MzksIC03My44NzY3ODkwMDIyMDY3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODQxMjk0YjA4ZTI0MjFkOGY1ZjdlMmIzMTQ1NmI5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0MjFkYWMyN2YxZDRkNzNiM2JkZmZkMDZhOGFmMjAyID0gJCgnPGRpdiBpZD0iaHRtbF83NDIxZGFjMjdmMWQ0ZDczYjNiZGZmZDA2YThhZjIwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ODQ5MzUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTg0MTI5NGIwOGUyNDIxZDhmNWY3ZTJiMzE0NTZiOWUuc2V0Q29udGVudChodG1sXzc0MjFkYWMyN2YxZDRkNzNiM2JkZmZkMDZhOGFmMjAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMTVlNDhlNWFmMWVmNDY5ZTg5NGI5OGY4YmU2ODA2OWYuYmluZFBvcHVwKHBvcHVwXzE4NDEyOTRiMDhlMjQyMWQ4ZjVmN2UyYjMxNDU2YjllKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hYTYxOTNlZTEzYjA0OGE5Yjk2OTdiYmZlZWEwOTZlYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzAzMzk5OTc1MDIxLCAtNzMuODc5MzYzMDAxNTI5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNWFjNTFkMTJjY2Q0YThiODc5MzEyN2NhMDkyYzc5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiMjYzOGE4OGE4YzRmZjI4YjFkNjk0YmYyZGE3NzViID0gJCgnPGRpdiBpZD0iaHRtbF8zYjI2MzhhODhhOGM0ZmYyOGIxZDY5NGJmMmRhNzc1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ODUxMTMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTVhYzUxZDEyY2NkNGE4Yjg3OTMxMjdjYTA5MmM3OTguc2V0Q29udGVudChodG1sXzNiMjYzOGE4OGE4YzRmZjI4YjFkNjk0YmYyZGE3NzViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYWE2MTkzZWUxM2IwNDhhOWI5Njk3YmJmZWVhMDk2ZWMuYmluZFBvcHVwKHBvcHVwX2E1YWM1MWQxMmNjZDRhOGI4NzkzMTI3Y2EwOTJjNzk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hNTVhODlmNDRmYTA0YjYzYjRiYzI3MGI1MGRhMWUzMyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzkwODk5OTg1NzAxLCAtNzMuODgxMzA0MDAyMDY5MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTlhZDA4Y2FiYWI4NGQ4OTg5Njc2YjhmNTJiNjBmMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NTE3NDA0YTViMDY0YThjOWE2NzRmNmE5NWFiYmE0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDUxNzQwNGE1YjA2NGE4YzlhNjc0ZjZhOTVhYmJhNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjg1MTE2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5YWQwOGNhYmFiODRkODk4OTY3NmI4ZjUyYjYwZjBlLnNldENvbnRlbnQoaHRtbF80NTE3NDA0YTViMDY0YThjOWE2NzRmNmE5NWFiYmE0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2E1NWE4OWY0NGZhMDRiNjNiNGJjMjcwYjUwZGExZTMzLmJpbmRQb3B1cChwb3B1cF9hOWFkMDhjYWJhYjg0ZDg5ODk2NzZiOGY1MmI2MGYwZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjc5NDEzNWFlZjM0NGExZGI5ZjA2MDk3YzFjZTdjMGQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDkwNjM5OTk3ODcsIC03My44NzAzNzkwMDM0OTE2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZmE3NGQzMGQxYTA0NTVmYmVjMTMyNzNlNGQxNjQxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkODk3MjUyOGFlMDRiMGNhNWUwM2U1NzU5MDdhM2Y1ID0gJCgnPGRpdiBpZD0iaHRtbF81ZDg5NzI1MjhhZTA0YjBjYTVlMDNlNTc1OTA3YTNmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ODc0NzguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWZhNzRkMzBkMWEwNDU1ZmJlYzEzMjczZTRkMTY0MWUuc2V0Q29udGVudChodG1sXzVkODk3MjUyOGFlMDRiMGNhNWUwM2U1NzU5MDdhM2Y1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYjc5NDEzNWFlZjM0NGExZGI5ZjA2MDk3YzFjZTdjMGQuYmluZFBvcHVwKHBvcHVwX2FmYTc0ZDMwZDFhMDQ1NWZiZWMxMzI3M2U0ZDE2NDFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xNTQ1ZTNlNTllODM0ZDU3YTM4Nzc3NThlYzJiMmIzOCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzYzODk5OTgxMjg2NCwgLTczLjg3ODg5MjAwMjQ4MTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0ZmVhY2UwNWU4MjQwYjRhNDljNTVlMTljZmM1OTU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2E4OTJhMDE3OTZkNGI1OGE2MTE1ZTYzZjU3ZjcyNTMgPSAkKCc8ZGl2IGlkPSJodG1sXzdhODkyYTAxNzk2ZDRiNThhNjExNWU2M2Y1N2Y3MjUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij44ODI1NS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNGZlYWNlMDVlODI0MGI0YTQ5YzU1ZTE5Y2ZjNTk1Ny5zZXRDb250ZW50KGh0bWxfN2E4OTJhMDE3OTZkNGI1OGE2MTE1ZTYzZjU3ZjcyNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xNTQ1ZTNlNTllODM0ZDU3YTM4Nzc3NThlYzJiMmIzOC5iaW5kUG9wdXAocG9wdXBfZjRmZWFjZTA1ZTgyNDBiNGE0OWM1NWUxOWNmYzU5NTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2I3ZjQ5NGYxM2ViZDQwODZiYTk3ZmFlNjhkM2VjYmRkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NzU3OTk5OTA4Njc2LCAtNzMuODczMzAzMDAyMjY3MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODI1ODRmOWQyY2NmNGQxNmI5M2U5ODQ3OTJiZDlkN2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNDIwYzgzNjc5YmE0YzE4YTgyNWExMWYzOGQ2NGFhZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjQyMGM4MzY3OWJhNGMxOGE4MjVhMTFmMzhkNjRhYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkxMDQ1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyNTg0ZjlkMmNjZjRkMTZiOTNlOTg0NzkyYmQ5ZDdmLnNldENvbnRlbnQoaHRtbF9iNDIwYzgzNjc5YmE0YzE4YTgyNWExMWYzOGQ2NGFhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2I3ZjQ5NGYxM2ViZDQwODZiYTk3ZmFlNjhkM2VjYmRkLmJpbmRQb3B1cChwb3B1cF84MjU4NGY5ZDJjY2Y0ZDE2YjkzZTk4NDc5MmJkOWQ3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzQ1MWYyZGRlODYxNDk3OThkYTk0YmNjN2E2ZDljYTMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg3MDA5OTk5NDc4LCAtNzMuODk2MTY4MDAxNjc1MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODE2YmQzZmEyNTNiNGE2Njk3N2E3YWI2ZjI1YmFlNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xM2FkNWY2YjVhNDY0YWM5OGQ0ZDViNTBkZmUzNTYwZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTNhZDVmNmI1YTQ2NGFjOThkNGQ1YjUwZGZlMzU2MGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkxNDk1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxNmJkM2ZhMjUzYjRhNjY5NzdhN2FiNmYyNWJhZTU5LnNldENvbnRlbnQoaHRtbF8xM2FkNWY2YjVhNDY0YWM5OGQ0ZDViNTBkZmUzNTYwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2M0NTFmMmRkZTg2MTQ5Nzk4ZGE5NGJjYzdhNmQ5Y2EzLmJpbmRQb3B1cChwb3B1cF84MTZiZDNmYTI1M2I0YTY2OTc3YTdhYjZmMjViYWU1OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTMzZGFiZmE0YTM2NGUyNzg4OGJlZmJlZGQ1MjEzOGMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDg4MzQ5OTk3NDkxNjQsIC03My44OTY0NTQwMDE1MzIzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZGJjOWNmMmY0ZjQ0YTBkODljOGFkOGEzNDA3NmVkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmYjg4YTAzYWYxYjRlNzI4MTZmMzA0ZThjYjE2MjBkID0gJCgnPGRpdiBpZD0iaHRtbF80ZmI4OGEwM2FmMWI0ZTcyODE2ZjMwNGU4Y2IxNjIwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+OTE0OTYuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGRiYzljZjJmNGY0NGEwZDg5YzhhZDhhMzQwNzZlZDEuc2V0Q29udGVudChodG1sXzRmYjg4YTAzYWYxYjRlNzI4MTZmMzA0ZThjYjE2MjBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTMzZGFiZmE0YTM2NGUyNzg4OGJlZmJlZGQ1MjEzOGMuYmluZFBvcHVwKHBvcHVwX2RkYmM5Y2YyZjRmNDRhMGQ4OWM4YWQ4YTM0MDc2ZWQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84YTM2MTY3Njk5NDA0YTM4OTQwMzY3YTAxNTcxM2QxZCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODQzODk5OTkyNjcxLCAtNzMuODc2MjUyMDAxODg0NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjc0MDQwYTE5ZDIxNGVhNzk3ZTZhMGZjNTE2MDU4MWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YjNlYzIwYmM2NzY0OTZiODA3MGM2YTlkY2E2MWVjNCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWIzZWMyMGJjNjc2NDk2YjgwNzBjNmE5ZGNhNjFlYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkxODgwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3NDA0MGExOWQyMTRlYTc5N2U2YTBmYzUxNjA1ODFkLnNldENvbnRlbnQoaHRtbF85YjNlYzIwYmM2NzY0OTZiODA3MGM2YTlkY2E2MWVjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzhhMzYxNjc2OTk0MDRhMzg5NDAzNjdhMDE1NzEzZDFkLmJpbmRQb3B1cChwb3B1cF82NzQwNDBhMTlkMjE0ZWE3OTdlNmEwZmM1MTYwNTgxZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGIxNzQ3MDM1YWM1NGU4M2JlY2U1NDBjMDI1MWUwNGUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgwNjE5OTk4ODIyNCwgLTczLjg3OTgzOTAwMDgxNjg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlMTdmMjU3MzgzMzRmYmRiMTRiZjRmNTg2NmNiMzgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjBlYmY2OWVhZDcxNGUyYTk3ZmYzOTMyZjY4MGZlOTIgPSAkKCc8ZGl2IGlkPSJodG1sXzIwZWJmNjllYWQ3MTRlMmE5N2ZmMzkzMmY2ODBmZTkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij45NTA4OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZTE3ZjI1NzM4MzM0ZmJkYjE0YmY0ZjU4NjZjYjM4MS5zZXRDb250ZW50KGh0bWxfMjBlYmY2OWVhZDcxNGUyYTk3ZmYzOTMyZjY4MGZlOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84YjE3NDcwMzVhYzU0ZTgzYmVjZTU0MGMwMjUxZTA0ZS5iaW5kUG9wdXAocG9wdXBfM2UxN2YyNTczODMzNGZiZGIxNGJmNGY1ODY2Y2IzODEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzYzODFlN2M1Zjc0MzRkMzY4NmZmMDFiMWQ2NWY2MWJmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzUwMTU3OTk5OTkwODYsIC03My44OTcxNDgwMDI0MjM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImdyZXkiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiZ3JleSIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2M2NzYzY2I1OGVlZDQ0Y2U4OTI0ZDE2ZmU5OTAwYmYyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjYzBkODQwOTE5NTQ3MWQ5YWEzMmVhZTc1YzhmODhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODcxY2RlYzhmYWRhNGNmMGIzMjUwNmYwOTk5Y2MxMDYgPSAkKCc8ZGl2IGlkPSJodG1sXzg3MWNkZWM4ZmFkYTRjZjBiMzI1MDZmMDk5OWNjMTA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xMDE4NDQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWNjMGQ4NDA5MTk1NDcxZDlhYTMyZWFlNzVjOGY4OGUuc2V0Q29udGVudChodG1sXzg3MWNkZWM4ZmFkYTRjZjBiMzI1MDZmMDk5OWNjMTA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNjM4MWU3YzVmNzQzNGQzNjg2ZmYwMWIxZDY1ZjYxYmYuYmluZFBvcHVwKHBvcHVwXzFjYzBkODQwOTE5NTQ3MWQ5YWEzMmVhZTc1YzhmODhlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8xZjYyOGE4ZTI3YTQ0ZTg5OGM2NWQ1NjQ1ODY0NjEyYyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzU5MTk5OTc0NTMyLCAtNzMuODk1NDQxMDAxODI4NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiZ3JleSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJncmV5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYzY3NjNjYjU4ZWVkNDRjZTg5MjRkMTZmZTk5MDBiZjIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjUxZjUzMjliN2E3NDZhNDk2YThiMjAzYmFjNTkzYWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OWQyZTY4ZDFmN2U0ZTg4YWYxOTMxODdjNGMxNGFlNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzlkMmU2OGQxZjdlNGU4OGFmMTkzMTg3YzRjMTRhZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEwMTg2NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNTFmNTMyOWI3YTc0NmE0OTZhOGIyMDNiYWM1OTNhYS5zZXRDb250ZW50KGh0bWxfNzlkMmU2OGQxZjdlNGU4OGFmMTkzMTg3YzRjMTRhZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8xZjYyOGE4ZTI3YTQ0ZTg5OGM2NWQ1NjQ1ODY0NjEyYy5iaW5kUG9wdXAocG9wdXBfZjUxZjUzMjliN2E3NDZhNDk2YThiMjAzYmFjNTkzYWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzRkY2I5NTQxZWNjYzRlZDdiMzY3YTJhYmM0ZmI3ZjJiID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5ODU3OTk5ODUzMTcsIC03My44OTg2ODIwMDIyMDQyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJncmV5IiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogImdyZXkiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9jNjc2M2NiNThlZWQ0NGNlODkyNGQxNmZlOTkwMGJmMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZDEwMTQxY2EwOWY0NDFhYWYxNDE3NWI0YmQwYWRmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3MjQ1ZTFhNTI5ZDRmZDdhZjdkMzUzYTM1N2NlNmYzID0gJCgnPGRpdiBpZD0iaHRtbF9mNzI0NWUxYTUyOWQ0ZmQ3YWY3ZDM1M2EzNTdjZTZmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MTI5MzMwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FkMTAxNDFjYTA5ZjQ0MWFhZjE0MTc1YjRiZDBhZGZhLnNldENvbnRlbnQoaHRtbF9mNzI0NWUxYTUyOWQ0ZmQ3YWY3ZDM1M2EzNTdjZTZmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzRkY2I5NTQxZWNjYzRlZDdiMzY3YTJhYmM0ZmI3ZjJiLmJpbmRQb3B1cChwb3B1cF9hZDEwMTQxY2EwOWY0NDFhYWYxNDE3NWI0YmQwYWRmYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" 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 0x21831788fd0>"
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Heatmap\nSimilar to above but just the LPIS locations on top of a heatmap."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "mh = folium.Map(location=[40.75, -73.88], zoom_start =15, tiles='OpenStreetMap')\n\nHeatMap(list(zip(jh0.latitude, jh0.longitude, jh0.personsinjured)), radius = 12).add_to(mh) \n\nfor idx, row in jh0.iterrows():\n if (row.flag_LPIS_ever == 1):\n folium.Circle(location=[row.latitude, row.longitude],\n popup=f'LPIS {row.intersection_id}',\n radius = 10 + row.personsinjured*3\n ).add_to(mh)\n\nmh",
"execution_count": 113,
"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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgPHN0eWxlPiNtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjAgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9sZWFmbGV0LmdpdGh1Yi5pby9MZWFmbGV0LmhlYXQvZGlzdC9sZWFmbGV0LWhlYXQuanMiPjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjAgPSBMLm1hcCgKICAgICAgICAnbWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwJywgewogICAgICAgIGNlbnRlcjogWzQwLjc1LCAtNzMuODhdLAogICAgICAgIHpvb206IDE1LAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKCiAgICAKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfOGUxYWZkZjVjOGY1NDE0OGI5ZjZkZDMxMDViMjRmMzcgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiCn0pLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAKICAgICAgICAgICAgdmFyIGhlYXRfbWFwXzVlMzcyMjYwY2Y2YzQ0ODQ5MzAxYTBiZmY3N2E2MmIzID0gTC5oZWF0TGF5ZXIoCiAgICAgICAgICAgICAgICBbWzQwLjc1NDIxNjk5OTg0MTMyNiwgLTczLjg5ODE4MTAwMTI3NTE5LCAwXSwgWzQwLjc1NDI4MDk5OTkwNzkwNSwgLTczLjg5NzUwMTAwMjA0Mjk5LCA0OV0sIFs0MC43NTQzODg5OTk5ODg4LCAtNzMuODk2NTIyMDAyOTA2MjEsIDE4XSwgWzQwLjc1NDQ4NDk5OTczODY2NSwgLTczLjg5NTU5MDAwMzAxNzI2LCAxNF0sIFs0MC43NTQ1ODI5OTk3MjgxMiwgLTczLjg5NDY2MTAwMDI5NTkxLCAxNF0sIFs0MC43NTQ2ODA5OTk4MzkyNDUsIC03My44OTM3MzQwMDE2NjM4MywgMTVdLCBbNDAuNzU0Nzc3OTk5ODM2MzM1LCAtNzMuODkyODAzMDAyNjYzNzgsIDEzXSwgWzQwLjc1NDg3Mjk5OTgzNTU0LCAtNzMuODkxODgxMDAyNDg0ODEsIDIwXSwgWzQwLjc1NDk3Mzk5OTkwMzI2LCAtNzMuODkwOTQ4MDAyNzMzNzUsIDEwXSwgWzQwLjc1NTA3MDk5OTkxNzQxNSwgLTczLjg5MDAxMzAwMzUwODM5LCAxMV0sIFs0MC43NTUxNjk5OTk4NzM2NywgLTczLjg4OTA4ODAwMzU4OTk2LCA4XSwgWzQwLjc1NTI2NTk5OTc0MzMsIC03My44ODgxNTcwMDM0MzYwNSwgMTJdLCBbNDAuNzU1MzYyOTk5OTk2NzIsIC03My44ODcyMjgwMDIxMzg0OSwgMTJdLCBbNDAuNzU1NDU5OTk5NzMzMTUsIC03My44ODYyOTgwMDE5MTMxMywgMThdLCBbNDAuNzU1NTU2OTk5NzUxNzcsIC03My44ODUzNjcwMDI3NTQxNSwgMjNdLCBbNDAuNzU1NjU2OTk5OTMxMTksIC03My44ODQ0MzkwMDIzNTMwNiwgN10sIFs0MC43NTU3NTQ5OTk3NDgxNCwgLTczLjg4MzUwNzAwMzM1Mzg3LCAxN10sIFs0MC43NTU4NTM5OTk4NTYwMywgLTczLjg4MjU3OTAwMjc0ODI5LCAxNl0sIFs0MC43NTU5NTE5OTk5MjUxMjQsIC03My44ODE2NDgwMDE2NjYxMiwgMjVdLCBbNDAuNzU2MDQ4OTk5ODQ4MDU1LCAtNzMuODgwNzE5MDAyODg5MDgsIDIyXSwgWzQwLjc1NjE0Njk5OTkzMDk0LCAtNzMuODc5Nzg5MDAzMzY3MzQsIDEwXSwgWzQwLjc1NjI0MDk5OTkwMTE5NSwgLTczLjg3ODg2MTAwMDgxNDUyLCAxNV0sIFs0MC43NTY0Mzg5OTk4MDk2NSwgLTczLjg3Njk5ODAwMjk4OTA4LCAxNF0sIFs0MC43NTY1MzU5OTk4NjIwOCwgLTczLjg3NjA2ODAwMTU3MjU2LCAyMV0sIFs0MC43NTY2MzM5OTk5OTM1NzUsIC03My44NzUxMzkwMDI2MTU0NiwgMTldLCBbNDAuNzU2NzMxOTk5NzgwMjgsIC03My44NzQyMDgwMDEyMzMyNiwgMTJdLCBbNDAuNzU2ODUwOTk5ODY3NzY1LCAtNzMuODczMTExMDAxNjA3OTUsIDNdLCBbNDAuNzU2OTQyOTk5ODk1NDIsIC03My44NzIyMTkwMDMxNDkyLCAxM10sIFs0MC43NTcwMzU5OTk3Mjk0MSwgLTczLjg3MTMyNDAwMDc1MDc3LCAyMl0sIFs0MC43NTcxMzE5OTk5MDczMSwgLTczLjg3MDQxNDAwMzE1NTAyLCA2XSwgWzQwLjc1NjgwMzk5OTc1MjE0NCwgLTczLjg3MzY1NzAwMDI2MTA4LCA0OV0sIFs0MC43NTQxMDk5OTk4MjY3NiwgLTczLjg5ODY5NzAwMzU0Mzk2LCA0XSwgWzQwLjc1OTk3Mzk5OTk0NzA4NiwgLTczLjg5ODQ1NjAwMjgxMzg5LCAwXSwgWzQwLjc1OTk3Mjk5OTg2NjIxLCAtNzMuODk4NjExMDAxMzE4MywgMF0sIFs0MC43NTc5NTQ5OTk5NzE1OCwgLTczLjg5ODE5MjAwMzM4MjI5LCA2XSwgWzQwLjc1ODA1OTk5OTk5Njk3LCAtNzMuODk3MTkxMDAyNDI5NzIsIDRdLCBbNDAuNzU4MTU4OTk5OTAxOTIsIC03My44OTYyNjIwMDEyMDAyNiwgMl0sIFs0MC43NTgyNTQ5OTk5NzU5OSwgLTczLjg5NTMzNjAwMTQ5NjI4LCAxXSwgWzQwLjc1ODM1Mjk5OTkxNzUwNiwgLTczLjg5NDQwMjAwMDY0NTk4LCA4XSwgWzQwLjc1ODQ1MDk5OTkzMzk3LCAtNzMuODkzNDczMDAzNTc3MzYsIDJdLCBbNDAuNzU4NTQ5OTk5OTQ2ODEsIC03My44OTI1MjgwMDA2ODI5NiwgN10sIFs0MC43NTg2NDU5OTk5MjY0NiwgLTczLjg5MTYwOTAwMDAxNTU4LCA0XSwgWzQwLjc1ODc0Mzk5OTkzNTUwNCwgLTczLjg5MDY5MTAwMDQ5MzI5LCA3XSwgWzQwLjc1ODg0MDk5OTgwNTk4LCAtNzMuODg5NzUwMDAyODkxNTcsIDddLCBbNDAuNzU4OTM2OTk5ODI1NCwgLTczLjg4ODgyMzAwMjQxMjcsIDNdLCBbNDAuNzU5MDM2OTk5ODE0MjUsIC03My44ODc4OTMwMDAxMTYxMSwgNl0sIFs0MC43NTkxMzI5OTk4MzMzMiwgLTczLjg4Njk2NTAwMTU1MjM4LCA4XSwgWzQwLjc1OTIzMjk5OTgxNDIxNiwgLTczLjg4NjAzNjAwMDgwMDEyLCAxMV0sIFs0MC43NTkzMjk5OTk4MTA5NSwgLTczLjg4NTEwNjAwMjU0MjQsIDldLCBbNDAuNzU5NDI2OTk5OTgzOCwgLTczLjg4NDE3NjAwMTU2Mjc0LCAxMl0sIFs0MC43NTk1MjU5OTk5Njg3NiwgLTczLjg4MzI0NTAwMTY5NDQsIDEzXSwgWzQwLjc1OTYyMzk5OTc3Njk2LCAtNzMuODgyMzE2MDAwNTc3MjMsIDZdLCBbNDAuNzU5NzIxOTk5ODQ5NTUsIC03My44ODEzODYwMDA0Mzg1MSwgMV0sIFs0MC43NTk4MTg5OTk3MzcyNywgLTczLjg4MDQ1OTAwMjYxMDUsIDZdLCBbNDAuNzU5OTE2OTk5NzQ1NzEsIC03My44Nzk1MjcwMDA4MjYyOSwgN10sIFs0MC43NTY0MDQ5OTk5OTczNywgLTczLjg5NzkxMDAwMDkwMDE3LCA4XSwgWzQwLjc1NjUxMDk5OTg4ODg2LCAtNzMuODk2OTA4MDAzMzYxNzQsIDZdLCBbNDAuNzU2NjA3OTk5OTIzMzYsIC03My44OTU5NzYwMDE2NTc0NCwgM10sIFs0MC43NTY3MTA5OTk5OTkzNTYsIC03My44OTUwNTIwMDA5MTg1MSwgMF0sIFs0MC43NTY3OTQ5OTk3MzM1MzYsIC03My44OTQxMjQwMDI4ODQzMywgM10sIFs0MC43NTY4OTc5OTk5MDU4MjQsIC03My44OTMxODgwMDIxNzgyLCAxMF0sIFs0MC43NTY5ODk5OTk5NDQ5MDYsIC03My44OTIyNjEwMDA1MDQ3NSwgM10sIFs0MC43NTcwOTU5OTk5NTA3MSwgLTczLjg5MTMzMzAwMjQ1MTQyLCA2XSwgWzQwLjc1NzE5Mjk5OTg4MzgxLCAtNzMuODkwNDAzMDAyMTEwNywgNl0sIFs0MC43NTcyOTI5OTk4Njc1MywgLTczLjg4OTQ3MjAwMTQ0Mjg1LCA1XSwgWzQwLjc1NzM4Nzk5OTc5Mjg1NCwgLTczLjg4ODU0NDAwMjI3MDMxLCAxMV0sIFs0MC43NTc0ODQ5OTk4NDIxNTYsIC03My44ODc2MTMwMDExMjI2NSwgOF0sIFs0MC43NTc1ODU5OTk5MDYyOCwgLTczLjg4NjY4NTAwMDgyOTYzLCA5XSwgWzQwLjc1NzY4Mzk5OTc3Njk2NSwgLTczLjg4NTc1MzAwMzQ0MjYsIDZdLCBbNDAuNzU3Nzc5OTk5OTQ4MzEsIC03My44ODQ4MjQwMDI3MTIzNSwgMF0sIFs0MC43NTc4NzY5OTk3NzAwOCwgLTczLjg4Mzg5NzAwMDg3MDY2LCA0XSwgWzQwLjc1Nzk3NTk5OTg2MDgxLCAtNzMuODgyOTY0MDAwODc1MiwgOF0sIFs0MC43NTgwNzM5OTk4NzcwMzQsIC03My44ODIwMzUwMDI5MTAyMywgMjBdLCBbNDAuNzU4MTcwOTk5NzU1MTgsIC03My44ODExMDQwMDA2NTI4MywgM10sIFs0MC43NTgyNjg5OTk4Njg4LCAtNzMuODgwMTc1MDAwODE0MzYsIDhdLCBbNDAuNzU4MzY3OTk5ODYzMDMsIC03My44NzkyNDUwMDAxNjIyLCAwXSwgWzQwLjc1ODQ2Mzk5OTc1NjEzLCAtNzMuODc4MzE1MDAyMjEyNjcsIDExXSwgWzQwLjc1ODU2MTk5OTkyMjM0LCAtNzMuODc3Mzg1MDAxNDk2MTgsIDRdLCBbNDAuNzU4NjU5OTk5OTkzOTI0LCAtNzMuODc2NDU1MDAxNjM5MDcsIDZdLCBbNDAuNzU4Njc5OTk5OTkzMjgsIC03My44NzU1MTEwMDIyNTMyMywgMTNdLCBbNDAuNzU4NTkyOTk5NzU2ODE0LCAtNzMuODc0NTEyMDAxNzM4NjgsIDE5XSwgWzQwLjc1ODY5NDk5OTg4MjgyLCAtNzMuODczNDQ4MDAzNTkxNTIsIDEwXSwgWzQwLjc1ODc5MTk5OTg0NDUxLCAtNzMuODcyNTUyMDAwNzM5MzksIDldLCBbNDAuNzU4ODg1OTk5OTcwMDUsIC03My44NzE2NTYwMDEwNDQ1MSwgNF0sIFs0MC43NTg5ODI5OTk5NjEzMDQsIC03My44NzA3NDcwMDE4NTc5OSwgM10sIFs0MC43NTIyOTM5OTk4Mzc2MywgLTczLjg5ODY5OTAwMDAxMjk3LCAwXSwgWzQwLjc1MjMxNzk5OTgyNDA4LCAtNzMuODk4NDcxMDAwOTU4NDcsIDJdLCBbNDAuNzUyNDU4OTk5OTA3OTQ0LCAtNzMuODk3MTUxMDAwNTkwNTMsIDExXSwgWzQwLjc1MjU1OTk5OTc0MjA1LCAtNzMuODk2MTkyMDAxNjA4MjcsIDJdLCBbNDAuNzUyNjU2OTk5NzU3NDEsIC03My44OTUyNjAwMDM2MDA0NywgMTFdLCBbNDAuNzUyNzU1OTk5OTI3NTksIC03My44OTQzMzAwMDI4NjExNywgNl0sIFs0MC43NTI4NTE5OTk3ODU4NzUsIC03My44OTMzOTgwMDA5NzY1NSwgMTVdLCBbNDAuNzUyOTQ3OTk5NzM5NzMsIC03My44OTI0NzMwMDIwODYwNCwgMTVdLCBbNDAuNzUzMDQ2OTk5ODgyNzUsIC03My44OTE1NDUwMDM1MDExMiwgM10sIFs0MC43NTMxNDQ5OTk4MTU3MjQsIC03My44OTA2MTMwMDEwMzg4MywgOV0sIFs0MC43NTMyNDI5OTk3NTE5NSwgLTczLjg4OTY4NDAwMjM5OTk2LCAxNl0sIFs0MC43NTMzMzk5OTk4MzcwNywgLTczLjg4ODc1NjAwMjQ3Mjk2LCAxNF0sIFs0MC43NTM0Mzc5OTk5OTE5LCAtNzMuODg3ODI0MDAyNTk4NDYsIDE1XSwgWzQwLjc1MzUzNTk5OTgyODYxLCAtNzMuODg2ODk2MDAyNzQyNTMsIDhdLCBbNDAuNzUzNjMzOTk5OTIyOTc1LCAtNzMuODg1OTY1MDAwNzY1OCwgMTJdLCBbNDAuNzUzNzMwOTk5OTY5ODcsIC03My44ODUwMzcwMDA3NTM3NCwgMThdLCBbNDAuNzUzODI4OTk5ODY1MzYsIC03My44ODQxMDYwMDA1MDk5OSwgMTFdLCBbNDAuNzUzOTI1OTk5ODQ1ODksIC03My44ODMxNzcwMDI0NzA0MywgMTBdLCBbNDAuNzU0MDIzOTk5ODA1NDU1LCAtNzMuODgyMjQ2MDAwMzQ3OTIsIDEyXSwgWzQwLjc1NDEyMjk5OTg0MTgyLCAtNzMuODgxMzE1MDAwOTA5NzEsIDEwXSwgWzQwLjc1NDIxOTk5OTk3ODYsIC03My44ODAzODgwMDE0ODcwMywgMTNdLCBbNDAuNzU0MzE3OTk5OTYyNDc0LCAtNzMuODc5NDU2MDAyMTM3NTksIDVdLCBbNDAuNzU0NDE0OTk5OTYxNjksIC03My44Nzg1MjkwMDA4NzY4OCwgMTZdLCBbNDAuNzU0NTEyOTk5OTcwMSwgLTczLjg3NzU5ODAwMzA2MTM0LCAxNF0sIFs0MC43NTQ2MDk5OTk5MjIyNjYsIC03My44NzY2NjgwMDA1NDE5NywgOF0sIFs0MC43NTQ3MDg5OTk4NjIwOSwgLTczLjg3NTczOTAwMjIwNjI2LCAxOF0sIFs0MC43NTQ4MDU5OTk5MDY3OSwgLTczLjg3NDgwOTAwMTQzNDE5LCA4XSwgWzQwLjc1NDkwMzk5OTc3MDM4LCAtNzMuODczODc5MDAzMjY1MzMsIDZdLCBbNDAuNzU1MTEzOTk5OTkxMjksIC03My44NzE4ODYwMDAwMTQ2OCwgM10sIFs0MC43NTUyMDc5OTk5ODQzODUsIC03My44NzA5OTUwMDEwMDE2OSwgOF0sIFs0MC43NTUwMjk5OTk4NzYyNiwgLTczLjg3MjY5MjAwMDQ2ODE4LCAzN10sIFs0MC43NTIzNjQ5OTk5MzEzMSwgLTczLjg5NzY5OTAwMzM3NjUyLCAwXSwgWzQwLjc1Mzk2MDk5OTg4MTI0NCwgLTczLjg3MTY4NTAwMjM2MjM0LCAwXSwgWzQwLjc1Mzg2MTk5OTg0MDg2LCAtNzMuODcyMDcwMDAyNjQ0NDYsIDBdLCBbNDAuNzUzNjcxOTk5OTU0NjU1LCAtNzMuODczNjU1MDAzNjA2NDMsIDFdLCBbNDAuNzUzOTg1OTk5OTg1MzA0LCAtNzMuODcyMTQyMDAyNjA3OSwgMl0sIFs0MC43NTAzMTkwMDAwMDE0NCwgLTczLjg5ODY1OTAwMzU0MzM5LCAyXSwgWzQwLjc1MDQxNjk5OTkxNTIyNCwgLTczLjg5NzcyODAwMjYyODI0LCAxMV0sIFs0MC43NTA1NDE5OTk4MjE4MDYsIC03My44OTY1NDAwMDA4MDAxNiwgNV0sIFs0MC43NTA2MTk5OTk5NTU4NDUsIC03My44OTU3OTkwMDIxNjIzMiwgMF0sIFs0MC43NTA3MTY5OTk5MTkyMiwgLTczLjg5NDg5OTAwMTAxNTE2LCA3XSwgWzQwLjc1MDgxMDk5OTk0MzY4LCAtNzMuODkzOTc2MDAwNTQzMjYsIDRdLCBbNDAuNzUwOTA3OTk5NzQ1MDksIC03My44OTMwNDgwMDExMDA0MiwgOV0sIFs0MC43NTEwMDM5OTk5NTYyLCAtNzMuODkyMTIxMDAwMzE0NjUsIDNdLCBbNDAuNzUxMTAwOTk5OTc0NTc1LCAtNzMuODkxMTg5MDAwMDQ5NzIsIDRdLCBbNDAuNzUxMTk5OTk5Nzg5MjcsIC03My44OTAyNjIwMDMzNzA1LCA4XSwgWzQwLjc1MTI5Njk5OTg2MjU5NiwgLTczLjg4OTMzMjAwMDc1NTUyLCA4XSwgWzQwLjc1MTM5NTk5OTc5NzU0LCAtNzMuODg4NDAxMDAzMTM4MzYsIDZdLCBbNDAuNzUxNDk0OTk5ODkxNTcsIC03My44ODc0NzAwMDI3NDExNCwgNV0sIFs0MC43NTE1OTE5OTk4NzEwNCwgLTczLjg4NjU0MzAwMjAxNzU5LCAxMl0sIFs0MC43NTE2ODk5OTk3NTQ1NiwgLTczLjg4NTYxMzAwMTE4NDM4LCAxMF0sIFs0MC43NTE3ODc5OTk5OTQzODQsIC03My44ODQ2ODQwMDA5NzUzLCA4XSwgWzQwLjc1MTg4NDk5OTg2OTYzLCAtNzMuODgzNzUzMDAwMjMzMjEsIDEwXSwgWzQwLjc1MTk4MTk5OTgyNjgzLCAtNzMuODgyODIzMDAwMTQzNDYsIDNdLCBbNDAuNzUyMDgwOTk5OTg5MTMsIC03My44ODE4OTQwMDA3NzM0NywgOF0sIFs0MC43NTIxNzg5OTk3Mzg1OCwgLTczLjg4MDk2MzAwMDg3NTMxLCA5XSwgWzQwLjc1MjI4NDk5OTkzMzA1LCAtNzMuODgwMDM0MDAxNDA3MjEsIDldLCBbNDAuNzUyMzcyOTk5NzU2MSwgLTczLjg3OTEwNDAwMjk4ODkxLCA2XSwgWzQwLjc1MjQ3MDk5OTk3NDM2LCAtNzMuODc4MTc0MDAxODU3NSwgOV0sIFs0MC43NTI1Njc5OTk4MTUyMiwgLTczLjg3NzI0NzAwMjc1ODM1LCA3XSwgWzQwLjc1MjY2NTk5OTkxMjA0LCAtNzMuODc2MzE1MDAwMTk4NjIsIDldLCBbNDAuNzUyNzYyOTk5OTI2MDksIC03My44NzUzODYwMDMzMTA1NywgMTNdLCBbNDAuNzUyODU4OTk5OTU5NjgsIC03My44NzQ0NTUwMDI0MTY0MSwgMTBdLCBbNDAuNzUyOTYxOTk5ODE2ODksIC03My44NzM1MjgwMDI3MTExNywgOF0sIFs0MC43NTMxNDE5OTk4Mjk4OCwgLTczLjg3MjYxNDAwMTY2MjQ3LCAxNV0sIFs0MC43NTM1NjM5OTk4MjE3LCAtNzMuODcwNjk1MDAyNTE1MiwgM10sIFs0MC43NTMzMjU5OTk5ODAzMDUsIC03My44NzE3OTIwMDA5MzUwNywgMjBdLCBbNDAuNzUwNDE3OTk5OTkxNjgsIC03My44OTcyODQwMDI4OTA2LCAwXSwgWzQwLjc0OTQ0ODk5OTc4Mzc0NSwgLTczLjg5NTYzMjAwMjIzMTExLCAwXSwgWzQwLjc0OTQzMTk5OTk3MzcxNiwgLTczLjg5NTg3NTAwMjc1NjU4LCAwXSwgWzQwLjc0OTUxNTk5OTczNDYyNiwgLTczLjg5NDY5MzAwMjM5MzY3LCAxXSwgWzQwLjc0ODQ5Mzk5OTkxNzc4LCAtNzMuODk3OTE3MDAyODQ1MywgMl0sIFs0MC43NDg0MDg5OTk3OTQ3MiwgLTczLjg5NzYzMjAwMTcyNDU5LCAwXSwgWzQwLjc0ODQ0MTk5OTkzODgzLCAtNzMuODk2NzM2MDAxMjc3MzksIDBdLCBbNDAuNzQ4NTkyOTk5ODM4MDQsIC03My44OTUzNTEwMDA5MzgzOSwgMF0sIFs0MC43NDg2Nzk5OTk5MzA0NzQsIC03My44OTQ1NDAwMDI4MTk1OCwgNF0sIFs0MC43NDg3NzA5OTk5MDc5MjYsIC03My44OTM2MDcwMDE1NjYxNSwgM10sIFs0MC43NDg3MzM5OTk4MDQwNSwgLTczLjg5Mzk4NTAwMTI1Nzk5LCAwXSwgWzQwLjc0ODg2Mjk5OTc2NDM0LCAtNzMuODkyNzA4MDAxMDgwNjUsIDIwXSwgWzQwLjc0ODk2NDk5OTc0MzM4LCAtNzMuODkxNzQ4MDAyNDEzMTQsIDhdLCBbNDAuNzQ4OTU5OTk5Nzk0NDIsIC03My44OTE3OTkwMDM1ODYwNiwgMF0sIFs0MC43NDkwNTY5OTk5ODAyNiwgLTczLjg5MDg2NTAwMzEyMzYxLCAwXSwgWzQwLjc0OTA2MDk5OTc0ODgxNCwgLTczLjg5MDgyNDAwMDY4MTc3LCAxMl0sIFs0MC43NDkxNTM5OTk4NjI3OCwgLTczLjg4OTkzMjAwMzI2MzUyLCAwXSwgWzQwLjc0OTI0NDk5OTc3Mjk0LCAtNzMuODg5MDIwMDAxMzE4MTIsIDBdLCBbNDAuNzQ5MzU1OTk5ODU3MywgLTczLjg4ODAyOTAwMjc5ODE2LCA3XSwgWzQwLjc0OTQ1Mzk5OTc3OTM4NCwgLTczLjg4NzA5ODAwMzE3NDYzLCA1XSwgWzQwLjc0OTU1MTk5OTc1MDM3LCAtNzMuODg2MTY4MDAwNTMwMjIsIDZdLCBbNDAuNzQ5NjUwOTk5Nzg2ODYsIC03My44ODUyNDEwMDM0MzkyNSwgMTVdLCBbNDAuNzQ5NzQ0OTk5OTQwMTUsIC03My44ODQzMTEwMDIyMzMyNiwgMjBdLCBbNDAuNzQ5ODQ0OTk5ODMzMTY1LCAtNzMuODgzMzgwMDAyNTg3NzQsIDIwXSwgWzQwLjc0OTkzOTk5OTg5NDQ5LCAtNzMuODgyNDUxMDAxMjEyMjIsIDEwXSwgWzQwLjc1MDAzODk5OTkzOTk2LCAtNzMuODgxNTIwMDAxNDEwNCwgN10sIFs0MC43NTAxMzc5OTk5MDIwOSwgLTczLjg4MDU5MzAwMTM5NzQxLCAxMF0sIFs0MC43NTAyMzY5OTk3NTYyMywgLTczLjg3OTY2MjAwMzI1OTE2LCA5XSwgWzQwLjc1MDMzMzk5OTg5OTAzNCwgLTczLjg3ODczMjAwMjExNDI1LCAyXSwgWzQwLjc1MDQzMTk5OTg1NjgxNSwgLTczLjg3NzgwMjAwMDAyMjUxLCAxNl0sIFs0MC43NTA1Mjk5OTk4ODA0ODQsIC03My44NzY4NzYwMDEzODI3OCwgMTBdLCBbNDAuNzUwNjI2OTk5NzkwMjQsIC03My44NzU5NDUwMDMxMzAxLCA5XSwgWzQwLjc1MDcyNDk5OTc1NjQzLCAtNzMuODc1MDE1MDAwMDI0NzUsIDldLCBbNDAuNzUwODIyOTk5OTA1NTY2LCAtNzMuODc0MDg1MDAxMzg3MTIsIDRdLCBbNDAuNzUwOTE0OTk5OTUxMjM1LCAtNzMuODczMTYwMDAyOTY0MzcsIDExXSwgWzQwLjc1MTA0NDk5OTkzNDA0NSwgLTczLjg3MjIxMDAwMDIxMzY3LCAwXSwgWzQwLjc1MTI2MDk5OTc4MDE2NSwgLTczLjg3MTY2MzAwMDMwMzQxLCAzXSwgWzQwLjc0ODU0Njk5OTk5MDExLCAtNzMuODk1ODQwMDAyODQ4NywgM10sIFs0MC43NTE0NDM5OTk5MzM1ODUsIC03My44NzA4OTIwMDI2MTQ4MiwgMF0sIFs0MC43NDg1MjI5OTk5NDc2MywgLTczLjg5NjA1NzAwMDMwMDMyLCAwXSwgWzQwLjc0ODQ5Njk5OTgzMTI5NiwgLTczLjg5NjMwMTAwMDIzNjE5LCAwXSwgWzQwLjc0NzEzNDk5OTc1ODYxLCAtNzMuODkyNDA5MDAyNTMwMzYsIDE1XSwgWzQwLjc0NzIzNzk5OTk2ODQxLCAtNzMuODkxNTA1MDAyNDQ3NzYsIDRdLCBbNDAuNzQ3MzQyOTk5OTAwODQsIC03My44OTA1NzYwMDAyMTc3MywgMV0sIFs0MC43NDc0NDU5OTk5MTkwOTQsIC03My44ODk2NTEwMDA3NjY2OCwgM10sIFs0MC43NDc1NDI5OTk3ODE1NCwgLTczLjg4ODc1NjAwMzEwMjEyLCAwXSwgWzQwLjc0NzU2MDk5OTc3NDA5NSwgLTczLjg5ODMzNjAwMDc4NjczLCAxXSwgWzQwLjc0NzU4OTk5OTgyOTA3NCwgLTczLjg5NzQ4MzAwMTgxNjI1LCAwXSwgWzQwLjc0NzYyMjk5OTk4NDQ4LCAtNzMuODk2NTc3MDAwODUyMTksIDJdLCBbNDAuNzQ3NTc0OTk5ODI0MDc0LCAtNzMuODk1ODI5MDAyODQ3NzIsIDBdLCBbNDAuNzQ3MDE0OTk5OTY2NCwgLTczLjg5NTUzMDAwMzA5OTg5LCAwXSwgWzQwLjc0NzQ4MDk5OTgzMjg5NSwgLTczLjg3MjA2ODAwMDQzNzQ0LCAwXSwgWzQwLjc0NzY1NDk5OTg5MDkzLCAtNzMuODcwNzA5MDAxNTAyMiwgMF0sIFs0MC43NDgxNTY5OTk5MjkxMiwgLTczLjg3MjIyMDAwMDgzMzY4LCAxXSwgWzQwLjc0ODMwNzk5OTkwNzQwNCwgLTczLjg3MTAzMDAwMjU4NDU2LCAyXSwgWzQwLjc0ODE1NDk5OTg1NzIzLCAtNzMuODcwOTU5MDAxNzQ2NDYsIDBdLCBbNDAuNzQ5Njc4OTk5OTE1MTMsIC03My44OTg0NzcwMDA3NTc5NiwgMF0sIFs0MC43NDkyOTk5OTk5NTM3MywgLTczLjg5NzU3NzAwMTAwMTg4LCAxM10sIFs0MC43NTk4NjQ5OTk4MTk5MDQsIC03My44OTg0ODUwMDMyMzY3MSwgMF0sIFs0MC43NTQ2OTA5OTk5NDI1NCwgLTczLjg5ODY0MTAwMDU4NzI5LCAwXSwgWzQwLjc0OTc2NDk5OTg2MzUxLCAtNzMuODk2MDk5MDAwMTg4MjksIDBdLCBbNDAuNzQ5MDA0OTk5OTgyMzI2LCAtNzMuODk2ODk4MDAwMzc5ODQsIDBdLCBbNDAuNzQ5MzQ3OTk5OTE5MjYsIC03My44OTY4NzYwMDI0NTAxOCwgMF0sIFs0MC43NDg4MzI5OTk3Mzc2MTYsIC03My44OTU1MDEwMDA2MTQ3MywgMF0sIFs0MC43NDgzMDc5OTk4MTc5NiwgLTczLjg5NTI1NTAwMzQ2MjE3LCAwXSwgWzQwLjc0NzY5MTk5OTc4MzIyLCAtNzMuODkzNzk3MDAwOTY5MTksIDIxXSwgWzQwLjc0NzAzODk5OTkyMzQyNiwgLTczLjg4OTU3MTAwMjkxMDg4LCAxM10sIFs0MC43NDcxMzM5OTk4OTcxNSwgLTczLjg4ODY3ODAwMjUwMTA1LCAxMl0sIFs0MC43NDcxNjY5OTk3OTI4OTYsIC03My44ODc4MDAwMDE5NTIyNywgMF0sIFs0MC43NDcyODcwMDAwMDI2NCwgLTczLjg4NzYwNjAwMjk3MTY0LCAwXSwgWzQwLjc0NzM0MDk5OTk0MDA4NiwgLTczLjg4NjcxNzAwMzU2ODczLCAxN10sIFs0MC43NDc0Mzk5OTk3Njk4NywgLTczLjg4NTc4NzAwMjg3ODUsIDldLCBbNDAuNzQ3NTM0OTk5Nzc0NTksIC03My44ODQ4NTUwMDMzMTM3MywgMTRdLCBbNDAuNzQ3NjI5OTk5ODQ3MjYsIC03My44ODM5MzYwMDA4MTY4MiwgMjJdLCBbNDAuNzQ3MTkxOTk5Nzc3NjcsIC03My44ODI4OTMwMDIxMzE1MiwgMV0sIFs0MC43NDc3MzM5OTk4NzU0MiwgLTczLjg4Mjk5OTAwMzI1NzU1LCAxNF0sIFs0MC43NDc4Mjk5OTk5OTcxNSwgLTczLjg4MjA3MTAwMzQ0Mjc1LCA4XSwgWzQwLjc0NzkyNjk5OTgxMTEwNiwgLTczLjg4MTEzNzAwMDkxNTczLCAxN10sIFs0MC43NDgwMjQ5OTk3NTM2MywgLTczLjg4MDIwNjAwMDE5OTg1LCAxNF0sIFs0MC43NDgxMjM5OTk4OTc1MywgLTczLjg3OTI3ODAwMTI2NjM0LCA2XSwgWzQwLjc0ODIxNTk5OTg4NDM0NCwgLTczLjg3ODQwNjAwMzM4ODczLCAwXSwgWzQwLjc0ODMxODk5OTkwNTQ3LCAtNzMuODc3NDE2MDAyMzI4MSwgOV0sIFs0MC43NDg0MTU5OTk5MDk2MDQsIC03My44NzY0ODAwMDExMDY0NywgMTFdLCBbNDAuNzQ4NTIwOTk5OTY2OTE0LCAtNzMuODc1NDg5MDAxNDM4NjgsIDBdLCBbNDAuNzQ5Mzk5OTk5NzQ0MjcsIC03My44NzU3MjQwMDE5OTI3NSwgMF0sIFs0MC43NTAwOTc5OTk5OTUzNzYsIC03My44NzQ5MDIwMDAzNTgwMywgM10sIFs0MC43NDg2MTM5OTk4OTMxMjQsIC03My44NzQ2MjkwMDIyNDAwNiwgOF0sIFs0MC43NTA0MTI5OTk4NjMyMTUsIC03My44NzQwMTIwMDA5OTQ0MSwgMl0sIFs0MC43NDg3MTY5OTk3NzU3MywgLTczLjg3MzcwMTAwMDgwMjU0LCAxMl0sIFs0MC43NDc4NzE5OTk4MjkxMTUsIC03My44NzIxNTUwMDM1NzEzMSwgMF0sIFs0MC43NDg4NTE5OTk3NTUxMDQsIC03My44NzIzNzMwMDAxMTcxNCwgMTJdLCBbNDAuNzUwNzM0OTk5OTEyMDc2LCAtNzMuODczMTE5MDAyMjc2MzQsIDFdLCBbNDAuNzQ4ODEyOTk5OTM5OTYsIC03My44NzI3NzQwMDIzNTEyNiwgMF0sIFs0MC43NTg5OTg5OTk4OTQsIC03My44NzQ1ODQwMDAxNzI5MiwgOF0sIFs0MC43NDg5NTY5OTk5NTE5MzYsIC03My44NzEzNTYwMDE4NTgyMywgMF0sIFs0MC43NDg5MDU5OTk5NTIwMTUsIC03My44NzE4NDEwMDE0MzcyOSwgMF0sIFs0MC43NTkzNTc5OTk4MzMyNSwgLTczLjg3MzU2NjAwMDE4NjAzLCAwXSwgWzQwLjc1OTY1Nzk5OTczMTI2LCAtNzMuODcyNzEwMDAwMTMwMDMsIDBdLCBbNDAuNzU5OTU1OTk5ODIxODksIC03My44NzE4OTcwMDIxOTAyMiwgMF0sIFs0MC43NDg0Njc5OTk5MDg3NTUsIC03My44NzM1MTMwMDMxMjIwNCwgMl0sIFs0MC43NDg2ODU5OTk4MjI5MDQsIC03My44NzM5ODMwMDE3OTQ0LCAyXSwgWzQwLjc0NzI2MTk5OTg2NTk4NCwgLTczLjg3NDQ0MjAwMTExOTAyLCAzXSwgWzQwLjc0ODE0MDk5OTkyMzQ4NiwgLTczLjg3NjQxODAwMjA0MTE4LCAzXSwgWzQwLjc0ODM2ODk5OTc1Njk2LCAtNzMuODc2OTI1MDAwNDY1LCA2XSwgWzQwLjc0Nzc3Nzk5OTc5NDUyLCAtNzMuODgyNTY5MDAyNDk4NjQsIDRdLCBbNDAuNzQ3MDM5OTk5OTcxOTgsIC03My44ODI5ODkwMDE3MDA3NSwgN10sIFs0MC43NDc4NjQ5OTk3NDQwNzQsIC03My44NzM5NzgwMDA3NjY0MywgNV0sIFs0MC43NDc1MTA5OTk5MzYzOSwgLTczLjg3Njc4OTAwMjIwNjc2LCAyXSwgWzQwLjc0NzAzMzk5OTc1MDIxLCAtNzMuODc5MzYzMDAxNTI5MiwgM10sIFs0MC43NDc5MDg5OTk4NTcwMSwgLTczLjg4MTMwNDAwMjA2OTA5LCAwXSwgWzQwLjc0OTA2Mzk5OTc4NywgLTczLjg3MDM3OTAwMzQ5MTY5LCAxMF0sIFs0MC43NDc2Mzg5OTk4MTI4NjQsIC03My44Nzg4OTIwMDI0ODExNSwgM10sIFs0MC43NDg3NTc5OTk5MDg2NzYsIC03My44NzMzMDMwMDIyNjcxNiwgMV0sIFs0MC43NDg3MDA5OTk5NDc4LCAtNzMuODk2MTY4MDAxNjc1MjIsIDJdLCBbNDAuNzQ4ODM0OTk5NzQ5MTY0LCAtNzMuODk2NDU0MDAxNTMyMzksIDBdLCBbNDAuNzQ4NDM4OTk5OTI2NzEsIC03My44NzYyNTIwMDE4ODQ3MSwgOV0sIFs0MC43NDgwNjE5OTk4ODIyNCwgLTczLjg3OTgzOTAwMDgxNjg2LCA0XSwgWzQwLjc1MDE1Nzk5OTk5MDg2LCAtNzMuODk3MTQ4MDAyNDIzNCwgMF0sIFs0MC43NDc1OTE5OTk3NDUzMiwgLTczLjg5NTQ0MTAwMTgyODcxLCAwXSwgWzQwLjc1OTg1Nzk5OTg1MzE3LCAtNzMuODk4NjgyMDAyMjA0MjQsIDBdXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtaW5PcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgbWF4Wm9vbTogMTgsCiAgICAgICAgICAgICAgICAgICAgbWF4OiAxLjAsCiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiAxMiwKICAgICAgICAgICAgICAgICAgICBibHVyOiAxNSwKICAgICAgICAgICAgICAgICAgICBncmFkaWVudDogbnVsbAogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9hYWMzZTE1ZWFkY2Q0OTY3OTRjNjE1M2IzZDUwNTgwNCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDI4MDk5OTkwNzkwNSwgLTczLjg5NzUwMTAwMjA0Mjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTU3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wY2E5ODRhMDJmMDc0MzEzODFjYjNmYjQ2MTJhNTY0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhZjU4YTkxNWFkYTQ4Yjg4N2M1M2RlYjY5ZTdkNTUzID0gJCgnPGRpdiBpZD0iaHRtbF9iYWY1OGE5MTVhZGE0OGI4ODdjNTNkZWI2OWU3ZDU1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDkyOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wY2E5ODRhMDJmMDc0MzEzODFjYjNmYjQ2MTJhNTY0Ni5zZXRDb250ZW50KGh0bWxfYmFmNThhOTE1YWRhNDhiODg3YzUzZGViNjllN2Q1NTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hYWMzZTE1ZWFkY2Q0OTY3OTRjNjE1M2IzZDUwNTgwNC5iaW5kUG9wdXAocG9wdXBfMGNhOTg0YTAyZjA3NDMxMzgxY2IzZmI0NjEyYTU2NDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzJlZWIxYTliNWNiMDQ0M2I5MTZjNWJlYjZkZTdmYjU1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU0NjgwOTk5ODM5MjQ1LCAtNzMuODkzNzM0MDAxNjYzODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1NS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGJjNWJiYjg3NGQxNDI3NDhiYTFkZGQ5ZWY4ZTJkYjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NTcwNzFkODk1OTI0YzA5YmVhODE1MGVjYzAyMWNlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDU3MDcxZDg5NTkyNGMwOWJlYTgxNTBlY2MwMjFjZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5MzMuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGJjNWJiYjg3NGQxNDI3NDhiYTFkZGQ5ZWY4ZTJkYjQuc2V0Q29udGVudChodG1sXzQ1NzA3MWQ4OTU5MjRjMDliZWE4MTUwZWNjMDIxY2VjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMmVlYjFhOWI1Y2IwNDQzYjkxNmM1YmViNmRlN2ZiNTUuYmluZFBvcHVwKHBvcHVwX2RiYzViYmI4NzRkMTQyNzQ4YmExZGRkOWVmOGUyZGI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9iMWU0ZmYwNmRhNDg0NTBkOGNjNTJhMmMxMGRjNTRhNiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NDc3Nzk5OTgzNjMzNSwgLTczLjg5MjgwMzAwMjY2Mzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2MjQ5M2RlZjU2YjQxOTdiZjM2MmEwYTc4Y2Y5ZTVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ2MDRhZmM5NTgyNDYxOTg4MDM3YzY4ZDhhMTU2OWMgPSAkKCc8ZGl2IGlkPSJodG1sXzM0NjA0YWZjOTU4MjQ2MTk4ODAzN2M2OGQ4YTE1NjljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2MjQ5M2RlZjU2YjQxOTdiZjM2MmEwYTc4Y2Y5ZTVlLnNldENvbnRlbnQoaHRtbF8zNDYwNGFmYzk1ODI0NjE5ODgwMzdjNjhkOGExNTY5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IxZTRmZjA2ZGE0ODQ1MGQ4Y2M1MmEyYzEwZGM1NGE2LmJpbmRQb3B1cChwb3B1cF8xNjI0OTNkZWY1NmI0MTk3YmYzNjJhMGE3OGNmOWU1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzdmMmQ0ZTlkMDgzNDEwN2EyNGEzZWNiZWY5ZTU1OTYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ4NzI5OTk4MzU1NCwgLTczLjg5MTg4MTAwMjQ4NDgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzOGQ3OWM3OWM1YzQyNDBiOGMxNGY0Y2VmMjM5MzI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdlZmQyMDg4NmQyNDk1MDg4NDM1ZDdiMDlmMDlmMTggPSAkKCc8ZGl2IGlkPSJodG1sXzE3ZWZkMjA4ODZkMjQ5NTA4ODQzNWQ3YjA5ZjA5ZjE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzOGQ3OWM3OWM1YzQyNDBiOGMxNGY0Y2VmMjM5MzI0LnNldENvbnRlbnQoaHRtbF8xN2VmZDIwODg2ZDI0OTUwODg0MzVkN2IwOWYwOWYxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2M3ZjJkNGU5ZDA4MzQxMDdhMjRhM2VjYmVmOWU1NTk2LmJpbmRQb3B1cChwb3B1cF9mMzhkNzljNzljNWM0MjQwYjhjMTRmNGNlZjIzOTMyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMWEyNjVlYTM2MTcwNGQ1YWEwODdiYzljZDU4YTg4OTIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ5NzM5OTk5MDMyNiwgLTczLjg5MDk0ODAwMjczMzc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjMThjOTI2ODhhNTRkNzNhZWRjODIyNzgxMGZjMTgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjA3N2RjNWY0ZWMyNDM0OWI2ZjJjZjlhNTJiNTY2MzggPSAkKCc8ZGl2IGlkPSJodG1sX2YwNzdkYzVmNGVjMjQzNDliNmYyY2Y5YTUyYjU2NjM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjMThjOTI2ODhhNTRkNzNhZWRjODIyNzgxMGZjMTgwLnNldENvbnRlbnQoaHRtbF9mMDc3ZGM1ZjRlYzI0MzQ5YjZmMmNmOWE1MmI1NjYzOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzFhMjY1ZWEzNjE3MDRkNWFhMDg3YmM5Y2Q1OGE4ODkyLmJpbmRQb3B1cChwb3B1cF9lYzE4YzkyNjg4YTU0ZDczYWVkYzgyMjc4MTBmYzE4MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDg1Y2M1MDc2ZmI4NGEzOGFhNGYzMTc2ODkwNzE3ZjAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUwNzA5OTk5MTc0MTUsIC03My44OTAwMTMwMDM1MDgzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODY0NDVlOTFlMWU0NTg5OTMwNTAwMTViMjJhNjFhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U0ZDQ3ZDk1YWQ2ZTRhNmZhMTViZWIyNjAwMTc4ZDFiID0gJCgnPGRpdiBpZD0iaHRtbF9lNGQ0N2Q5NWFkNmU0YTZmYTE1YmViMjYwMDE3OGQxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDkzNy4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODY0NDVlOTFlMWU0NTg5OTMwNTAwMTViMjJhNjFhMS5zZXRDb250ZW50KGh0bWxfZTRkNDdkOTVhZDZlNGE2ZmExNWJlYjI2MDAxNzhkMWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wODVjYzUwNzZmYjg0YTM4YWE0ZjMxNzY4OTA3MTdmMC5iaW5kUG9wdXAocG9wdXBfZDg2NDQ1ZTkxZTFlNDU4OTkzMDUwMDE1YjIyYTYxYTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzcyY2Y2MTk2NGZjZTRkZmY5YTczMWI0ZjA1ZjA5M2E4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU1MTY5OTk5ODczNjcsIC03My44ODkwODgwMDM1ODk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTE5OWQ3NWFkMDI0MTk0YmYyNWE4YzU0YTZkZTdiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3YjhjODUzNjIzMjRkOWVhYTMzY2UzNDM4YWU1ZTg1ID0gJCgnPGRpdiBpZD0iaHRtbF81N2I4Yzg1MzYyMzI0ZDllYWEzM2NlMzQzOGFlNWU4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDkzOC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTE5OWQ3NWFkMDI0MTk0YmYyNWE4YzU0YTZkZTdiYi5zZXRDb250ZW50KGh0bWxfNTdiOGM4NTM2MjMyNGQ5ZWFhMzNjZTM0MzhhZTVlODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83MmNmNjE5NjRmY2U0ZGZmOWE3MzFiNGYwNWYwOTNhOC5iaW5kUG9wdXAocG9wdXBfMmExOTlkNzVhZDAyNDE5NGJmMjVhOGM1NGE2ZGU3YmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzFiYWYwYWM5NzE5MjQ5ZDU4YWY2MTA1NmUzYWUzYWU3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU1MjY1OTk5NzQzMywgLTczLjg4ODE1NzAwMzQzNjA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1OWQyNmZlOTIzNTQwZjI5NDQwZTk3ZmI2NDY0YmZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2U1NDE4YTQ2ZGM2NGYzZGE4OWU3N2I4NTc2ZmZkYTMgPSAkKCc8ZGl2IGlkPSJodG1sXzNlNTQxOGE0NmRjNjRmM2RhODllNzdiODU3NmZmZGEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTM5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1OWQyNmZlOTIzNTQwZjI5NDQwZTk3ZmI2NDY0YmZjLnNldENvbnRlbnQoaHRtbF8zZTU0MThhNDZkYzY0ZjNkYTg5ZTc3Yjg1NzZmZmRhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzFiYWYwYWM5NzE5MjQ5ZDU4YWY2MTA1NmUzYWUzYWU3LmJpbmRQb3B1cChwb3B1cF83NTlkMjZmZTkyMzU0MGYyOTQ0MGU5N2ZiNjQ2NGJmYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTExMmVjMjBkNGI0NDQ4OThiNWFkNGExYmQzYmMyMTUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTUzNjI5OTk5OTY3MiwgLTczLjg4NzIyODAwMjEzODQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E2ZmI0OTQ0MmU0YzQ0NGRhMDI4OGU5Y2FlZGUxY2ViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGNkZGZjN2I5MTU5NDIxMmI1YzQyYmJmOGY2OTU2ZWYgPSAkKCc8ZGl2IGlkPSJodG1sXzhjZGRmYzdiOTE1OTQyMTJiNWM0MmJiZjhmNjk1NmVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2ZmI0OTQ0MmU0YzQ0NGRhMDI4OGU5Y2FlZGUxY2ViLnNldENvbnRlbnQoaHRtbF84Y2RkZmM3YjkxNTk0MjEyYjVjNDJiYmY4ZjY5NTZlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzUxMTJlYzIwZDRiNDQ0ODk4YjVhZDRhMWJkM2JjMjE1LmJpbmRQb3B1cChwb3B1cF9hNmZiNDk0NDJlNGM0NDRkYTAyODhlOWNhZWRlMWNlYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDJiM2UyM2Q3ZjI3NDBjMGEyYWI0MWY2NTI3NzM3NGUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU0NTk5OTk3MzMxNSwgLTczLjg4NjI5ODAwMTkxMzEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyZjhjZTRjMGMzYzRmODFhNjAwMmE2NjBmNjFkNTFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTRmYjIyNGM4MDFjNDE0YThlYTIxZWM0NThlNDBjNzYgPSAkKCc8ZGl2IGlkPSJodG1sXzU0ZmIyMjRjODAxYzQxNGE4ZWEyMWVjNDU4ZTQwYzc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QyZjhjZTRjMGMzYzRmODFhNjAwMmE2NjBmNjFkNTFhLnNldENvbnRlbnQoaHRtbF81NGZiMjI0YzgwMWM0MTRhOGVhMjFlYzQ1OGU0MGM3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QyYjNlMjNkN2YyNzQwYzBhMmFiNDFmNjUyNzczNzRlLmJpbmRQb3B1cChwb3B1cF9kMmY4Y2U0YzBjM2M0ZjgxYTYwMDJhNjYwZjYxZDUxYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMTA3YWQ5YjA0NmQwNDBkZGE4N2JjNzMxYzZiMThlMjggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU1NTY5OTk3NTE3NywgLTczLjg4NTM2NzAwMjc1NDE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0ZjI0MTUzMjBlMTRhMzJiZjVmOWZmNjczNDcxYzZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTgzNTAxOTI5MTU0NGFlOGI5YTEwOTM4N2Q2MWFlMDMgPSAkKCc8ZGl2IGlkPSJodG1sXzk4MzUwMTkyOTE1NDRhZThiOWExMDkzODdkNjFhZTAzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0ZjI0MTUzMjBlMTRhMzJiZjVmOWZmNjczNDcxYzZjLnNldENvbnRlbnQoaHRtbF85ODM1MDE5MjkxNTQ0YWU4YjlhMTA5Mzg3ZDYxYWUwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzEwN2FkOWIwNDZkMDQwZGRhODdiYzczMWM2YjE4ZTI4LmJpbmRQb3B1cChwb3B1cF84NGYyNDE1MzIwZTE0YTMyYmY1ZjlmZjY3MzQ3MWM2YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODBmNmZiZGMxYjkzNDM5MWFiNzMwYzI4OGNhNjMyNmEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU2NTY5OTk5MzExOSwgLTczLjg4NDQzOTAwMjM1MzA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhOGY5YzBkYjRkMDQwMGJhNDhhMTc2ZDQ4ZGJhZDY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRmNzg3ODBmNzY4NGFkYTlkNjQwMzJlMDZmNTNlYzUgPSAkKCc8ZGl2IGlkPSJodG1sX2E0Zjc4NzgwZjc2ODRhZGE5ZDY0MDMyZTA2ZjUzZWM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhOGY5YzBkYjRkMDQwMGJhNDhhMTc2ZDQ4ZGJhZDY5LnNldENvbnRlbnQoaHRtbF9hNGY3ODc4MGY3Njg0YWRhOWQ2NDAzMmUwNmY1M2VjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzgwZjZmYmRjMWI5MzQzOTFhYjczMGMyODhjYTYzMjZhLmJpbmRQb3B1cChwb3B1cF85YThmOWMwZGI0ZDA0MDBiYTQ4YTE3NmQ0OGRiYWQ2OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZWQ4NWJhYTg5YmU1NDVhNDliYjU4ODhhOTlkNTA3ZWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU3NTQ5OTk3NDgxNCwgLTczLjg4MzUwNzAwMzM1Mzg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwODlkZTVkMjk3YjRjNzFiMTU2YjE5MWExNzk1MjJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjUyNmUyODk4N2RkNGViMmJiNWJjMmJhYzhlNTc0ZGUgPSAkKCc8ZGl2IGlkPSJodG1sX2I1MjZlMjg5ODdkZDRlYjJiYjViYzJiYWM4ZTU3NGRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQ0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwODlkZTVkMjk3YjRjNzFiMTU2YjE5MWExNzk1MjJlLnNldENvbnRlbnQoaHRtbF9iNTI2ZTI4OTg3ZGQ0ZWIyYmI1YmMyYmFjOGU1NzRkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2VkODViYWE4OWJlNTQ1YTQ5YmI1ODg4YTk5ZDUwN2VjLmJpbmRQb3B1cChwb3B1cF83MDg5ZGU1ZDI5N2I0YzcxYjE1NmIxOTFhMTc5NTIyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTc1OTczNGYyMDQ1NGFkYTk2MTdhOTE1M2M1NDUzYjYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU4NTM5OTk4NTYwMywgLTczLjg4MjU3OTAwMjc0ODI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzYzc1MDkyMmIyYTQyMTc5ZmIyYThiMjFkNTNlZmJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RlMjZjMjQzNzc1NDE4OGE2ZTRhYmFlNDM1ZTk0YzQgPSAkKCc8ZGl2IGlkPSJodG1sX2NkZTI2YzI0Mzc3NTQxODhhNmU0YWJhZTQzNWU5NGM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQ1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzYzc1MDkyMmIyYTQyMTc5ZmIyYThiMjFkNTNlZmJiLnNldENvbnRlbnQoaHRtbF9jZGUyNmMyNDM3NzU0MTg4YTZlNGFiYWU0MzVlOTRjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzU3NTk3MzRmMjA0NTRhZGE5NjE3YTkxNTNjNTQ1M2I2LmJpbmRQb3B1cChwb3B1cF8zM2M3NTA5MjJiMmE0MjE3OWZiMmE4YjIxZDUzZWZiYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNWYxZDBiOGI0MGYzNGQxYWIyMzdjZGFmOTY1NGIyOTUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTU5NTE5OTk5MjUxMjQsIC03My44ODE2NDgwMDE2NjYxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDg1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMWYwNTg4YWQ2NTY0ZDAzYTEyYjdlZmRjOTllODRkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1NTQ3ZDYyNjI0NTRiYzViM2QxZTM1YjQyYTkwNzgzID0gJCgnPGRpdiBpZD0iaHRtbF8yNTU0N2Q2MjYyNDU0YmM1YjNkMWUzNWI0MmE5MDc4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk0Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMWYwNTg4YWQ2NTY0ZDAzYTEyYjdlZmRjOTllODRkMC5zZXRDb250ZW50KGh0bWxfMjU1NDdkNjI2MjQ1NGJjNWIzZDFlMzViNDJhOTA3ODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV81ZjFkMGI4YjQwZjM0ZDFhYjIzN2NkYWY5NjU0YjI5NS5iaW5kUG9wdXAocG9wdXBfZjFmMDU4OGFkNjU2NGQwM2ExMmI3ZWZkYzk5ZTg0ZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNjOGEwNGQ0NGIzODRlZGFiZjMyZjJjODI0NjIyYTViID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2MDQ4OTk5ODQ4MDU1LCAtNzMuODgwNzE5MDAyODg5MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3Ni4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGEwNGRhZjkyNTgwNGZmMTk5ZmMzN2ZjYWJiNzI4NDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOGVjMjI4YWE4OTg0NGZjYjJlZjc3MDZmZmI5ZTljMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjhlYzIyOGFhODk4NDRmY2IyZWY3NzA2ZmZiOWU5YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDcuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGEwNGRhZjkyNTgwNGZmMTk5ZmMzN2ZjYWJiNzI4NDQuc2V0Q29udGVudChodG1sX2Y4ZWMyMjhhYTg5ODQ0ZmNiMmVmNzcwNmZmYjllOWMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfM2M4YTA0ZDQ0YjM4NGVkYWJmMzJmMmM4MjQ2MjJhNWIuYmluZFBvcHVwKHBvcHVwXzRhMDRkYWY5MjU4MDRmZjE5OWZjMzdmY2FiYjcyODQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9kMjI1ZTJlM2ViZWY0MzAxYmM2YTMyMWYxYTQwMGZmOSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjE0Njk5OTkzMDk0LCAtNzMuODc5Nzg5MDAzMzY3MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTA0NzQxYmM5NGViNDQ4N2EyMTRhNGJiZjRlMTIwZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjU2Mjg3YzFkNjM0NTA3YmQ1NWU3Y2I0YjdlYzkzYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTY1NjI4N2MxZDYzNDUwN2JkNTVlN2NiNGI3ZWM5M2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTQ5NDguMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTA0NzQxYmM5NGViNDQ4N2EyMTRhNGJiZjRlMTIwZWEuc2V0Q29udGVudChodG1sXzE2NTYyODdjMWQ2MzQ1MDdiZDU1ZTdjYjRiN2VjOTNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZDIyNWUyZTNlYmVmNDMwMWJjNmEzMjFmMWE0MDBmZjkuYmluZFBvcHVwKHBvcHVwX2UwNDc0MWJjOTRlYjQ0ODdhMjE0YTRiYmY0ZTEyMGVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9jZTZmMzliNmNkMGE0NTczYjQzMzIwNDBlYjAwZGFkZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NjI0MDk5OTkwMTE5NSwgLTczLjg3ODg2MTAwMDgxNDUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1ZmQxNzkyYzA5ODQ4NTNhZTgxMmQxNTNiZTU4MzI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDJkY2QzN2FkZTdhNDhhYWIyZTI0OTJmZTY4YmE3NDIgPSAkKCc8ZGl2IGlkPSJodG1sX2QyZGNkMzdhZGU3YTQ4YWFiMmUyNDkyZmU2OGJhNzQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTQ5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1ZmQxNzkyYzA5ODQ4NTNhZTgxMmQxNTNiZTU4MzI3LnNldENvbnRlbnQoaHRtbF9kMmRjZDM3YWRlN2E0OGFhYjJlMjQ5MmZlNjhiYTc0Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2NlNmYzOWI2Y2QwYTQ1NzNiNDMzMjA0MGViMDBkYWRlLmJpbmRQb3B1cChwb3B1cF9lNWZkMTc5MmMwOTg0ODUzYWU4MTJkMTUzYmU1ODMyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNGEyMDliN2IzZDA3NGQ3MmIxMmZjMDg3M2ViMWRhN2EgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY0Mzg5OTk4MDk2NSwgLTczLjg3Njk5ODAwMjk4OTA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxODZjZmMzNDk1OTQyYjJhNWFiMzYyOGE3MTQyNGZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjJmYjBkMDQyN2ZmNGNmYzg4OTE1ZTE5NWVmZjY3OTggPSAkKCc8ZGl2IGlkPSJodG1sXzYyZmIwZDA0MjdmZjRjZmM4ODkxNWUxOTVlZmY2Nzk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTUxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxODZjZmMzNDk1OTQyYjJhNWFiMzYyOGE3MTQyNGZiLnNldENvbnRlbnQoaHRtbF82MmZiMGQwNDI3ZmY0Y2ZjODg5MTVlMTk1ZWZmNjc5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzRhMjA5YjdiM2QwNzRkNzJiMTJmYzA4NzNlYjFkYTdhLmJpbmRQb3B1cChwb3B1cF8wMTg2Y2ZjMzQ5NTk0MmIyYTVhYjM2MjhhNzE0MjRmYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOTc3Njc1MTAzNDZjNGZkN2FhNzNmYTA1NDk3ZDMzZjYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTY2MzM5OTk5OTM1NzUsIC03My44NzUxMzkwMDI2MTU0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDY3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OTRjZGZlOGJjNTM0ZWI3YjVmYmU4YmExNzY5Zjg3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5YjQ2ODk4OGUwYjRkMjQ5OGRiMDk1OTQwYjI4OWZhID0gJCgnPGRpdiBpZD0iaHRtbF9lOWI0Njg5ODhlMGI0ZDI0OThkYjA5NTk0MGIyODlmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1NDk1My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OTRjZGZlOGJjNTM0ZWI3YjVmYmU4YmExNzY5Zjg3Yi5zZXRDb250ZW50KGh0bWxfZTliNDY4OTg4ZTBiNGQyNDk4ZGIwOTU5NDBiMjg5ZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85Nzc2NzUxMDM0NmM0ZmQ3YWE3M2ZhMDU0OTdkMzNmNi5iaW5kUG9wdXAocG9wdXBfNzk0Y2RmZThiYzUzNGViN2I1ZmJlOGJhMTc2OWY4N2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2M2NWUwY2M2YTE4YTRhYjA4ZTk2MzJmZGFkNmY0ZDQ3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2ODAzOTk5NzUyMTQ0LCAtNzMuODczNjU3MDAwMjYxMDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNTcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzYTY3Y2Q2NDM0MzQxOWFiNGNjOGRmMzdjZjIyNDhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWIzY2ZjZTIwODQ2NDZmNGI5NGU1NzhmZDMzNGRiYTYgPSAkKCc8ZGl2IGlkPSJodG1sXzFiM2NmY2UyMDg0NjQ2ZjRiOTRlNTc4ZmQzMzRkYmE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU0OTgyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzYTY3Y2Q2NDM0MzQxOWFiNGNjOGRmMzdjZjIyNDhiLnNldENvbnRlbnQoaHRtbF8xYjNjZmNlMjA4NDY0NmY0Yjk0ZTU3OGZkMzM0ZGJhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2M2NWUwY2M2YTE4YTRhYjA4ZTk2MzJmZGFkNmY0ZDQ3LmJpbmRQb3B1cChwb3B1cF9mM2E2N2NkNjQzNDM0MTlhYjRjYzhkZjM3Y2YyMjQ4YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTU5ZGZiYTE4NzQ2NDk5YmJjOGY1YzQ3ZDFlYTJmNmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc5NTQ5OTk5NzE1OCwgLTczLjg5ODE5MjAwMzM4MjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2NTk0NzA5OWQxMDQyZDdhNTQ3ZTBkNmJhYzZmMDFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTZiZTJkM2I0MjA0NGY2MmE1NGQ2ZjBmNDYwZTVmOTYgPSAkKCc8ZGl2IGlkPSJodG1sXzE2YmUyZDNiNDIwNDRmNjJhNTRkNmYwZjQ2MGU1Zjk2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4MzQzLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2NTk0NzA5OWQxMDQyZDdhNTQ3ZTBkNmJhYzZmMDFiLnNldENvbnRlbnQoaHRtbF8xNmJlMmQzYjQyMDQ0ZjYyYTU0ZDZmMGY0NjBlNWY5Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzU1OWRmYmExODc0NjQ5OWJiYzhmNWM0N2QxZWEyZjZmLmJpbmRQb3B1cChwb3B1cF85NjU5NDcwOTlkMTA0MmQ3YTU0N2UwZDZiYWM2ZjAxYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDFmMzFjYmY0NTEwNDM4ODgyMjY1ODdiMTQwZjI3MmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTkwMzY5OTk4MTQyNSwgLTczLjg4Nzg5MzAwMDExNjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmNzEwMTczM2MxYjQ0YTc5MzNjYzVlMDkwZTJlMjU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjEwZWY4NzM5MTUxNDdkZmJmNzc4YTZmZWZiMGJlODIgPSAkKCc8ZGl2IGlkPSJodG1sX2YxMGVmODczOTE1MTQ3ZGZiZjc3OGE2ZmVmYjBiZTgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4MzU0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmNzEwMTczM2MxYjQ0YTc5MzNjYzVlMDkwZTJlMjU2LnNldENvbnRlbnQoaHRtbF9mMTBlZjg3MzkxNTE0N2RmYmY3NzhhNmZlZmIwYmU4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QxZjMxY2JmNDUxMDQzODg4MjI2NTg3YjE0MGYyNzJmLmJpbmRQb3B1cChwb3B1cF9jZjcxMDE3MzNjMWI0NGE3OTMzY2M1ZTA5MGUyZTI1NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjFhZjZmNzFmNmE1NDJlYzhjYzQ1NjZmYjFjOGVlNWQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTkyMzI5OTk4MTQyMTYsIC03My44ODYwMzYwMDA4MDAxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTQ2ZWQ3ZmM1OTQ0NzJhODBmYTI2OGI2ZmIwMTI1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzYTc2NGJkODc0NjRmMWE5MGYzNjY0NWQ0ZjE3ZmE3ID0gJCgnPGRpdiBpZD0iaHRtbF80M2E3NjRiZDg3NDY0ZjFhOTBmMzY2NDVkNGYxN2ZhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODM1Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTQ2ZWQ3ZmM1OTQ0NzJhODBmYTI2OGI2ZmIwMTI1MC5zZXRDb250ZW50KGh0bWxfNDNhNzY0YmQ4NzQ2NGYxYTkwZjM2NjQ1ZDRmMTdmYTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9iMWFmNmY3MWY2YTU0MmVjOGNjNDU2NmZiMWM4ZWU1ZC5iaW5kUG9wdXAocG9wdXBfNWU0NmVkN2ZjNTk0NDcyYTgwZmEyNjhiNmZiMDEyNTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzc5ZmI1YTNmNjhhMjQ2NDFiYzkxOTFiNTcwYzMxYWUyID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU5OTE2OTk5NzQ1NzEsIC03My44Nzk1MjcwMDA4MjYyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTg5ZThlOWQ5N2Y0MDZiYmY3YWNjMTgzY2U3M2ZkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkN2M1NzllMGRlMjRkN2NiNGIxYjcwNGMzYmUyNzc5ID0gJCgnPGRpdiBpZD0iaHRtbF8wZDdjNTc5ZTBkZTI0ZDdjYjRiMWI3MDRjM2JlMjc3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODM2My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTg5ZThlOWQ5N2Y0MDZiYmY3YWNjMTgzY2U3M2ZkMy5zZXRDb250ZW50KGh0bWxfMGQ3YzU3OWUwZGUyNGQ3Y2I0YjFiNzA0YzNiZTI3NzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV83OWZiNWEzZjY4YTI0NjQxYmM5MTkxYjU3MGMzMWFlMi5iaW5kUG9wdXAocG9wdXBfYjE4OWU4ZTlkOTdmNDA2YmJmN2FjYzE4M2NlNzNmZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzk1ZTZlNjA0NTYwNjQ1YTBhZmY2YTQzMjEwZTJhYjliID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU2Nzk0OTk5NzMzNTM2LCAtNzMuODk0MTI0MDAyODg0MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNkYmM5MzRjNjI2NDExNWFlOWU1ZWQyNGZkNDYzMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MWRmM2RiNWViNzY0MjUwYTY3ZjI4ZGVmNDgyOTk1YiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzFkZjNkYjVlYjc2NDI1MGE2N2YyOGRlZjQ4Mjk5NWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzAuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjNkYmM5MzRjNjI2NDExNWFlOWU1ZWQyNGZkNDYzMTYuc2V0Q29udGVudChodG1sXzcxZGYzZGI1ZWI3NjQyNTBhNjdmMjhkZWY0ODI5OTViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOTVlNmU2MDQ1NjA2NDVhMGFmZjZhNDMyMTBlMmFiOWIuYmluZFBvcHVwKHBvcHVwXzIzZGJjOTM0YzYyNjQxMTVhZTllNWVkMjRmZDQ2MzE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yMTdlODZhMTJiNzY0NDY2YjYxMTNhNTAwMTAyZTU4NyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Njg5Nzk5OTkwNTgyNCwgLTczLjg5MzE4ODAwMjE3ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0MC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjYzMWRjZDE3YWEwNDcwNTlhZWNkZDI4OWQ0YTdiYWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzg3MDMyMDNhNDg0OWIwYTJkN2IyNTAyMTk0N2Y3NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWM4NzAzMjAzYTQ4NDliMGEyZDdiMjUwMjE5NDdmNzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjYzMWRjZDE3YWEwNDcwNTlhZWNkZDI4OWQ0YTdiYWYuc2V0Q29udGVudChodG1sXzFjODcwMzIwM2E0ODQ5YjBhMmQ3YjI1MDIxOTQ3Zjc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjE3ZTg2YTEyYjc2NDQ2NmI2MTEzYTUwMDEwMmU1ODcuYmluZFBvcHVwKHBvcHVwXzY2MzFkY2QxN2FhMDQ3MDU5YWVjZGQyODlkNGE3YmFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83NDY0ODg1MmFiOGQ0OGQwOTczZDgyZDhkZWE5MGY0OCA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Njk4OTk5OTk0NDkwNiwgLTczLjg5MjI2MTAwMDUwNDc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwY2JlMDcxOGJkZTQ4NDBiODA3NmQxNWRkOWMxNjRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODRmOTY0ZjYzZTY2NDc1MmIwNWY2NzY5M2RmNGFlYTMgPSAkKCc8ZGl2IGlkPSJodG1sXzg0Zjk2NGY2M2U2NjQ3NTJiMDVmNjc2OTNkZjRhZWEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTcyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwY2JlMDcxOGJkZTQ4NDBiODA3NmQxNWRkOWMxNjRkLnNldENvbnRlbnQoaHRtbF84NGY5NjRmNjNlNjY0NzUyYjA1ZjY3NjkzZGY0YWVhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzc0NjQ4ODUyYWI4ZDQ4ZDA5NzNkODJkOGRlYTkwZjQ4LmJpbmRQb3B1cChwb3B1cF8zMGNiZTA3MThiZGU0ODQwYjgwNzZkMTVkZDljMTY0ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjg1MzdmNDRkNjI1NGIxNjlkMGUyZGQxMmI2OWZhYWIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTcwOTU5OTk5NTA3MSwgLTczLjg5MTMzMzAwMjQ1MTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhZjFiOTBmY2JhYjRkYmJiMzU1NTdhZDVlM2UwYmE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODA1ZWFjNWY0ZTNjNDQzMzg4OWEyMTgwMGE5ZDU5ZGYgPSAkKCc8ZGl2IGlkPSJodG1sXzgwNWVhYzVmNGUzYzQ0MzM4ODlhMjE4MDBhOWQ1OWRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTczLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhZjFiOTBmY2JhYjRkYmJiMzU1NTdhZDVlM2UwYmE0LnNldENvbnRlbnQoaHRtbF84MDVlYWM1ZjRlM2M0NDMzODg5YTIxODAwYTlkNTlkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2I4NTM3ZjQ0ZDYyNTRiMTY5ZDBlMmRkMTJiNjlmYWFiLmJpbmRQb3B1cChwb3B1cF9hYWYxYjkwZmNiYWI0ZGJiYjM1NTU3YWQ1ZTNlMGJhNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzQ2ZDQ3NjY3MTQzNDE0NDg0MDcwOTI5OGFmZDU0MzMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTcxOTI5OTk4ODM4MSwgLTczLjg5MDQwMzAwMjExMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDdjNGNmZGI2ZGRjNGIxZmJiMTAzNTk0MzQzNGI4ZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZmFjZjI5ODYxM2E0OWE0OWFiOTFmZjg1MTgxZjU0NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWZhY2YyOTg2MTNhNDlhNDlhYjkxZmY4NTE4MWY1NDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzQuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDdjNGNmZGI2ZGRjNGIxZmJiMTAzNTk0MzQzNGI4Zjcuc2V0Q29udGVudChodG1sXzFmYWNmMjk4NjEzYTQ5YTQ5YWI5MWZmODUxODFmNTQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYzQ2ZDQ3NjY3MTQzNDE0NDg0MDcwOTI5OGFmZDU0MzMuYmluZFBvcHVwKHBvcHVwXzQ3YzRjZmRiNmRkYzRiMWZiYjEwMzU5NDM0MzRiOGY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV84ZDA3M2FkNzRjYjk0ZTJhYWQ4ZGIxZWZiMWViNmI2MiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzI5Mjk5OTg2NzUzLCAtNzMuODg5NDcyMDAxNDQyODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyNS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGYwMDU5OTgzZjcyNGIyYTkyNGZjMDBkM2Y4ODYxOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNjI0MzlhYzdjM2Q0NjQ2OWMxMzEwNzhiNGZhNzE0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjYyNDM5YWM3YzNkNDY0NjljMTMxMDc4YjRmYTcxNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1NzUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGYwMDU5OTgzZjcyNGIyYTkyNGZjMDBkM2Y4ODYxOTcuc2V0Q29udGVudChodG1sX2I2MjQzOWFjN2MzZDQ2NDY5YzEzMTA3OGI0ZmE3MTRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfOGQwNzNhZDc0Y2I5NGUyYWFkOGRiMWVmYjFlYjZiNjIuYmluZFBvcHVwKHBvcHVwX2RmMDA1OTk4M2Y3MjRiMmE5MjRmYzAwZDNmODg2MTk3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yNDU5MmNmMzJkYmE0MDc5OGExYmY1OTZjZDM3NzhjNiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1NzM4Nzk5OTc5Mjg1NCwgLTczLjg4ODU0NDAwMjI3MDMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlOWJiMTBjZTIyNjRlYTU4Y2Y4ZGUwOGM3MjI3ZjkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDdkZTVkYTFkNmMwNGZhZTkxMjY1NTE2ZTg5YTg2N2YgPSAkKCc8ZGl2IGlkPSJodG1sXzQ3ZGU1ZGExZDZjMDRmYWU5MTI2NTUxNmU4OWE4NjdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTc2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlOWJiMTBjZTIyNjRlYTU4Y2Y4ZGUwOGM3MjI3ZjkwLnNldENvbnRlbnQoaHRtbF80N2RlNWRhMWQ2YzA0ZmFlOTEyNjU1MTZlODlhODY3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzI0NTkyY2YzMmRiYTQwNzk4YTFiZjU5NmNkMzc3OGM2LmJpbmRQb3B1cChwb3B1cF9lZTliYjEwY2UyMjY0ZWE1OGNmOGRlMDhjNzIyN2Y5MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfODViM2FmYzA2MzdjNGZmYWI3NzVmOTBiOWMwNWM2OWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTc0ODQ5OTk4NDIxNTYsIC03My44ODc2MTMwMDExMjI2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYWRmY2EzZWRhMjg0MzA4YmIxYWRmNjg2MGVlZDFjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhOTFmYTE2ZjcwMTQxMjM4N2FjMzc0YTc2Y2QwMzE1ID0gJCgnPGRpdiBpZD0iaHRtbF83YTkxZmExNmY3MDE0MTIzODdhYzM3NGE3NmNkMDMxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYWRmY2EzZWRhMjg0MzA4YmIxYWRmNjg2MGVlZDFjMS5zZXRDb250ZW50KGh0bWxfN2E5MWZhMTZmNzAxNDEyMzg3YWMzNzRhNzZjZDAzMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV84NWIzYWZjMDYzN2M0ZmZhYjc3NWY5MGI5YzA1YzY5Yy5iaW5kUG9wdXAocG9wdXBfM2FkZmNhM2VkYTI4NDMwOGJiMWFkZjY4NjBlZWQxYzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzM1MzkxMTNlOGE5YTQxNzNiYWE0NjlkNGQxY2EyMjk2ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3NTg1OTk5OTA2MjgsIC03My44ODY2ODUwMDA4Mjk2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NmM3MWU2MmZjMGI0ZDE4YmE1NDVjM2FkYjlhNjMwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4OWY0YzJkNDdiMjQxNWM4ZjIyYjNkZWQyMTE0YzQ3ID0gJCgnPGRpdiBpZD0iaHRtbF9lODlmNGMyZDQ3YjI0MTVjOGYyMmIzZGVkMjExNGM0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NmM3MWU2MmZjMGI0ZDE4YmE1NDVjM2FkYjlhNjMwNy5zZXRDb250ZW50KGh0bWxfZTg5ZjRjMmQ0N2IyNDE1YzhmMjJiM2RlZDIxMTRjNDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zNTM5MTEzZThhOWE0MTczYmFhNDY5ZDRkMWNhMjI5Ni5iaW5kUG9wdXAocG9wdXBfNzZjNzFlNjJmYzBiNGQxOGJhNTQ1YzNhZGI5YTYzMDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Q3ZmE0ZjUzOTJkYzQzNzhiZTE2MDIxMDkxODdlZDFiID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3NjgzOTk5Nzc2OTY1LCAtNzMuODg1NzUzMDAzNDQyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YThmNzExYzY4Yzg0OTE2OGU2Y2IzNmVmMDZlYmI3NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljZjRjYzU0MGRkZDQwMjVhY2Y3MGQ1NTA3ODZlNmI3ID0gJCgnPGRpdiBpZD0iaHRtbF85Y2Y0Y2M1NDBkZGQ0MDI1YWNmNzBkNTUwNzg2ZTZiNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU3OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YThmNzExYzY4Yzg0OTE2OGU2Y2IzNmVmMDZlYmI3NS5zZXRDb250ZW50KGh0bWxfOWNmNGNjNTQwZGRkNDAyNWFjZjcwZDU1MDc4NmU2YjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kN2ZhNGY1MzkyZGM0Mzc4YmUxNjAyMTA5MTg3ZWQxYi5iaW5kUG9wdXAocG9wdXBfN2E4ZjcxMWM2OGM4NDkxNjhlNmNiMzZlZjA2ZWJiNzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2YyZGE4M2IwMmE4MDRlOTNhMmI4M2U2YmY0Zjg3YTJhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3Nzc5OTk5OTQ4MzEsIC03My44ODQ4MjQwMDI3MTIzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTMwM2YxM2VhOTc0NGU4OTUzM2EzMzhiNThlMTU1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwMTRhNDAzNDk1ZjQ1ODA4N2Y0ODRiZjU5MTY0ZmFjID0gJCgnPGRpdiBpZD0iaHRtbF8zMDE0YTQwMzQ5NWY0NTgwODdmNDg0YmY1OTE2NGZhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4MC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTMwM2YxM2VhOTc0NGU4OTUzM2EzMzhiNThlMTU1Mi5zZXRDb250ZW50KGh0bWxfMzAxNGE0MDM0OTVmNDU4MDg3ZjQ4NGJmNTkxNjRmYWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mMmRhODNiMDJhODA0ZTkzYTJiODNlNmJmNGY4N2EyYS5iaW5kUG9wdXAocG9wdXBfMTEzMDNmMTNlYTk3NDRlODk1MzNhMzM4YjU4ZTE1NTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Q2ZDA3ZjBmYzY2ZjQ3NmQ5NjlkMjEyYTU1MzNhNTA3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3ODc2OTk5NzcwMDgsIC03My44ODM4OTcwMDA4NzA2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZGMyNjFlNWQ0NWE0ZDBkYWEwOGI1NzUzNmViY2Y1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3YWE0YzFlM2YzNTRiNjRiNGU1Njg3YmFhNzI3ZWFlID0gJCgnPGRpdiBpZD0iaHRtbF9jN2FhNGMxZTNmMzU0YjY0YjRlNTY4N2JhYTcyN2VhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZGMyNjFlNWQ0NWE0ZDBkYWEwOGI1NzUzNmViY2Y1ZC5zZXRDb250ZW50KGh0bWxfYzdhYTRjMWUzZjM1NGI2NGI0ZTU2ODdiYWE3MjdlYWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9kNmQwN2YwZmM2NmY0NzZkOTY5ZDIxMmE1NTMzYTUwNy5iaW5kUG9wdXAocG9wdXBfOGRjMjYxZTVkNDVhNGQwZGFhMDhiNTc1MzZlYmNmNWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzU2YTI2MDUyOTM4NTQwZTRiOWQ2M2RkZjk5NWY5ODY0ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU3OTc1OTk5ODYwODEsIC03My44ODI5NjQwMDA4NzUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyNTdiMDVkMmNiNDRkNzg4ZTJiM2Q3ZGM0NGI1NjVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjU1MjJjZmMxMjZiNDQyMTgyNzkzOTFhMGY5OTMxZWEgPSAkKCc8ZGl2IGlkPSJodG1sX2Y1NTIyY2ZjMTI2YjQ0MjE4Mjc5MzkxYTBmOTkzMWVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTgyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyNTdiMDVkMmNiNDRkNzg4ZTJiM2Q3ZGM0NGI1NjVhLnNldENvbnRlbnQoaHRtbF9mNTUyMmNmYzEyNmI0NDIxODI3OTM5MWEwZjk5MzFlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzU2YTI2MDUyOTM4NTQwZTRiOWQ2M2RkZjk5NWY5ODY0LmJpbmRQb3B1cChwb3B1cF81MjU3YjA1ZDJjYjQ0ZDc4OGUyYjNkN2RjNDRiNTY1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfOGY0Mzg4ZjQ0ZjY2NDM3OTg3NWU4NTY3NTc3YzdkNjQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTgxNzA5OTk3NTUxOCwgLTczLjg4MTEwNDAwMDY1MjgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1MTliZjdkN2IwZjQ0ZTRhYzk5NTcwOTMyZWQ5MDAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM3MGJlYTY1N2M0NDg2YTg4NDg2ODIxZjRmYTZhMzYgPSAkKCc8ZGl2IGlkPSJodG1sX2IzNzBiZWE2NTdjNDQ4NmE4ODQ4NjgyMWY0ZmE2YTM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4NTg0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1MTliZjdkN2IwZjQ0ZTRhYzk5NTcwOTMyZWQ5MDAyLnNldENvbnRlbnQoaHRtbF9iMzcwYmVhNjU3YzQ0ODZhODg0ODY4MjFmNGZhNmEzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzhmNDM4OGY0NGY2NjQzNzk4NzVlODU2NzU3N2M3ZDY0LmJpbmRQb3B1cChwb3B1cF8yNTE5YmY3ZDdiMGY0NGU0YWM5OTU3MDkzMmVkOTAwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTMyYzc5NTU2N2QxNGM2NDk2OGQxNjhiN2ZmMzU0ZDQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTgyNjg5OTk4Njg4LCAtNzMuODgwMTc1MDAwODE0MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMThiYTg5MTkxYTc5NDUzOWIwNzNjYTIwNDVkYTE5OTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNGYzY2NjODJjNmY0N2QxYThiYmU0YTUwNGY3ZjY4NCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTRmM2NjYzgyYzZmNDdkMWE4YmJlNGE1MDRmN2Y2ODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1ODUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMThiYTg5MTkxYTc5NDUzOWIwNzNjYTIwNDVkYTE5OTQuc2V0Q29udGVudChodG1sX2E0ZjNjY2M4MmM2ZjQ3ZDFhOGJiZTRhNTA0ZjdmNjg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfZTMyYzc5NTU2N2QxNGM2NDk2OGQxNjhiN2ZmMzU0ZDQuYmluZFBvcHVwKHBvcHVwXzE4YmE4OTE5MWE3OTQ1MzliMDczY2EyMDQ1ZGExOTk0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lZTE5NGM5ODYwYzA0Y2YzYjU4ZTM1YTA4ZTIwYjNlMiA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1ODM2Nzk5OTg2MzAzLCAtNzMuODc5MjQ1MDAwMTYyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTM1OGJkNWI5NWE0MTlhYmIzYjExMGMxNGMwYTM3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxZTM2OGY2N2U0ZjQ1ZTQ4MzkxN2RiMjU3ZmZlYTEzID0gJCgnPGRpdiBpZD0iaHRtbF9kMWUzNjhmNjdlNGY0NWU0ODM5MTdkYjI1N2ZmZWExMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4Ni4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTM1OGJkNWI5NWE0MTlhYmIzYjExMGMxNGMwYTM3Ny5zZXRDb250ZW50KGh0bWxfZDFlMzY4ZjY3ZTRmNDVlNDgzOTE3ZGIyNTdmZmVhMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lZTE5NGM5ODYwYzA0Y2YzYjU4ZTM1YTA4ZTIwYjNlMi5iaW5kUG9wdXAocG9wdXBfMmEzNThiZDViOTVhNDE5YWJiM2IxMTBjMTRjMGEzNzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ZhMDI5Nzc2ZDc4MzRmZjc4MjdhOGU0YWI2ZDU0OWRmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NDYzOTk5NzU2MTMsIC03My44NzgzMTUwMDIyMTI2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YTY5NzliMzI5ZDM0YzljYjZiM2RmM2I3NzkxNWUwNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlZjczMTYyZjNmNTRhZmJhODBlYzQwODAyYmMyMjM2ID0gJCgnPGRpdiBpZD0iaHRtbF81ZWY3MzE2MmYzZjU0YWZiYTgwZWM0MDgwMmJjMjIzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4Ny4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTY5NzliMzI5ZDM0YzljYjZiM2RmM2I3NzkxNWUwNi5zZXRDb250ZW50KGh0bWxfNWVmNzMxNjJmM2Y1NGFmYmE4MGVjNDA4MDJiYzIyMzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mYTAyOTc3NmQ3ODM0ZmY3ODI3YThlNGFiNmQ1NDlkZi5iaW5kUG9wdXAocG9wdXBfNmE2OTc5YjMyOWQzNGM5Y2I2YjNkZjNiNzc5MTVlMDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzMxYTljYTcyYmI1ODQxZDFhZDJkMTIyM2NiMGMzMDZhID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NTYxOTk5OTIyMzQsIC03My44NzczODUwMDE0OTYxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YmMyY2FmZGVmNTc0YWE0OTU4M2RmMWZmZjc3MDRkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwOTAwNDY5MjY3MDRmMTc5ODA3Zjk3NDBlNzlhYzk0ID0gJCgnPGRpdiBpZD0iaHRtbF80MDkwMDQ2OTI2NzA0ZjE3OTgwN2Y5NzQwZTc5YWM5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1ODU4OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YmMyY2FmZGVmNTc0YWE0OTU4M2RmMWZmZjc3MDRkNi5zZXRDb250ZW50KGh0bWxfNDA5MDA0NjkyNjcwNGYxNzk4MDdmOTc0MGU3OWFjOTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zMWE5Y2E3MmJiNTg0MWQxYWQyZDEyMjNjYjBjMzA2YS5iaW5kUG9wdXAocG9wdXBfOWJjMmNhZmRlZjU3NGFhNDk1ODNkZjFmZmY3NzA0ZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2EyNzc1NGMwNGIzMDRkNTM5YWRmYmNiNTFlNjAzODYwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzU4NTkyOTk5NzU2ODE0LCAtNzMuODc0NTEyMDAxNzM4NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2Ny4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjdhMDlkYzUyNWE3NDBhZmI1MmQyNThiYjQ3MjUxNzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjhmNzQ2MjJmMmU0Y2U0ODlkYWViYjYyNDZlOGJhMiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2I4Zjc0NjIyZjJlNGNlNDg5ZGFlYmI2MjQ2ZThiYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTg1OTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjdhMDlkYzUyNWE3NDBhZmI1MmQyNThiYjQ3MjUxNzIuc2V0Q29udGVudChodG1sX2NiOGY3NDYyMmYyZTRjZTQ4OWRhZWJiNjI0NmU4YmEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfYTI3NzU0YzA0YjMwNGQ1MzlhZGZiY2I1MWU2MDM4NjAuYmluZFBvcHVwKHBvcHVwXzY3YTA5ZGM1MjVhNzQwYWZiNTJkMjU4YmI0NzI1MTcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV85ZGQwNmYzYTBkZDI0ZDEyYWUzZTQzODYzYTcyY2M0MyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1Mjg1MTk5OTc4NTg3NSwgLTczLjg5MzM5ODAwMDk3NjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1NzVlOTYxMTBiMjQzMDY5MDU4MTc4NzQ1YTU4YmU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTZkMGY3ZDcyYmY3NDJlM2EyOTQzY2FkOTY5YjBiY2EgPSAkKCc8ZGl2IGlkPSJodG1sX2U2ZDBmN2Q3MmJmNzQyZTNhMjk0M2NhZDk2OWIwYmNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4ODg4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1NzVlOTYxMTBiMjQzMDY5MDU4MTc4NzQ1YTU4YmU1LnNldENvbnRlbnQoaHRtbF9lNmQwZjdkNzJiZjc0MmUzYTI5NDNjYWQ5NjliMGJjYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzlkZDA2ZjNhMGRkMjRkMTJhZTNlNDM4NjNhNzJjYzQzLmJpbmRQb3B1cChwb3B1cF9kNTc1ZTk2MTEwYjI0MzA2OTA1ODE3ODc0NWE1OGJlNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYTIzNTFjNjhkMTNjNDNiYzgzY2FkNWU1MTU4NDAyYzEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI5NDc5OTk3Mzk3MywgLTczLjg5MjQ3MzAwMjA4NjA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1YjRhYmEyZDVhMTQ3YWVhYzRmZWNjMDNjY2EzZDAwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTI2YTljYzIyZWRjNDliZDk0NTdjZGI3MzQwNTEyNTUgPSAkKCc8ZGl2IGlkPSJodG1sXzUyNmE5Y2MyMmVkYzQ5YmQ5NDU3Y2RiNzM0MDUxMjU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4ODg5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1YjRhYmEyZDVhMTQ3YWVhYzRmZWNjMDNjY2EzZDAwLnNldENvbnRlbnQoaHRtbF81MjZhOWNjMjJlZGM0OWJkOTQ1N2NkYjczNDA1MTI1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2EyMzUxYzY4ZDEzYzQzYmM4M2NhZDVlNTE1ODQwMmMxLmJpbmRQb3B1cChwb3B1cF81NWI0YWJhMmQ1YTE0N2FlYWM0ZmVjYzAzY2NhM2QwMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDI5MWUwMzZmY2JjNGIwZTg4OTRhZTY0Njg5MDFiYjIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM2MzM5OTk5MjI5NzUsIC03My44ODU5NjUwMDA3NjU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE4YmE3MTc3ODIyODQ2MzU5NjQ1OGYyNTUzMzMyZTZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGNhNWQ5ZjFjNGNjNGM4MThmYzcxZDViMWM4ZDNkZWMgPSAkKCc8ZGl2IGlkPSJodG1sXzBjYTVkOWYxYzRjYzRjODE4ZmM3MWQ1YjFjOGQzZGVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4ODk2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4YmE3MTc3ODIyODQ2MzU5NjQ1OGYyNTUzMzMyZTZkLnNldENvbnRlbnQoaHRtbF8wY2E1ZDlmMWM0Y2M0YzgxOGZjNzFkNWIxYzhkM2RlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQyOTFlMDM2ZmNiYzRiMGU4ODk0YWU2NDY4OTAxYmIyLmJpbmRQb3B1cChwb3B1cF8xOGJhNzE3NzgyMjg0NjM1OTY0NThmMjU1MzMzMmU2ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYWZiZWVkYzlhYzkwNDViNTkxZmEyZWQzMTcwYjY2OTAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTM3MzA5OTk5Njk4NywgLTczLjg4NTAzNzAwMDc1Mzc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlMGVjZDk2OGI4OTQyYTM4NDdhNDk2OTVmZjY1ZmI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2M0NWExM2IxYjU4NDMzN2E1OTVhOWJhOTU3MGMyMTAgPSAkKCc8ZGl2IGlkPSJodG1sXzNjNDVhMTNiMWI1ODQzMzdhNTk1YTliYTk1NzBjMjEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4ODk3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlMGVjZDk2OGI4OTQyYTM4NDdhNDk2OTVmZjY1ZmI2LnNldENvbnRlbnQoaHRtbF8zYzQ1YTEzYjFiNTg0MzM3YTU5NWE5YmE5NTcwYzIxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2FmYmVlZGM5YWM5MDQ1YjU5MWZhMmVkMzE3MGI2NjkwLmJpbmRQb3B1cChwb3B1cF9hZTBlY2Q5NjhiODk0MmEzODQ3YTQ5Njk1ZmY2NWZiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjZlYzMxMzA5NGY1NGMxNzg1ZGYxMzc2M2QxZGQzMDEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ4MDU5OTk5MDY3OSwgLTczLjg3NDgwOTAwMTQzNDE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhMWU2ZDI3MTUzNzQ1ZDFhOWQ5NzUyZDVmMmFmMjdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQ1MGQxYTRkOWU3NGQ1ZDliMDQzYmE4NDgyMmJkZDYgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkNTBkMWE0ZDllNzRkNWQ5YjA0M2JhODQ4MjJiZGQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4OTA4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhMWU2ZDI3MTUzNzQ1ZDFhOWQ5NzUyZDVmMmFmMjdkLnNldENvbnRlbnQoaHRtbF9mZDUwZDFhNGQ5ZTc0ZDVkOWIwNDNiYTg0ODIyYmRkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y2ZWMzMTMwOTRmNTRjMTc4NWRmMTM3NjNkMWRkMzAxLmJpbmRQb3B1cChwb3B1cF8wYTFlNmQyNzE1Mzc0NWQxYTlkOTc1MmQ1ZjJhZjI3ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTQxODg3ZjRiMzc5NDE4ZTliMzRhM2VhNWFjZDQ5OTIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTQ5MDM5OTk3NzAzOCwgLTczLjg3Mzg3OTAwMzI2NTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhYmMzOTQwM2Y4NzQ3N2Y4MTU0NGUzZDdmZjViMzkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGNkZDA1ZDU3MzJiNDY4NTkzNTg5NWI1NzVkNTRlMzkgPSAkKCc8ZGl2IGlkPSJodG1sXzBjZGQwNWQ1NzMyYjQ2ODU5MzU4OTViNTc1ZDU0ZTM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU4OTA5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhYmMzOTQwM2Y4NzQ3N2Y4MTU0NGUzZDdmZjViMzkxLnNldENvbnRlbnQoaHRtbF8wY2RkMDVkNTczMmI0Njg1OTM1ODk1YjU3NWQ1NGUzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzU0MTg4N2Y0YjM3OTQxOGU5YjM0YTNlYTVhY2Q0OTkyLmJpbmRQb3B1cChwb3B1cF85YWJjMzk0MDNmODc0NzdmODE1NDRlM2Q3ZmY1YjM5MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTFhNjAzZDA4Y2E0NDU1NWI1Y2Y4NDk0OGNlMWUzOWMgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA4MTA5OTk5NDM2OCwgLTczLjg5Mzk3NjAwMDU0MzI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5YWI1OTA4ZjIwYjRmZmU4MjQ1ZDY4Y2M3MTIyZDUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjEzYzYxZTNiMjU2NGFiMmI3YmVkODFkYTEyNmU2ZGYgPSAkKCc8ZGl2IGlkPSJodG1sX2IxM2M2MWUzYjI1NjRhYjJiN2JlZDgxZGExMjZlNmRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDU3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5YWI1OTA4ZjIwYjRmZmU4MjQ1ZDY4Y2M3MTIyZDUyLnNldENvbnRlbnQoaHRtbF9iMTNjNjFlM2IyNTY0YWIyYjdiZWQ4MWRhMTI2ZTZkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzUxYTYwM2QwOGNhNDQ1NTViNWNmODQ5NDhjZTFlMzljLmJpbmRQb3B1cChwb3B1cF8xOWFiNTkwOGYyMGI0ZmZlODI0NWQ2OGNjNzEyMmQ1MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZWMzZDlhODE2NDQyNDlkYTg2NTYyOTk1MDM2MDMzMGQgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTA5MDc5OTk3NDUwOSwgLTczLjg5MzA0ODAwMTEwMDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmMWZhMTJlYzkzZTQ1ZGY4MTk3OGFlNDg1MDVjNGJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWVmOTdmZjE0NTM5NDA5YTkwMDlmZGFlMDAyMjM3MzggPSAkKCc8ZGl2IGlkPSJodG1sXzFlZjk3ZmYxNDUzOTQwOWE5MDA5ZmRhZTAwMjIzNzM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDU4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmMWZhMTJlYzkzZTQ1ZGY4MTk3OGFlNDg1MDVjNGJmLnNldENvbnRlbnQoaHRtbF8xZWY5N2ZmMTQ1Mzk0MDlhOTAwOWZkYWUwMDIyMzczOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2VjM2Q5YTgxNjQ0MjQ5ZGE4NjU2Mjk5NTAzNjAzMzBkLmJpbmRQb3B1cChwb3B1cF9hZjFmYTEyZWM5M2U0NWRmODE5NzhhZTQ4NTA1YzRiZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTAzNTlhYmVkZThkNGRlNmEwMGQ2MDMwYjE0ODBkMGEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTEwMDM5OTk5NTYyLCAtNzMuODkyMTIxMDAwMzE0NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTgzMzZhMDRkZWUzNDg4ODgxNmZiNzIyZDVmZTkzNjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZmRmOGM0NWZlYmQ0Y2M3ODMxOTkyMjZmYTM4YzFkNyA9ICQoJzxkaXYgaWQ9Imh0bWxfM2ZkZjhjNDVmZWJkNGNjNzgzMTk5MjI2ZmEzOGMxZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNTkwNTkuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTgzMzZhMDRkZWUzNDg4ODgxNmZiNzIyZDVmZTkzNjcuc2V0Q29udGVudChodG1sXzNmZGY4YzQ1ZmViZDRjYzc4MzE5OTIyNmZhMzhjMWQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNTAzNTlhYmVkZThkNGRlNmEwMGQ2MDMwYjE0ODBkMGEuYmluZFBvcHVwKHBvcHVwXzk4MzM2YTA0ZGVlMzQ4ODg4MTZmYjcyMmQ1ZmU5MzY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV9lNzBhNjk4NGZhZmU0YTQxYmU2NzNhMWE1ZjMyMWQzNyA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc1MTEwMDk5OTk3NDU3NSwgLTczLjg5MTE4OTAwMDA0OTcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhYjhlMmQzNmE0MTRmOTQ4MjdlMTg4NGY2OWEwYTQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQyMjgzZDM3MTJiNGY3MTlkNmZmYzI1NzQ3MGFhZjcgPSAkKCc8ZGl2IGlkPSJodG1sXzRkMjI4M2QzNzEyYjRmNzE5ZDZmZmMyNTc0NzBhYWY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDYwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhYjhlMmQzNmE0MTRmOTQ4MjdlMTg4NGY2OWEwYTQ4LnNldENvbnRlbnQoaHRtbF80ZDIyODNkMzcxMmI0ZjcxOWQ2ZmZjMjU3NDcwYWFmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2U3MGE2OTg0ZmFmZTRhNDFiZTY3M2ExYTVmMzIxZDM3LmJpbmRQb3B1cChwb3B1cF8zYWI4ZTJkMzZhNDE0Zjk0ODI3ZTE4ODRmNjlhMGE0OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDEwZDdmMzNmMWE1NDJlYWIzZGU1NjFmYmJiODhjZmYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE0OTQ5OTk4OTE1NywgLTczLjg4NzQ3MDAwMjc0MTE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA3NDg0YWYxZGIzYTQyOWRiMjk2NDU1YjVkZDM4MmEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjY1MmI3YzM5NjdlNGJjNTk1ODVjMzFiMTA0ZGRlOTcgPSAkKCc8ZGl2IGlkPSJodG1sXzY2NTJiN2MzOTY3ZTRiYzU5NTg1YzMxYjEwNGRkZTk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY0LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3NDg0YWYxZGIzYTQyOWRiMjk2NDU1YjVkZDM4MmEzLnNldENvbnRlbnQoaHRtbF82NjUyYjdjMzk2N2U0YmM1OTU4NWMzMWIxMDRkZGU5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2QxMGQ3ZjMzZjFhNTQyZWFiM2RlNTYxZmJiYjg4Y2ZmLmJpbmRQb3B1cChwb3B1cF8wNzQ4NGFmMWRiM2E0MjlkYjI5NjQ1NWI1ZGQzODJhMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzI2OWEyZGM2OTA3NGQzOGE2ZWYzMTcxYzI5ZjM3MDEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE1OTE5OTk4NzEwNCwgLTczLjg4NjU0MzAwMjAxNzU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDYuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA4ZjFjM2U0MWFhNDQwNzU4NjU4ZDZlNjM3MWNjMDI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDZlZTM5MTNjODY4NGNlMzk0NjQ1NjI4MmM1MWU3NjIgPSAkKCc8ZGl2IGlkPSJodG1sX2Q2ZWUzOTEzYzg2ODRjZTM5NDY0NTYyODJjNTFlNzYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4ZjFjM2U0MWFhNDQwNzU4NjU4ZDZlNjM3MWNjMDI0LnNldENvbnRlbnQoaHRtbF9kNmVlMzkxM2M4Njg0Y2UzOTQ2NDU2MjgyYzUxZTc2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2MyNjlhMmRjNjkwNzRkMzhhNmVmMzE3MWMyOWYzNzAxLmJpbmRQb3B1cChwb3B1cF8wOGYxYzNlNDFhYTQ0MDc1ODY1OGQ2ZTYzNzFjYzAyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZjZmMjQ1NDAzMzgxNDM4OWJlNDUxMDBmMDU4YjZhMTcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE2ODk5OTk3NTQ1NiwgLTczLjg4NTYxMzAwMTE4NDM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1ZWM3OTcxNjQ2YzRjMDg5YWYxZDZmMTAyNGIxYmI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzA0Nzc0YmFmY2RjNDQzZmI5NjAyMDFkYjdmODQ0ZTggPSAkKCc8ZGl2IGlkPSJodG1sX2MwNDc3NGJhZmNkYzQ0M2ZiOTYwMjAxZGI3Zjg0NGU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY2LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1ZWM3OTcxNjQ2YzRjMDg5YWYxZDZmMTAyNGIxYmI0LnNldENvbnRlbnQoaHRtbF9jMDQ3NzRiYWZjZGM0NDNmYjk2MDIwMWRiN2Y4NDRlOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Y2ZjI0NTQwMzM4MTQzODliZTQ1MTAwZjA1OGI2YTE3LmJpbmRQb3B1cChwb3B1cF81NWVjNzk3MTY0NmM0YzA4OWFmMWQ2ZjEwMjRiMWJiNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNTMwYWEyNWM3NGUzNDdkZjkyNjkyMTRhZGY1NDZlNDUgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE3ODc5OTk5OTQzODQsIC03My44ODQ2ODQwMDA5NzUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3OThmMWJjNWE4ZDQyYzBhMTc2Mzg2NDUzMmVhNWQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2ZhYzVjYWIzMzQ4NDcwMjgwY2MyOTUxMWQyODkzOGIgPSAkKCc8ZGl2IGlkPSJodG1sXzdmYWM1Y2FiMzM0ODQ3MDI4MGNjMjk1MTFkMjg5MzhiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3OThmMWJjNWE4ZDQyYzBhMTc2Mzg2NDUzMmVhNWQyLnNldENvbnRlbnQoaHRtbF83ZmFjNWNhYjMzNDg0NzAyODBjYzI5NTExZDI4OTM4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzUzMGFhMjVjNzRlMzQ3ZGY5MjY5MjE0YWRmNTQ2ZTQ1LmJpbmRQb3B1cChwb3B1cF8zNzk4ZjFiYzVhOGQ0MmMwYTE3NjM4NjQ1MzJlYTVkMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTZmMGNlMWNhNDlhNGNlM2JmOWU4YTRkMDM4YmM0YTkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE4ODQ5OTk4Njk2MywgLTczLjg4Mzc1MzAwMDIzMzIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1ZDk5N2ExOTY4YjRmODE4NDQ0OWI1MzRhYjg3Y2MxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTg3Y2I5MzUwZjQ0NDIwYmEwNzY4YzdmMWY4ODkzYjAgPSAkKCc8ZGl2IGlkPSJodG1sX2U4N2NiOTM1MGY0NDQyMGJhMDc2OGM3ZjFmODg5M2IwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1ZDk5N2ExOTY4YjRmODE4NDQ0OWI1MzRhYjg3Y2MxLnNldENvbnRlbnQoaHRtbF9lODdjYjkzNTBmNDQ0MjBiYTA3NjhjN2YxZjg4OTNiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2U2ZjBjZTFjYTQ5YTRjZTNiZjllOGE0ZDAzOGJjNGE5LmJpbmRQb3B1cChwb3B1cF80NWQ5OTdhMTk2OGI0ZjgxODQ0NDliNTM0YWI4N2NjMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYzEzYWJiOTQxOWZkNGE5N2IwNGZkYzVlNjI2MGM3NDcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTE5ODE5OTk4MjY4MywgLTczLjg4MjgyMzAwMDE0MzQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzMzg1ODhhNjg3NzQzNTFhNjMwZjcyYTRmMmI2NWM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjk4NzA3OTc1ZjEyNDQzZmI0Nzk0MzJhODIxYzNjZDYgPSAkKCc8ZGl2IGlkPSJodG1sX2Y5ODcwNzk3NWYxMjQ0M2ZiNDc5NDMyYTgyMWMzY2Q2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDY5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzMzg1ODhhNjg3NzQzNTFhNjMwZjcyYTRmMmI2NWM1LnNldENvbnRlbnQoaHRtbF9mOTg3MDc5NzVmMTI0NDNmYjQ3OTQzMmE4MjFjM2NkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2MxM2FiYjk0MTlmZDRhOTdiMDRmZGM1ZTYyNjBjNzQ3LmJpbmRQb3B1cChwb3B1cF80MzM4NTg4YTY4Nzc0MzUxYTYzMGY3MmE0ZjJiNjVjNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZDk5MmI0OTcyMzc4NDM3N2FiZThiOGNlMmY2MmIyODEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIxNzg5OTk3Mzg1OCwgLTczLjg4MDk2MzAwMDg3NTMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0ODI3NGRjYjIzMzQ1ZGJiNjBkMDJkMTBhMWRlOGNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWY5ZTJhMTdiZGE1NDk2MjliYzRhNDMyY2FkYTIyNDkgPSAkKCc8ZGl2IGlkPSJodG1sXzFmOWUyYTE3YmRhNTQ5NjI5YmM0YTQzMmNhZGEyMjQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDcxLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE0ODI3NGRjYjIzMzQ1ZGJiNjBkMDJkMTBhMWRlOGNkLnNldENvbnRlbnQoaHRtbF8xZjllMmExN2JkYTU0OTYyOWJjNGE0MzJjYWRhMjI0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2Q5OTJiNDk3MjM3ODQzNzdhYmU4YjhjZTJmNjJiMjgxLmJpbmRQb3B1cChwb3B1cF8xNDgyNzRkY2IyMzM0NWRiYjYwZDAyZDEwYTFkZThjZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMjNlMmIwYzI3MmI5NGFiOTlmMjRkMWNlMWM3YTg3MzkgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTIyODQ5OTk5MzMwNSwgLTczLjg4MDAzNDAwMTQwNzIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzcuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliZWQ3YzQ2YjdiOTQ4YzVhNDJiZTcyNzY2NzA1NmZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGExOGJiM2VmNDZiNGI2M2I3Nzg4NjIzZTFlMDRjOTUgPSAkKCc8ZGl2IGlkPSJodG1sXzRhMThiYjNlZjQ2YjRiNjNiNzc4ODYyM2UxZTA0Yzk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDcyLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliZWQ3YzQ2YjdiOTQ4YzVhNDJiZTcyNzY2NzA1NmZiLnNldENvbnRlbnQoaHRtbF80YTE4YmIzZWY0NmI0YjYzYjc3ODg2MjNlMWUwNGM5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzIzZTJiMGMyNzJiOTRhYjk5ZjI0ZDFjZTFjN2E4NzM5LmJpbmRQb3B1cChwb3B1cF85YmVkN2M0NmI3Yjk0OGM1YTQyYmU3Mjc2NjcwNTZmYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjAxYTNjOTQxMTdkNGUzZmEwODIyNjdmNjYxNmM5YjIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI4NTg5OTk5NTk2OCwgLTczLjg3NDQ1NTAwMjQxNjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNDAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdiZTA4MzU1MmIzNDQyMThiN2NmNDdkODRjMWJlMTI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjE3MWVkOTUzZmExNDk3Nzk0MzgxOTczYjY4ODk5OGQgPSAkKCc8ZGl2IGlkPSJodG1sX2IxNzFlZDk1M2ZhMTQ5Nzc5NDM4MTk3M2I2ODg5OThkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDc4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiZTA4MzU1MmIzNDQyMThiN2NmNDdkODRjMWJlMTI1LnNldENvbnRlbnQoaHRtbF9iMTcxZWQ5NTNmYTE0OTc3OTQzODE5NzNiNjg4OTk4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IwMWEzYzk0MTE3ZDRlM2ZhMDgyMjY3ZjY2MTZjOWIyLmJpbmRQb3B1cChwb3B1cF83YmUwODM1NTJiMzQ0MjE4YjdjZjQ3ZDg0YzFiZTEyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDQ3OGIxMGU1NzM0NDY0Y2IyYzY5M2MxMjM5YjMyMTcgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTI5NjE5OTk4MTY4OSwgLTczLjg3MzUyODAwMjcxMTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyNTJlOGYyMGE3MzRjZDI5NWE1ZjM3MmIyZThhMzYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNlZDg0MjdiMmNjNDlkNjhkZjFlZjFjODk5ZDRjNmYgPSAkKCc8ZGl2IGlkPSJodG1sXzkzZWQ4NDI3YjJjYzQ5ZDY4ZGYxZWYxYzg5OWQ0YzZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5MDc5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyNTJlOGYyMGE3MzRjZDI5NWE1ZjM3MmIyZThhMzYyLnNldENvbnRlbnQoaHRtbF85M2VkODQyN2IyY2M0OWQ2OGRmMWVmMWM4OTlkNGM2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzA0NzhiMTBlNTczNDQ2NGNiMmM2OTNjMTIzOWIzMjE3LmJpbmRQb3B1cChwb3B1cF82MjUyZThmMjBhNzM0Y2QyOTVhNWYzNzJiMmU4YTM2MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfMDA0YjhiNDg3NGI0NDY2NmI3MDhkMTA5ZmYwM2VjZDAgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NTMzMjU5OTk5ODAzMDUsIC03My44NzE3OTIwMDA5MzUwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODZhZjlmNDFiZGE0NjJlOTZiMjA4ZWE1MmJhNDg2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2ZmNiZWIyMTA0YzRlZmU4OTUxMzkyMjU2YzM4OWQyID0gJCgnPGRpdiBpZD0iaHRtbF9mNmZjYmViMjEwNGM0ZWZlODk1MTM5MjI1NmMzODlkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTA5MS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODZhZjlmNDFiZGE0NjJlOTZiMjA4ZWE1MmJhNDg2My5zZXRDb250ZW50KGh0bWxfZjZmY2JlYjIxMDRjNGVmZTg5NTEzOTIyNTZjMzg5ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wMDRiOGI0ODc0YjQ0NjY2YjcwOGQxMDlmZjAzZWNkMC5iaW5kUG9wdXAocG9wdXBfNjg2YWY5ZjQxYmRhNDYyZTk2YjIwOGVhNTJiYTQ4NjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzBlNDMyZjk4N2UxODQ4YzU5YTcyZmU0Yjc5NWVmMDJiID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MTUzOTk5ODYyNzgsIC03My44ODk5MzIwMDMyNjM1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNzg5MDJiNjVhYjk0NWMyOWY1Y2RiYzc2ZmM5ZjI4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1MjJmYWVkZTZkYTQ4ZDU5NDI4OGQzNjUxMTRmY2E5ID0gJCgnPGRpdiBpZD0iaHRtbF9iNTIyZmFlZGU2ZGE0OGQ1OTQyODhkMzY1MTE0ZmNhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3My4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNzg5MDJiNjVhYjk0NWMyOWY1Y2RiYzc2ZmM5ZjI4MC5zZXRDb250ZW50KGh0bWxfYjUyMmZhZWRlNmRhNDhkNTk0Mjg4ZDM2NTExNGZjYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8wZTQzMmY5ODdlMTg0OGM1OWE3MmZlNGI3OTVlZjAyYi5iaW5kUG9wdXAocG9wdXBfZjc4OTAyYjY1YWI5NDVjMjlmNWNkYmM3NmZjOWYyODApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2Y1OTA0MDg1MjM3YjQ0NTVhMzQxZGVjMzFhNWY2ZTQ4ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MjQ0OTk5NzcyOTQsIC03My44ODkwMjAwMDEzMTgxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDdjN2VhMzRmYjE0NjhkOTI2MzQ3OGRlNjY1YWY3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxN2I1M2I1M2IzMTRhMTViNGNkZGUyYmRjZTY0ZTVlID0gJCgnPGRpdiBpZD0iaHRtbF8yMTdiNTNiNTNiMzE0YTE1YjRjZGRlMmJkY2U2NGU1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA1OTQ3NC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDdjN2VhMzRmYjE0NjhkOTI2MzQ3OGRlNjY1YWY3ZC5zZXRDb250ZW50KGh0bWxfMjE3YjUzYjUzYjMxNGExNWI0Y2RkZTJiZGNlNjRlNWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mNTkwNDA4NTIzN2I0NDU1YTM0MWRlYzMxYTVmNmU0OC5iaW5kUG9wdXAocG9wdXBfZDQ3YzdlYTM0ZmIxNDY4ZDkyNjM0NzhkZTY2NWFmN2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzVhYjdjNTU2OTkyMzRkNDlhMDE5ZDg3M2QwOTg3M2JmID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MzU1OTk5ODU3MywgLTczLjg4ODAyOTAwMjc5ODE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3MjVkM2RkMGVhZTQ4YzZiZGY1YzFiZTg3M2M1MDFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGU2ZGExZTI1NTBiNDUxMWFiYjg1ZGU5ZjkxZjYyMzIgPSAkKCc8ZGl2IGlkPSJodG1sXzhlNmRhMWUyNTUwYjQ1MTFhYmI4NWRlOWY5MWY2MjMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc1LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3MjVkM2RkMGVhZTQ4YzZiZGY1YzFiZTg3M2M1MDFjLnNldENvbnRlbnQoaHRtbF84ZTZkYTFlMjU1MGI0NTExYWJiODVkZTlmOTFmNjIzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzVhYjdjNTU2OTkyMzRkNDlhMDE5ZDg3M2QwOTg3M2JmLmJpbmRQb3B1cChwb3B1cF9kNzI1ZDNkZDBlYWU0OGM2YmRmNWMxYmU4NzNjNTAxYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYjIxOTU1OTRiZjlkNDliOTgxMDU4ZWM4ZjVmMDk3Y2IgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk1NTE5OTk3NTAzNywgLTczLjg4NjE2ODAwMDUzMDIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjguMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFmNTIxNTliYTRiZTQxNThhMzljZjk5OTRhNjUwZTMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjRkYmFjMjM0NjZiNDQ1Zjk3YTkwM2QyNWQwMDEzN2UgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0ZGJhYzIzNDY2YjQ0NWY5N2E5MDNkMjVkMDAxMzdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc3LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmNTIxNTliYTRiZTQxNThhMzljZjk5OTRhNjUwZTMzLnNldENvbnRlbnQoaHRtbF9mNGRiYWMyMzQ2NmI0NDVmOTdhOTAzZDI1ZDAwMTM3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2IyMTk1NTk0YmY5ZDQ5Yjk4MTA1OGVjOGY1ZjA5N2NiLmJpbmRQb3B1cChwb3B1cF8xZjUyMTU5YmE0YmU0MTU4YTM5Y2Y5OTk0YTY1MGUzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZWJkOTA5ZmYxMDBiNDVmNjkyNDQxYmQ2NTA4YjJiNjIgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk2NTA5OTk3ODY4NiwgLTczLjg4NTI0MTAwMzQzOTI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhMTNiZTg0OTEzNDRkMDNhNTU0MGVkYWEyY2M0YTA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDgyN2Q0ZDUzZmI5NGI5NjkzN2UxZGFiOWVjYzBkNmEgPSAkKCc8ZGl2IGlkPSJodG1sXzA4MjdkNGQ1M2ZiOTRiOTY5MzdlMWRhYjllY2MwZDZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc4LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhMTNiZTg0OTEzNDRkMDNhNTU0MGVkYWEyY2M0YTA2LnNldENvbnRlbnQoaHRtbF8wODI3ZDRkNTNmYjk0Yjk2OTM3ZTFkYWI5ZWNjMGQ2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX2ViZDkwOWZmMTAwYjQ1ZjY5MjQ0MWJkNjUwOGIyYjYyLmJpbmRQb3B1cChwb3B1cF9jYTEzYmU4NDkxMzQ0ZDAzYTU1NDBlZGFhMmNjNGEwNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfNDlmYjU4MzczM2QyNDIxMTliYzY3NzRmMjI4ZjkyZjYgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDk3NDQ5OTk5NDAxNSwgLTczLjg4NDMxMTAwMjIzMzI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNzAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0NGJkMjUxYzUyMjQ1MThhYWY3MTRjNDYyZmIwYmE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDAzYTZhZDBmZTI4NDcyNjk2MDJmNjIwOWMwYmY0YWYgPSAkKCc8ZGl2IGlkPSJodG1sXzQwM2E2YWQwZmUyODQ3MjY5NjAyZjYyMDljMGJmNGFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDU5NDc5LjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0NGJkMjUxYzUyMjQ1MThhYWY3MTRjNDYyZmIwYmE4LnNldENvbnRlbnQoaHRtbF80MDNhNmFkMGZlMjg0NzI2OTYwMmY2MjA5YzBiZjRhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzQ5ZmI1ODM3MzNkMjQyMTE5YmM2Nzc0ZjIyOGY5MmY2LmJpbmRQb3B1cChwb3B1cF8yNDRiZDI1MWM1MjI0NTE4YWFmNzE0YzQ2MmZiMGJhOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfZTdiMjIyODNlOTQzNDgxYjg2OTA0Zjg0NjJlYjI3NmEgPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDcwMzg5OTk5MjM0MjYsIC03My44ODk1NzEwMDI5MTA4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTA2Y2NkYjc2Yzk0OGY3YTkwNjMyNmRiMmY0YzBiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhNGY5YmUzY2VlZjQ5Yzc5OWIzYWJmNDFiMDhlY2Y5ID0gJCgnPGRpdiBpZD0iaHRtbF82YTRmOWJlM2NlZWY0OWM3OTliM2FiZjQxYjA4ZWNmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NTYyMC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTA2Y2NkYjc2Yzk0OGY3YTkwNjMyNmRiMmY0YzBiNy5zZXRDb250ZW50KGh0bWxfNmE0ZjliZTNjZWVmNDljNzk5YjNhYmY0MWIwOGVjZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9lN2IyMjI4M2U5NDM0ODFiODY5MDRmODQ2MmViMjc2YS5iaW5kUG9wdXAocG9wdXBfYjUwNmNjZGI3NmM5NDhmN2E5MDYzMjZkYjJmNGMwYjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzZmNjQyMDg5NTRkYzQyYjdiMzdjOTMzNTY4YTgzMjA1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MTMzOTk5ODk3MTUsIC03My44ODg2NzgwMDI1MDEwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTJkY2Y1OTlmNDU0ZDUyYmQ0YTIzMWQ2YzBiNThjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkY2IzMTM4MjNjMjQ0MTBiZWQzNTg5Y2Y1NDE3NGQxID0gJCgnPGRpdiBpZD0iaHRtbF8yZGNiMzEzODIzYzI0NDEwYmVkMzU4OWNmNTQxNzRkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NTgzNC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTJkY2Y1OTlmNDU0ZDUyYmQ0YTIzMWQ2YzBiNThjNi5zZXRDb250ZW50KGh0bWxfMmRjYjMxMzgyM2MyNDQxMGJlZDM1ODljZjU0MTc0ZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV82ZjY0MjA4OTU0ZGM0MmI3YjM3YzkzMzU2OGE4MzIwNS5iaW5kUG9wdXAocG9wdXBfMzUyZGNmNTk5ZjQ1NGQ1MmJkNGEyMzFkNmMwYjU4YzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzkyYWQ5MmRjZWYwMjQ3MjhiYTYwNmE1NDRmNzM2OGFjID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3Mjg3MDAwMDAyNjQsIC03My44ODc2MDYwMDI5NzE2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OGYzZGI2ODM2Y2I0NGM5OWU2YTQ4Njk0N2I2OWYyOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmMDE0MTZiZjA3MTQyNWQ4NjA1ZDQzZDI0YzllYjJhID0gJCgnPGRpdiBpZD0iaHRtbF9mZjAxNDE2YmYwNzE0MjVkODYwNWQ0M2QyNGM5ZWIyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjAwNS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OGYzZGI2ODM2Y2I0NGM5OWU2YTQ4Njk0N2I2OWYyOC5zZXRDb250ZW50KGh0bWxfZmYwMTQxNmJmMDcxNDI1ZDg2MDVkNDNkMjRjOWViMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV85MmFkOTJkY2VmMDI0NzI4YmE2MDZhNTQ0ZjczNjhhYy5iaW5kUG9wdXAocG9wdXBfNThmM2RiNjgzNmNiNDRjOTllNmE0ODY5NDdiNjlmMjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzY4N2U5ZTRlMjAxMTQ3Mjk5OGQ0MWI4MDBiMjE0M2IxID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MzQwOTk5OTQwMDg2LCAtNzMuODg2NzE3MDAzNTY4NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2MS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjVjMzM2YTE2MTk1NDEyN2IyMmMyNWUxNmM0NTVjZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWU4MzY2MTY3YTM0YzcyOGUwY2UyYjk2ZDQ2NjA2OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNGFlODM2NjE2N2EzNGM3MjhlMGNlMmI5NmQ0NjYwNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjYxMTEuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjVjMzM2YTE2MTk1NDEyN2IyMmMyNWUxNmM0NTVjZjAuc2V0Q29udGVudChodG1sXzRhZTgzNjYxNjdhMzRjNzI4ZTBjZTJiOTZkNDY2MDY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfNjg3ZTllNGUyMDExNDcyOTk4ZDQxYjgwMGIyMTQzYjEuYmluZFBvcHVwKHBvcHVwX2I1YzMzNmExNjE5NTQxMjdiMjJjMjVlMTZjNDU1Y2YwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV8yOGQ0MDFhNzA1M2M0MTIwYTFhNDVjN2UwYWY2YTQ5ZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0NzQzOTk5OTc2OTg3LCAtNzMuODg1Nzg3MDAyODc4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM3LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYmI5YWI4ZmE4ODY0MTNkYmUxYzdjODEzM2ZjODgwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM0Y2EwMjg1ODZhNzQyYmZiYjdmM2M4NmZjY2U3OTA4ID0gJCgnPGRpdiBpZD0iaHRtbF8zNGNhMDI4NTg2YTc0MmJmYmI3ZjNjODZmY2NlNzkwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjMzOS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYmI5YWI4ZmE4ODY0MTNkYmUxYzdjODEzM2ZjODgwOS5zZXRDb250ZW50KGh0bWxfMzRjYTAyODU4NmE3NDJiZmJiN2YzYzg2ZmNjZTc5MDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yOGQ0MDFhNzA1M2M0MTIwYTFhNDVjN2UwYWY2YTQ5ZS5iaW5kUG9wdXAocG9wdXBfYWJiOWFiOGZhODg2NDEzZGJlMWM3YzgxMzNmYzg4MDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzNmODJiNjhiM2RmMDQ0NDVhN2I5N2NjN2YyODU4ZTMwID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NTM0OTk5Nzc0NTksIC03My44ODQ4NTUwMDMzMTM3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZTJkYTMyNGQ0YTU0YWY1ODkxNDVhY2FmMzQ3MWM2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3MjhmMDUzNWE3ZDRlNDg4ODY5ZjAzNmQ2ZTk0MGEwID0gJCgnPGRpdiBpZD0iaHRtbF9hNzI4ZjA1MzVhN2Q0ZTQ4ODg2OWYwMzZkNmU5NDBhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjQ0OC4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTJkYTMyNGQ0YTU0YWY1ODkxNDVhY2FmMzQ3MWM2Mi5zZXRDb250ZW50KGh0bWxfYTcyOGYwNTM1YTdkNGU0ODg4NjlmMDM2ZDZlOTQwYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8zZjgyYjY4YjNkZjA0NDQ1YTdiOTdjYzdmMjg1OGUzMC5iaW5kUG9wdXAocG9wdXBfZmUyZGEzMjRkNGE1NGFmNTg5MTQ1YWNhZjM0NzFjNjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzJjYThmOGUzMmEwMjQ0OGU5ODgwOWQ3ZDU4NjU0NTM3ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NjI5OTk5ODQ3MjYsIC03My44ODM5MzYwMDA4MTY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDc2LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTQ2NmM5Y2YyZTQ0MGJlODVmYzBlNjI1MGIzNzI2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRiYTQ1MDBkYWZjYTQ5NTg5MzM3YzMxNTI2ODc2ZTMwID0gJCgnPGRpdiBpZD0iaHRtbF80YmE0NTAwZGFmY2E0OTU4OTMzN2MzMTUyNjg3NmUzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjYzMS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOTQ2NmM5Y2YyZTQ0MGJlODVmYzBlNjI1MGIzNzI2Zi5zZXRDb250ZW50KGh0bWxfNGJhNDUwMGRhZmNhNDk1ODkzMzdjMzE1MjY4NzZlMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yY2E4ZjhlMzJhMDI0NDhlOTg4MDlkN2Q1ODY1NDUzNy5iaW5kUG9wdXAocG9wdXBfZTk0NjZjOWNmMmU0NDBiZTg1ZmMwZTYyNTBiMzcyNmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzJiZWExYjczZWQ5NDQyNjJiNGU3OTg1ZWRkOWIyMjU1ID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NzMzOTk5ODc1NDIsIC03My44ODI5OTkwMDMyNTc1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODk5OGE3OTZjNWI0ZWY4YjBlNTJhMzY3MTM0ZTY5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0ZTJjOTUwNTk0NTQ4N2Q4YjU5MGVhMjNkNGIwYjk4ID0gJCgnPGRpdiBpZD0iaHRtbF80NGUyYzk1MDU5NDU0ODdkOGI1OTBlYTIzZDRiMGI5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjcxNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODk5OGE3OTZjNWI0ZWY4YjBlNTJhMzY3MTM0ZTY5Ni5zZXRDb250ZW50KGh0bWxfNDRlMmM5NTA1OTQ1NDg3ZDhiNTkwZWEyM2Q0YjBiOTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV8yYmVhMWI3M2VkOTQ0MjYyYjRlNzk4NWVkZDliMjI1NS5iaW5kUG9wdXAocG9wdXBfNjg5OThhNzk2YzViNGVmOGIwZTUyYTM2NzEzNGU2OTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlX2ZlY2IzMWU4MDNiYzRkMWZhZDExMzJlMTFmYTVjYjRlID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3ODI5OTk5OTk3MTUsIC03My44ODIwNzEwMDM0NDI3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDM0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZjFkMzU3YjIwZTU0YTJkOGJhMDc3NGJmOTJlMjU0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkMDM4ZjgzMmM1MTQ0ZjZhNDcyNjk4ODk1OTVlMGFmID0gJCgnPGRpdiBpZD0iaHRtbF9mZDAzOGY4MzJjNTE0NGY2YTQ3MjY5ODg5NTk1ZTBhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2NjkyNi4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZjFkMzU3YjIwZTU0YTJkOGJhMDc3NGJmOTJlMjU0ZS5zZXRDb250ZW50KGh0bWxfZmQwMzhmODMyYzUxNDRmNmE0NzI2OTg4OTU5NWUwYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9mZWNiMzFlODAzYmM0ZDFmYWQxMTMyZTExZmE1Y2I0ZS5iaW5kUG9wdXAocG9wdXBfNGYxZDM1N2IyMGU1NGEyZDhiYTA3NzRiZjkyZTI1NGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgY2lyY2xlXzI3OGQ0NjFhMzQ4YTRiNTViZTQ3YzRkNGVlM2Y1OGVkID0gTC5jaXJjbGUoCiAgICAgICAgICAgICAgICBbNDAuNzQ3OTI2OTk5ODExMTA2LCAtNzMuODgxMTM3MDAwOTE1NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICIjMzM4OGZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2MS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZGFhOGZiZjdlNmU0NDc5OGJhODljM2ZmY2UwODQ5NjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjExZjkwZGM4Y2Q2NDRlN2EwNzVkZDAzOTcxNzgxNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NzQ0Y2Q3NGFlMmQ0ZmNmYTZkYTY0ZmUyYTk1MDU2MyA9ICQoJzxkaXYgaWQ9Imh0bWxfNTc0NGNkNzRhZTJkNGZjZmE2ZGE2NGZlMmE5NTA1NjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxQSVMgNjcxMjUuMDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjExZjkwZGM4Y2Q2NDRlN2EwNzVkZDAzOTcxNzgxNjYuc2V0Q29udGVudChodG1sXzU3NDRjZDc0YWUyZDRmY2ZhNmRhNjRmZTJhOTUwNTYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfMjc4ZDQ2MWEzNDhhNGI1NWJlNDdjNGQ0ZWUzZjU4ZWQuYmluZFBvcHVwKHBvcHVwX2YxMWY5MGRjOGNkNjQ0ZTdhMDc1ZGQwMzk3MTc4MTY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIGNpcmNsZV83YmRkM2RmOWQwNDk0OTdiODhhZTUzNzQ0MTY0YWYyZSA9IEwuY2lyY2xlKAogICAgICAgICAgICAgICAgWzQwLjc0ODIxNTk5OTg4NDM0NCwgLTczLjg3ODQwNjAwMzM4ODczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2RhYThmYmY3ZTZlNDQ3OThiYTg5YzNmZmNlMDg0OTYwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2NTE5ZDU4NWE5OTQ1MzViNmU5MjRkNTkwMTBmMWRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzU0YjVlZmYxYTAyNDZlMTlhMzM4OWVkNjdjZDU4YTQgPSAkKCc8ZGl2IGlkPSJodG1sXzM1NGI1ZWZmMWEwMjQ2ZTE5YTMzODllZDY3Y2Q1OGE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MUElTIDY3NjEwLjA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2NTE5ZDU4NWE5OTQ1MzViNmU5MjRkNTkwMTBmMWRiLnNldENvbnRlbnQoaHRtbF8zNTRiNWVmZjFhMDI0NmUxOWEzMzg5ZWQ2N2NkNThhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlXzdiZGQzZGY5ZDA0OTQ5N2I4OGFlNTM3NDQxNjRhZjJlLmJpbmRQb3B1cChwb3B1cF9iNjUxOWQ1ODVhOTk0NTM1YjZlOTI0ZDU5MDEwZjFkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBjaXJjbGVfYWJhMzFmNDQ4ZjhmNDdlZWIxYjk0MTFiZTU0NGU0ZDggPSBMLmNpcmNsZSgKICAgICAgICAgICAgICAgIFs0MC43NDgzNjg5OTk3NTY5NiwgLTczLjg3NjkyNTAwMDQ2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogIiMzMzg4ZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDI4LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kYWE4ZmJmN2U2ZTQ0Nzk4YmE4OWMzZmZjZTA4NDk2MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGE5ZmNlNjQ2MTA0YThkYjMwOWY1MmQ4MTlmM2Y1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3NzEzYjA2YWYyZTQzN2ViOWFjZWUyZjEwMWEyOWY0ID0gJCgnPGRpdiBpZD0iaHRtbF85NzcxM2IwNmFmMmU0MzdlYjlhY2VlMmYxMDFhMjlmNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TFBJUyA2OTI2OS4wPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOGE5ZmNlNjQ2MTA0YThkYjMwOWY1MmQ4MTlmM2Y1ZC5zZXRDb250ZW50KGh0bWxfOTc3MTNiMDZhZjJlNDM3ZWI5YWNlZTJmMTAxYTI5ZjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9hYmEzMWY0NDhmOGY0N2VlYjFiOTQxMWJlNTQ0ZTRkOC5iaW5kUG9wdXAocG9wdXBfZjhhOWZjZTY0NjEwNGE4ZGIzMDlmNTJkODE5ZjNmNWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" 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 0x21836f63b38>"
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### A slippy map of all LPIS intersections\n\nWe use the Folium MarkerCluster option so that the markers 'cluster' when we zoom out rather than overwhelm the map."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Collapse the entire panel to a dataframe with just LPIS intersections. We can use the same columns and dictionary as used above."
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "gdf0 = gdf.groupby('intersection_id')[allcols].agg(aggdict)",
"execution_count": 52,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "A mask to just select the LPIS intersections"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "LPIS = (gdf0.flag_LPIS_ever == 1)",
"execution_count": 53,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "gdf0[LPIS].shape",
"execution_count": 54,
"outputs": [
{
"data": {
"text/plain": "(2126, 8)"
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Markers for the LPIS intersections"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "locations = list(zip(gdf0[LPIS].latitude, gdf0[LPIS].longitude,))\nlocations[:4]",
"execution_count": 55,
"outputs": [
{
"data": {
"text/plain": "[(40.7543329998393, -73.82334300046672),\n (40.81636099985319, -73.9540890000869),\n (40.73378299979906, -73.8148000031035),\n (40.74347199986652, -73.97675800003843)]"
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "map2 = folium.Map(location=[40.7128, -74.006], zoom_start =13, tiles='OpenStreetMap')\nmarker_cluster = MarkerCluster().add_to(map2)",
"execution_count": 51,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "for idx, row in gdf0[LPIS].iterrows():\n folium.Marker(location=[row.latitude, row.longitude],\n popup=f'ID={row.intersection_id}, inj ={row.personsinjured}'\n ).add_to(marker_cluster)\n ",
"execution_count": 58,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "map2.save('lpis.html')",
"execution_count": 59,
"outputs": []
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "map2",
"execution_count": 62,
"outputs": [
{
"data": {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment