Skip to main content

Code Tutorials

Project description

Data Handling Guidebook

The one stop shop to learn about data intake, processing, and visualization.

The Dataplay Handbook uses techniques covered in the Datalabs Guidebook.

Open Source NPM License Active Python Versions GitHub last commit No Maintenance Intended

GitHub stars GitHub watchers GitHub forks GitHub followers

Tweet Twitter Follow

Install

The code is on PyPI so you can just run:

pip install dataplay geopandas dexplot

From the terminal to install the code and its dependencies

How to use

Import the installed module into your code and use like so:

from dataplay.acsDownload import retrieve_acs_data 
retrieve_acs_data(state, county, tract, tableId, year, saveAcs)

and

from dataplay.merge import mergeDatasets
mergeDatasets(left_ds=False, right_ds=False, crosswalk_ds=False,  use_crosswalk = True, left_col=False, right_col=False, crosswalk_left_col = False, crosswalk_right_col = False, merge_how=False, interactive=True)

Heres an example:

Define our download parameters.

More information on these parameters can be found in the tutorials!

tract = '*'
county = '510'
state = '24'
tableId = 'B19001'
year = '17'
saveAcs = False
df = retrieve_acs_data(state, county, tract, tableId, year, saveAcs)
df.head()
Number of Columns 17
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
B19001_001E_Total B19001_002E_Total_Less_than_$10_000 B19001_003E_Total_$10_000_to_$14_999 ... state county tract
NAME
Census Tract 1901 796 237 76 ... 24 510 190100
Census Tract 1902 695 63 87 ... 24 510 190200
Census Tract 2201 2208 137 229 ... 24 510 220100
Census Tract 2303 632 3 20 ... 24 510 230300
Census Tract 2502.07 836 102 28 ... 24 510 250207

5 rows × 20 columns

# Primary Table
left_ds = df
left_col = 'tract'

# Crosswalk Table
# Table: Crosswalk Census Communities
# 'TRACT2010', 'GEOID2010', 'CSA2010'
crosswalk_ds = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vREwwa_s8Ix39OYGnnS_wA8flOoEkU7reIV4o3ZhlwYhLXhpNEvnOia_uHUDBvnFptkLLHHlaQNvsQE/pub?output=csv'
use_crosswalk = True
crosswalk_left_col = 'TRACT2010'
crosswalk_right_col = 'GEOID2010'

# Secondary Table
# Table: Baltimore Boundaries
# 'TRACTCE10', 'GEOID10', 'CSA', 'NAME10', 'Tract', 'geometry'
right_ds = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQ8xXdUaT17jkdK0MWTJpg3GOy6jMWeaXTlguXNjCSb8Vr_FanSZQRaTU-m811fQz4kyMFK5wcahMNY/pub?gid=886223646&single=true&output=csv'
right_col ='GEOID10'

merge_how = 'geometry'
interactive = True
merge_how = 'outer'

banksPd = mergeDatasets( left_ds=left_ds, left_col=left_col, 
              use_crosswalk=use_crosswalk, crosswalk_ds=crosswalk_ds,
              crosswalk_left_col = crosswalk_left_col, crosswalk_right_col = crosswalk_right_col,
              right_ds=right_ds, right_col=right_col, 
              merge_how=merge_how, interactive = interactive )
 Handling Left Dataset
retrieveDatasetFromUrl                       B19001_001E_Total  \
NAME                                      
Census Tract 1901                   796   
Census Tract 1902                   695   
Census Tract 2201                  2208   
Census Tract 2303                   632   
Census Tract 2502.07                836   
...                                 ...   
Census Tract 2720.05               1219   
Census Tract 1202.01                883   
Census Tract 2720.04               1835   
Census Tract 2720.06               1679   
Baltimore City                   239791   

                      B19001_002E_Total_Less_than_$10_000  \
NAME                                                        
Census Tract 1901                     237                   
Census Tract 1902                      63                   
Census Tract 2201                     137                   
Census Tract 2303                       3                   
Census Tract 2502.07                  102                   
...                                   ...                   
Census Tract 2720.05                   84                   
Census Tract 1202.01                   78                   
Census Tract 2720.04                  155                   
Census Tract 2720.06                  347                   
Baltimore City                      29106                   

                      B19001_003E_Total_$10_000_to_$14_999  \
NAME                                                         
Census Tract 1901                      76                    
Census Tract 1902                      87                    
Census Tract 2201                     229                    
Census Tract 2303                      20                    
Census Tract 2502.07                   28                    
...                                   ...                    
Census Tract 2720.05                   41                    
Census Tract 1202.01                   27                    
Census Tract 2720.04                  109                    
Census Tract 2720.06                  165                    
Baltimore City                      15759                    

                      ...  \
NAME                  ...   
Census Tract 1901     ...   
Census Tract 1902     ...   
Census Tract 2201     ...   
Census Tract 2303     ...   
Census Tract 2502.07  ...   
...                   ...   
Census Tract 2720.05  ...   
Census Tract 1202.01  ...   
Census Tract 2720.04  ...   
Census Tract 2720.06  ...   
Baltimore City        ...   

                      state  \
NAME                          
Census Tract 1901        24   
Census Tract 1902        24   
Census Tract 2201        24   
Census Tract 2303        24   
Census Tract 2502.07     24   
...                     ...   
Census Tract 2720.05     24   
Census Tract 1202.01     24   
Census Tract 2720.04     24   
Census Tract 2720.06     24   
Baltimore City           24   

                      county  \
NAME                           
Census Tract 1901        510   
Census Tract 1902        510   
Census Tract 2201        510   
Census Tract 2303        510   
Census Tract 2502.07     510   
...                      ...   
Census Tract 2720.05     510   
Census Tract 1202.01     510   
Census Tract 2720.04     510   
Census Tract 2720.06     510   
Baltimore City           510   

                       tract  
NAME                          
Census Tract 1901     190100  
Census Tract 1902     190200  
Census Tract 2201     220100  
Census Tract 2303     230300  
Census Tract 2502.07  250207  
...                      ...  
Census Tract 2720.05  272005  
Census Tract 1202.01  120201  
Census Tract 2720.04  272004  
Census Tract 2720.06  272006  
Baltimore City         10000  

[201 rows x 20 columns]
checkDataSetExists True
checkDataSetExists True
checkDataSetExists True
Left Dataset and Columns are Valid

 Handling Right Dataset
retrieveDatasetFromUrl https://docs.google.com/spreadsheets/d/e/2PACX-1vQ8xXdUaT17jkdK0MWTJpg3GOy6jMWeaXTlguXNjCSb8Vr_FanSZQRaTU-m811fQz4kyMFK5wcahMNY/pub?gid=886223646&single=true&output=csv
checkDataSetExists False
retrieveDatasetFromUrl https://docs.google.com/spreadsheets/d/e/2PACX-1vQ8xXdUaT17jkdK0MWTJpg3GOy6jMWeaXTlguXNjCSb8Vr_FanSZQRaTU-m811fQz4kyMFK5wcahMNY/pub?gid=886223646&single=true&output=csv
checkDataSetExists True
checkDataSetExists True
checkDataSetExists True
Right Dataset and Columns are Valid

 Checking the merge_how Parameter
merge_how operator is Valid outer
checkDataSetExists False

 Checking the Crosswalk Parameter

 Handling Crosswalk Left Dataset Loading
retrieveDatasetFromUrl https://docs.google.com/spreadsheets/d/e/2PACX-1vREwwa_s8Ix39OYGnnS_wA8flOoEkU7reIV4o3ZhlwYhLXhpNEvnOia_uHUDBvnFptkLLHHlaQNvsQE/pub?output=csv
checkDataSetExists False
retrieveDatasetFromUrl https://docs.google.com/spreadsheets/d/e/2PACX-1vREwwa_s8Ix39OYGnnS_wA8flOoEkU7reIV4o3ZhlwYhLXhpNEvnOia_uHUDBvnFptkLLHHlaQNvsQE/pub?output=csv
checkDataSetExists True
checkDataSetExists True
checkDataSetExists True

 Handling Crosswalk Right Dataset Loading
retrieveDatasetFromUrl https://docs.google.com/spreadsheets/d/e/2PACX-1vREwwa_s8Ix39OYGnnS_wA8flOoEkU7reIV4o3ZhlwYhLXhpNEvnOia_uHUDBvnFptkLLHHlaQNvsQE/pub?output=csv
checkDataSetExists False
retrieveDatasetFromUrl https://docs.google.com/spreadsheets/d/e/2PACX-1vREwwa_s8Ix39OYGnnS_wA8flOoEkU7reIV4o3ZhlwYhLXhpNEvnOia_uHUDBvnFptkLLHHlaQNvsQE/pub?output=csv
checkDataSetExists True
checkDataSetExists True
checkDataSetExists True

 Assessment Completed

 Ensuring Left->Crosswalk compatability

 Ensuring Crosswalk->Right compatability
PERFORMING MERGE LEFT->CROSSWALK
left_on TRACT2010 right_on GEOID2010 how outer
PERFORMING MERGE LEFT->RIGHT
left_col GEOID2010 right_col GEOID10 how outer

 Local Column Values Not Matched 
[0]
1

 Crosswalk Unique Column Values
[24510151000 24510080700 24510080500 24510150500 24510120100 24510090900
 24510280301 24510130803 24510130700 24510130600 24510100100 24510110100
 24510270501 24510270302 24510270401 24510120700 24510271200 24510110200
 24510271002 24510280404 24510270804 24510260203 24510260101 24510260102
 24510090800 24510090300 24510270801 24510120400 24510090200 24510271001
 24510130200 24510140100 24510270600 24510270701 24510130100 24510270803
 24510280200 24510280302 24510130804 24510271101 24510271102 24510150800
 24510270301 24510170100 24510090500 24510170200 24510090600 24510120300
 24510120500 24510130300 24510120600 24510100200 24510150400 24510261000
 24510280403 24510010400 24510250303 24510260303 24510200701 24510272003
 24510070200 24510280102 24510151200 24510260900 24510200400 24510261100
 24510200500 24510250103 24510260301 24510200600 24510130806 24510270702
 24510180200 24510190100 24510270805 24510200200 24510150702 24510270402
 24510250206 24510150701 24510151100 24510040100 24510270101 24510270200
 24510190200 24510271501 24510210100 24510180300 24510180100 24510150100
 24510200300 24510200100 24510090700 24510190300 24510090400 24510200702
 24510250500 24510280401 24510160801 24510160802 24510270703 24510220100
 24510250301 24510270502 24510030100 24510020200 24510250600 24510240200
 24510150900 24510020300 24510270102 24510250207 24510030200 24510250101
 24510280402 24510080102 24510040200 24510200800 24510270903 24510060200
 24510260800 24510160400 24510280101 24510250401 24510240400 24510250102
 24510250205 24510240300 24510271802 24510060100 24510010300 24510010200
 24510270902 24510010100 24510270901 24510270802 24510260605 24510250402
 24510271801 24510260201 24510260401 24510271300 24510230100 24510080101
 24510060300 24510140200 24510160100 24510160200 24510260404 24510150300
 24510150200 24510160700 24510260202 24510271400 24510130805 24510140300
 24510170300 24510080302 24510100300 24510260501 24510160300 24510130400
 24510160600 24510271600 24510271700 24510151300 24510210200 24510271503
 24510060400 24510250204 24510070400 24510230200 24510240100 24510020100
 24510260604 24510120202 24510272007 24510272005 24510230300 24510260302
 24510080200 24510080301 24510010500 24510070100 24510250203 24510070300
 24510080600 24510271900 24510080400 24510120201 24510272004 24510272006
 24510280500 24510260403 24510150600 24510080800 24510160500 24510090100
 24510260402 24510260700]


/usr/local/lib/python3.6/dist-packages/pandas/core/ops/array_ops.py:253: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  res_values = method(rvalues)
banksPd.head()
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
B19001_001E_Total B19001_002E_Total_Less_than_$10_000 B19001_003E_Total_$10_000_to_$14_999 ... CSA Tract geometry
0 796 237 76 ... Southwest Baltimore 1901.0 POLYGON ((-76.63...
1 695 63 87 ... Southwest Baltimore 1902.0 POLYGON ((-76.63...
2 2208 137 229 ... Inner Harbor/Fed... 2201.0 MULTIPOLYGON (((...
3 632 3 20 ... South Baltimore 2303.0 MULTIPOLYGON (((...
4 836 102 28 ... Cherry Hill 2502.0 POLYGON ((-76.62...

5 rows × 27 columns

type(banksPd)
pandas.core.frame.DataFrame
from dataplay.geoms import readInGeometryData
csaMap = readInGeometryData(url=banksPd, porg='g', geom='geometry', lat=False, lng=False, revgeocode=False, save=False, in_crs=2248, out_crs=2248)
isGeoDataframe
RECIEVED url:      B19001_001E_Total  \
0                  796   
1                  695   
2                 2208   
3                  632   
4                  836   
..                 ...   
195               1848   
196               1219   
197                883   
198               1835   
199               1679   

     B19001_002E_Total_Less_than_$10_000  \
0                    237                   
1                     63                   
2                    137                   
3                      3                   
4                    102                   
..                   ...                   
195                  153                   
196                   84                   
197                   78                   
198                  155                   
199                  347                   

     B19001_003E_Total_$10_000_to_$14_999  \
0                     76                    
1                     87                    
2                    229                    
3                     20                    
4                     28                    
..                   ...                    
195                   68                    
196                   41                    
197                   27                    
198                  109                    
199                  165                    

     ...  \
0    ...   
1    ...   
2    ...   
3    ...   
4    ...   
..   ...   
195  ...   
196  ...   
197  ...   
198  ...   
199  ...   

                     CSA  \
0    Southwest Baltimore   
1    Southwest Baltimore   
2    Inner Harbor/Fed...   
3        South Baltimore   
4            Cherry Hill   
..                   ...   
195       Glen-Fallstaff   
196  Cross-Country/Ch...   
197  Greater Charles ...   
198  Cross-Country/Ch...   
199       Glen-Fallstaff   

      Tract  \
0    1901.0   
1    1902.0   
2    2201.0   
3    2303.0   
4    2502.0   
..      ...   
195  2720.0   
196  2720.0   
197  1202.0   
198  2720.0   
199  2720.0   

                geometry  
0    POLYGON ((-76.63...  
1    POLYGON ((-76.63...  
2    MULTIPOLYGON (((...  
3    MULTIPOLYGON (((...  
4    POLYGON ((-76.62...  
..                   ...  
195  POLYGON ((-76.69...  
196  POLYGON ((-76.69...  
197  POLYGON ((-76.60...  
198  POLYGON ((-76.69...  
199  POLYGON ((-76.68...  

[200 rows x 27 columns], 
 porg: g, 
 geom: geometry, 
 lat: False, 
 lng: False, 
 revgeocode: False, 
 in_crs: 2248, 
 out_crs: 2248
Index(['B19001_001E_Total',
       'B19001_002E_Total_Less_than_$10_000',
       'B19001_003E_Total_$10_000_to_$14_999',
       'B19001_004E_Total_$15_000_to_$19_999',
       'B19001_005E_Total_$20_000_to_$24_999',
       'B19001_006E_Total_$25_000_to_$29_999',
       'B19001_007E_Total_$30_000_to_$34_999',
       'B19001_008E_Total_$35_000_to_$39_999',
       'B19001_009E_Total_$40_000_to_$44_999',
       'B19001_010E_Total_$45_000_to_$49_999',
       'B19001_011E_Total_$50_000_to_$59_999',
       'B19001_012E_Total_$60_000_to_$74_999',
       'B19001_013E_Total_$75_000_to_$99_999',
       'B19001_014E_Total_$100_000_to_$124_999',
       'B19001_015E_Total_$125_000_to_$149_999',
       'B19001_016E_Total_$150_000_to_$199_999',
       'B19001_017E_Total_$200_000_or_more',
       'state',
       'county',
       'tract',
       'GEOID2010',
       'TRACTCE10',
       'GEOID10',
       'NAME10',
       'CSA',
       'Tract',
       'geometry'],
      dtype='object')
csaMap.columns
Index(['B19001_001E_Total',
       'B19001_002E_Total_Less_than_$10_000',
       'B19001_003E_Total_$10_000_to_$14_999',
       'B19001_004E_Total_$15_000_to_$19_999',
       'B19001_005E_Total_$20_000_to_$24_999',
       'B19001_006E_Total_$25_000_to_$29_999',
       'B19001_007E_Total_$30_000_to_$34_999',
       'B19001_008E_Total_$35_000_to_$39_999',
       'B19001_009E_Total_$40_000_to_$44_999',
       'B19001_010E_Total_$45_000_to_$49_999',
       'B19001_011E_Total_$50_000_to_$59_999',
       'B19001_012E_Total_$60_000_to_$74_999',
       'B19001_013E_Total_$75_000_to_$99_999',
       'B19001_014E_Total_$100_000_to_$124_999',
       'B19001_015E_Total_$125_000_to_$149_999',
       'B19001_016E_Total_$150_000_to_$199_999',
       'B19001_017E_Total_$200_000_or_more',
       'state',
       'county',
       'tract',
       'GEOID2010',
       'TRACTCE10',
       'GEOID10',
       'NAME10',
       'CSA',
       'Tract',
       'geometry'],
      dtype='object')
csaMap.plot(column='B19001_002E_Total_Less_than_$10_000')
<matplotlib.axes._subplots.AxesSubplot at 0x7f277d7b0630>

png

from dataplay.geoms import workWithGeometryData
foodPantryLocationsUrl = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vT3lG0n542sIGE2O-C8fiXx-qUZG2WDO6ezRGcNsS4z8MM30XocVZ90P1UQOIXO2w/pub?gid=1152681223&single=true&output=csv'
crs = {'init' :'epsg:2248'} 
foodPantryLocations = readInGeometryData(url=foodPantryLocationsUrl, porg='p', geom=False, lat='Y', lng='X', revgeocode=False,  save=False, in_crs=crs, out_crs=crs)

panp = workWithGeometryData( 'pandp', foodPantryLocations[ foodPantryLocations.City_1 == 'Baltimore' ], csaMap, pntsClr='red', polyColorCol='B19001_002E_Total_Less_than_$10_000')
RECIEVED url: https://docs.google.com/spreadsheets/d/e/2PACX-1vT3lG0n542sIGE2O-C8fiXx-qUZG2WDO6ezRGcNsS4z8MM30XocVZ90P1UQOIXO2w/pub?gid=1152681223&single=true&output=csv, 
 porg: p, 
 geom: False, 
 lat: Y, 
 lng: X, 
 revgeocode: False, 
 in_crs: {'init': 'epsg:2248'}, 
 out_crs: {'init': 'epsg:2248'}
Index(['X',
       'Y',
       'OBJECTID',
       'Name',
       'Address',
       'City_1',
       'State',
       'Zip',
       '# in Zip',
       'FIPS'],
      dtype='object')
mapPointsandPolygons


/usr/local/lib/python3.6/dist-packages/pyproj/crs/crs.py:53: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6
  return _prepare_from_string(" ".join(pjargs))

png

from dataplay.geoms import map_points
map_points(foodPantryLocations, lat_col='Y', lon_col='X', zoom_start=11, plot_points=True, pt_radius=15, draw_heatmap=True, heat_map_weights_col=None, heat_map_weights_normalize=True, heat_map_radius=15)
/usr/local/lib/python3.6/dist-packages/dataplay/geoms.py:190: FutureWarning: Method `add_children` is deprecated. Please use `add_child` instead.
  curr_map.add_children(plugins.HeatMap(stations, radius=heat_map_radius))
Make this Notebook Trusted to load map: File -> Trust Notebook<iframe src="about:blank" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vbGVhZmxldC5naXRodWIuaW8vTGVhZmxldC5oZWF0L2Rpc3QvbGVhZmxldC1oZWF0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4gICAgCiAgICAKICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIiID48L2Rpdj4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyID0gTC5tYXAoCiAgICAgICAgJ21hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5MicsIHsKICAgICAgICBjZW50ZXI6IFszOS4xMzYzOTk4NSwgLTc2Ljc2MzM1MDE1XSwKICAgICAgICB6b29tOiAxMSwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CgoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfYWY0M2YwZDVjYTNhNGVhODlhM2RiMjYyNzc0OTMwMmUgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NmQ0MjA5MWU1NmE0YWM3YmZhODYyODk0ZmM4ZjNjMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAxOTcyMTM4LCAtNzcuMDU2NzMxMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTk5MTRlODNmMzk0NDM1MWJhYTNiNzljZGFkZDE3OGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjIxZGVkM2Y2ZWQzNDk5NmIwMDFlY2UyYzhiYWZiNGYgPSAkKGA8ZGl2IGlkPSJodG1sX2YyMWRlZDNmNmVkMzQ5OTZiMDAxZWNlMmM4YmFmYjRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WaWN0b3J5IEZvcmVzdCAtIE1HVEc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5OTE0ZTgzZjM5NDQzNTFiYWEzYjc5Y2RhZGQxNzhhLnNldENvbnRlbnQoaHRtbF9mMjFkZWQzZjZlZDM0OTk2YjAwMWVjZTJjOGJhZmI0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NmQ0MjA5MWU1NmE0YWM3YmZhODYyODk0ZmM4ZjNjMS5iaW5kUG9wdXAocG9wdXBfNTk5MTRlODNmMzk0NDM1MWJhYTNiNzljZGFkZDE3OGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmMTkyNmQxZWUwNTQzZGNiMmM0MmVlYWFiZTNhZDFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODE3MjQzLCAtNzYuOTkwMzU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjNmQzNDhjNDljMjQyYTdhMDYzZmJiYWUzOWE0YTIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg2NWUxZjQwZTRlNDRlZmI4ZmIzMTc3ODJlZWIxMWJjID0gJChgPGRpdiBpZD0iaHRtbF84NjVlMWY0MGU0ZTQ0ZWZiOGZiMzE3NzgyZWViMTFiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R2xhc3NtYW5vciBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYzZkMzQ4YzQ5YzI0MmE3YTA2M2ZiYmFlMzlhNGEyMi5zZXRDb250ZW50KGh0bWxfODY1ZTFmNDBlNGU0NGVmYjhmYjMxNzc4MmVlYjExYmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2YxOTI2ZDFlZTA1NDNkY2IyYzQyZWVhYWJlM2FkMWMuYmluZFBvcHVwKHBvcHVwX2FjNmQzNDhjNDljMjQyYTdhMDYzZmJiYWUzOWE0YTIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YzUyOTlmYTk5MzA0MTgxYTJkMGRlNjY5YTE0Mzg4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAxOTA5NTE0LCAtNzYuOTkxNTUzNTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Y5ZDNiNTYwZjMxNGM0MmJiNDlhZWI1ODgxNjIzYzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDJiMmJlMjE5NTdkNGJkYWI0ZmJiZjMyZTY2OGVjNDIgPSAkKGA8ZGl2IGlkPSJodG1sXzAyYjJiZTIxOTU3ZDRiZGFiNGZiYmYzMmU2NjhlYzQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BcHBsZSBCbG9zc29tczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2Y5ZDNiNTYwZjMxNGM0MmJiNDlhZWI1ODgxNjIzYzguc2V0Q29udGVudChodG1sXzAyYjJiZTIxOTU3ZDRiZGFiNGZiYmYzMmU2NjhlYzQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZjNTI5OWZhOTkzMDQxODFhMmQwZGU2NjlhMTQzODhjLmJpbmRQb3B1cChwb3B1cF8zZjlkM2I1NjBmMzE0YzQyYmI0OWFlYjU4ODE2MjNjOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWNhMDFiNGUyMjg5NDBmZWFiZTcxOTMyY2YzNzkwNmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMjQ2MjcwMSwgLTc3LjE0OTI4NzI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IwMTI1MTQ5NWUwYzQxMDFiYTI2Y2NmMjZkYmQwMWUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5OGYxYjJmM2M5NTQzM2U5ODI4OGI2MzlhNThiYTQ3ID0gJChgPGRpdiBpZD0iaHRtbF9kOThmMWIyZjNjOTU0MzNlOTgyODhiNjM5YTU4YmE0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGFrZXZpZXcgQXBhcnRtZW50IEhvbWVzIC0gTUdURzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjAxMjUxNDk1ZTBjNDEwMWJhMjZjY2YyNmRiZDAxZTEuc2V0Q29udGVudChodG1sX2Q5OGYxYjJmM2M5NTQzM2U5ODI4OGI2MzlhNThiYTQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzljYTAxYjRlMjI4OTQwZmVhYmU3MTkzMmNmMzc5MDZhLmJpbmRQb3B1cChwb3B1cF9iMDEyNTE0OTVlMGM0MTAxYmEyNmNjZjI2ZGJkMDFlMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQwOThhZjBjYjY2NDZhYmE0ZjMyNjJmOWE4NTkyYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44OTA3NTY0MSwgLTc2Ljg4OTc0MjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmMzVhN2QyMGFjYTRhMzNhNGFiMWQ1ZGNhY2ZmNjZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3NWU0N2UwMWI0YTRjNzg5Y2RmYWFmZjFhMWYxMTBiID0gJChgPGRpdiBpZD0iaHRtbF9mNzVlNDdlMDFiNGE0Yzc4OWNkZmFhZmYxYTFmMTEwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbCBHYXJkZW5zPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZjM1YTdkMjBhY2E0YTMzYTRhYjFkNWRjYWNmZjY2Yi5zZXRDb250ZW50KGh0bWxfZjc1ZTQ3ZTAxYjRhNGM3ODljZGZhYWZmMWExZjExMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmQwOThhZjBjYjY2NDZhYmE0ZjMyNjJmOWE4NTkyYjMuYmluZFBvcHVwKHBvcHVwXzJmMzVhN2QyMGFjYTRhMzNhNGFiMWQ1ZGNhY2ZmNjZiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NTdiZGFlZjgwMWE0ZGQ1OThlYTVjODAzOTI5NTkwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjE4MzI4NzU5LCAtNzcuMjE0NjM1MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2E3NTUyMjk1ZDI4NGE4ZWIxYTk2ZTg1Y2Q5OTg4ZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTg5MjQ0YWQ1OTdmNDlmODkwOWRiYWQ2YjU1NDg1NWYgPSAkKGA8ZGl2IGlkPSJodG1sXzU4OTI0NGFkNTk3ZjQ5Zjg5MDlkYmFkNmI1NTQ4NTVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXRraW5zIE1pbGwgSGlnaCBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhNzU1MjI5NWQyODRhOGViMWE5NmU4NWNkOTk4OGQ5LnNldENvbnRlbnQoaHRtbF81ODkyNDRhZDU5N2Y0OWY4OTA5ZGJhZDZiNTU0ODU1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NTdiZGFlZjgwMWE0ZGQ1OThlYTVjODAzOTI5NTkwMS5iaW5kUG9wdXAocG9wdXBfM2E3NTUyMjk1ZDI4NGE4ZWIxYTk2ZTg1Y2Q5OTg4ZDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4ZjkwNjNjYjU5NjQ1YmZhNGU5OWE1ODZjYzI1ZGI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDAyNTIwMTUsIC03Ny4yMTI4NDExNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjRkODBiN2QzNWQ0ZWRiOGMyMDA4NmEyZDYzNGIyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNWNmNTViODMxOTk0MDYzYmI0M2I0MmNmNjU2OWVlZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjVjZjU1YjgzMTk5NDA2M2JiNDNiNDJjZjY1NjllZWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklTS0NPTiBvZiBXYXNoaW5ndG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjRkODBiN2QzNWQ0ZWRiOGMyMDA4NmEyZDYzNGIyYS5zZXRDb250ZW50KGh0bWxfZjVjZjU1YjgzMTk5NDA2M2JiNDNiNDJjZjY1NjllZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzhmOTA2M2NiNTk2NDViZmE0ZTk5YTU4NmNjMjVkYjkuYmluZFBvcHVwKHBvcHVwX2ZmNGQ4MGI3ZDM1ZDRlZGI4YzIwMDg2YTJkNjM0YjJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YjlkMzdhOGIzMDY0N2Y4ODBiYTNlYzc4YjkyMjhhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk4ODk0NSwgLTc2LjgyNDkxMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWU3M2IwYzQ3Y2ViNDU4MzliZjM2OWZjODVkZDRhMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2VlN2VkMmZiZTE5NDljN2FmNmFkZjk5NmY4OTc2MDEgPSAkKGA8ZGl2IGlkPSJodG1sXzdlZTdlZDJmYmUxOTQ5YzdhZjZhZGY5OTZmODk3NjAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXBpdGFsIENocmlzdGlhbiBGZWxsb3dzaGlwPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTczYjBjNDdjZWI0NTgzOWJmMzY5ZmM4NWRkNGEyNy5zZXRDb250ZW50KGh0bWxfN2VlN2VkMmZiZTE5NDljN2FmNmFkZjk5NmY4OTc2MDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWI5ZDM3YThiMzA2NDdmODgwYmEzZWM3OGI5MjI4YTQuYmluZFBvcHVwKHBvcHVwXzVlNzNiMGM0N2NlYjQ1ODM5YmYzNjlmYzg1ZGQ0YTI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MzU3ZDY1MTQxYzk0NzRjOGI4ZTA1ZTI5M2YwOTBmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAyODYyNiwgLTc2LjkxNzY3NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzgwMTAwM2I5MTg3NDliZWEyYzdmYWJjZTFlODhmMzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTk0YzA5MGM1MTRlNDIyYzhmZDY3YzdjN2E4YTNjMDEgPSAkKGA8ZGl2IGlkPSJodG1sXzU5NGMwOTBjNTE0ZTQyMmM4ZmQ2N2M3YzdhOGEzYzAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OaWNrJ3MgUGxhY2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM4MDEwMDNiOTE4NzQ5YmVhMmM3ZmFiY2UxZTg4ZjM5LnNldENvbnRlbnQoaHRtbF81OTRjMDkwYzUxNGU0MjJjOGZkNjdjN2M3YThhM2MwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MzU3ZDY1MTQxYzk0NzRjOGI4ZTA1ZTI5M2YwOTBmZi5iaW5kUG9wdXAocG9wdXBfMzgwMTAwM2I5MTg3NDliZWEyYzdmYWJjZTFlODhmMzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FkOWY4MTI0ZGYyZjQzZGNhYzBjOWQ0ZmU0MGExMTc1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDMxMzU0NjksIC03Ny4wNDgxOTUyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzQzYWEyZTQzNTU0ZjVhODgzZTliOTMxOTk2YzMxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MDk5N2QyM2ExYzU0NWViOGRiOTNiNTU0YmNhZGEyMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTA5OTdkMjNhMWM1NDVlYjhkYjkzYjU1NGJjYWRhMjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1Z2hlcyBOZWlnaGJvcmhvb2QgSG91c2luZyBJbmMuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNzQzYWEyZTQzNTU0ZjVhODgzZTliOTMxOTk2YzMxNy5zZXRDb250ZW50KGh0bWxfNTA5OTdkMjNhMWM1NDVlYjhkYjkzYjU1NGJjYWRhMjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWQ5ZjgxMjRkZjJmNDNkY2FjMGM5ZDRmZTQwYTExNzUuYmluZFBvcHVwKHBvcHVwXzI3NDNhYTJlNDM1NTRmNWE4ODNlOWI5MzE5OTZjMzE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNTJjNGViMmI0YjY0ODdmOGRlYmMwMzEzY2MxNzlmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAyNjExNTAwMDAwMDAwNCwgLTc2LjkwODMzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MzlhYjA2OTE5OTg0YzY3YTc0MGE0YzU1NDg2NDAzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYmE3NDYwOGMyY2M0ZTk0ODQ3ZGI5OTVlNGEyNzAxZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGJhNzQ2MDhjMmNjNGU5NDg0N2RiOTk1ZTRhMjcwMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYWNlIEludGVybmF0aW9uYWwgRGVsaXZlcmFuY2UgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MzlhYjA2OTE5OTg0YzY3YTc0MGE0YzU1NDg2NDAzZC5zZXRDb250ZW50KGh0bWxfZGJhNzQ2MDhjMmNjNGU5NDg0N2RiOTk1ZTRhMjcwMWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTUyYzRlYjJiNGI2NDg3ZjhkZWJjMDMxM2NjMTc5ZmEuYmluZFBvcHVwKHBvcHVwXzgzOWFiMDY5MTk5ODRjNjdhNzQwYTRjNTU0ODY0MDNkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMTMzZTMzYTcwYWU0MGVjYjFiNTUwNDY4M2NjYTdjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk4NTU2MSwgLTc2LjgyMjc2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jM2I0MDQyYjE2OTY0OTM2ODg1ZTQ5NjViNWYzMWRlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YzM1NzQ0OWY2YWY0NmNjYWY4MTk2NTMwYjE4NjJhYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWMzNTc0NDlmNmFmNDZjY2FmODE5NjUzMGIxODYyYWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdsb2JhbCBIZWFsdGggYW5kIEVudmlyb25tZW50IEZvdW5kYXRpb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MzYjQwNDJiMTY5NjQ5MzY4ODVlNDk2NWI1ZjMxZGU2LnNldENvbnRlbnQoaHRtbF81YzM1NzQ0OWY2YWY0NmNjYWY4MTk2NTMwYjE4NjJhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMTMzZTMzYTcwYWU0MGVjYjFiNTUwNDY4M2NjYTdjNi5iaW5kUG9wdXAocG9wdXBfYzNiNDA0MmIxNjk2NDkzNjg4NWU0OTY1YjVmMzFkZTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE3NjhhOTI2NDg0ZjRhM2I5ODA3MmQxNDRiMjBkMmVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTg1Njk2MDAwMDAwMDA0LCAtNzYuODIxNTAyNTAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmRjZGZlZjc3OGEzNDhmMWI4ZjZkNjM0Mzc4NTg3MTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTllNzVjYTNhZjBhNDNiNmFhYTgxNjkwNmMzNmFhNjcgPSAkKGA8ZGl2IGlkPSJodG1sX2U5ZTc1Y2EzYWYwYTQzYjZhYWE4MTY5MDZjMzZhYTY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SZXN1cnJlY3Rpb24gQmlibGUgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZGNkZmVmNzc4YTM0OGYxYjhmNmQ2MzQzNzg1ODcxMC5zZXRDb250ZW50KGh0bWxfZTllNzVjYTNhZjBhNDNiNmFhYTgxNjkwNmMzNmFhNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTc2OGE5MjY0ODRmNGEzYjk4MDcyZDE0NGIyMGQyZWUuYmluZFBvcHVwKHBvcHVwX2JkY2RmZWY3NzhhMzQ4ZjFiOGY2ZDYzNDM3ODU4NzEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZmZkMDRjZTM1OTg0YTJjODE5MmM4NDUzZTExNmYwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljc0MTczMywgLTc2Ljk5MjY3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NjdjZDdhMzg1NDg0MWUwOWM4Nzg2YTQwZmMxNjk5ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84Nzg3NWUyZjYwNjU0YTRlYjk5M2Y3MzVlOWJjMGQyYSA9ICQoYDxkaXYgaWQ9Imh0bWxfODc4NzVlMmY2MDY1NGE0ZWI5OTNmNzM1ZTliYzBkMmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRhdWdodGVyIGZvciB0aGUgRGF5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NjdjZDdhMzg1NDg0MWUwOWM4Nzg2YTQwZmMxNjk5Zi5zZXRDb250ZW50KGh0bWxfODc4NzVlMmY2MDY1NGE0ZWI5OTNmNzM1ZTliYzBkMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmZmZDA0Y2UzNTk4NGEyYzgxOTJjODQ1M2UxMTZmMDguYmluZFBvcHVwKHBvcHVwXzQ2N2NkN2EzODU0ODQxZTA5Yzg3ODZhNDBmYzE2OTlmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OTJiMGZjNjZhYTM0NTBjYTk1ZTU4ZTE4NjM1YjM4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAzNTE3NzI3LCAtNzcuMDM2MjA1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDMzZDcxMWZkNGM3NDA3MDhkMzg5OWM0NGYwMGFjNzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWU4ZjNkYjY2NmJjNDdlNmJlOTM3N2E5NTFhYmE1MzQgPSAkKGA8ZGl2IGlkPSJodG1sXzllOGYzZGI2NjZiYzQ3ZTZiZTkzNzdhOTUxYWJhNTM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Jbndvb2QgSG91c2UgRGV2ZWxvcGVtZW50IENvcnAuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMzNkNzExZmQ0Yzc0MDcwOGQzODk5YzQ0ZjAwYWM3NC5zZXRDb250ZW50KGh0bWxfOWU4ZjNkYjY2NmJjNDdlNmJlOTM3N2E5NTFhYmE1MzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzkyYjBmYzY2YWEzNDUwY2E5NWU1OGUxODYzNWIzOGMuYmluZFBvcHVwKHBvcHVwX2QzM2Q3MTFmZDRjNzQwNzA4ZDM4OTljNDRmMDBhYzc0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNTM3OThkMzhmMGE0Mjg4OWVhNTVjOWFlYTM4YjU5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljc5NDg0MTk5OTk5OTk5NiwgLTc2Ljk4OTM1MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmY4MDYwYmJiYTc5NDc2NThkNmVjMDVmM2Y3ZWVhM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmQ3ZWMyY2Q1NTdlNDE5NjkyMzliYzk1MGQxZWM1MTAgPSAkKGA8ZGl2IGlkPSJodG1sXzZkN2VjMmNkNTU3ZTQxOTY5MjM5YmM5NTBkMWVjNTEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BdCBIb21lIEF3YXkgZnJvbSBIb21lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZjgwNjBiYmJhNzk0NzY1OGQ2ZWMwNWYzZjdlZWEzYS5zZXRDb250ZW50KGh0bWxfNmQ3ZWMyY2Q1NTdlNDE5NjkyMzliYzk1MGQxZWM1MTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDUzNzk4ZDM4ZjBhNDI4ODllYTU1YzlhZWEzOGI1OTEuYmluZFBvcHVwKHBvcHVwX2JmODA2MGJiYmE3OTQ3NjU4ZDZlYzA1ZjNmN2VlYTNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMGExYmVlMmFiZjc0ODJiOGM3OWJiMTM2YjMzNThkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAzNDA3OTk5OTk5OTk5NiwgLTc2Ljk0NDMwNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDY2ZGQ4OWRlMTAwNGMzOGE4ZThiODA1MjY4OTBmNDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmIzYzBjY2Y2MjA1NDc4ODkzYzcwNzQ5OTQyOWRiZDYgPSAkKGA8ZGl2IGlkPSJodG1sXzZiM2MwY2NmNjIwNTQ3ODg5M2M3MDc0OTk0MjlkYmQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IZWFsaW5nIFRlbXBsZSBDaHVyY2ggb2YgdGhlIE5hemVyZW5lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjZkZDg5ZGUxMDA0YzM4YThlOGI4MDUyNjg5MGY0NC5zZXRDb250ZW50KGh0bWxfNmIzYzBjY2Y2MjA1NDc4ODkzYzcwNzQ5OTQyOWRiZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzBhMWJlZTJhYmY3NDgyYjhjNzliYjEzNmIzMzU4ZDYuYmluZFBvcHVwKHBvcHVwXzA2NmRkODlkZTEwMDRjMzhhOGU4YjgwNTI2ODkwZjQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYmY0NjZjMjQxNDY0NWEwODM5ODZjOTU2MjI0YWE2MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAzNjk0OSwgLTc3LjA1MTE1NDEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1NzRjODM1NmU1ODRkZjk5NmI1ODcwZDAzN2UwNmI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3NmNmMDFhMGJkOTQ1OWFiYmE1YWM4NzE5YTI3ZjI1ID0gJChgPGRpdiBpZD0iaHRtbF8xNzZjZjAxYTBiZDk0NTlhYmJhNWFjODcxOWEyN2YyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlkIENvdW50eSBVbml0ZWQgTWluaXN0cmllcyAoTVVNKTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzU3NGM4MzU2ZTU4NGRmOTk2YjU4NzBkMDM3ZTA2Yjkuc2V0Q29udGVudChodG1sXzE3NmNmMDFhMGJkOTQ1OWFiYmE1YWM4NzE5YTI3ZjI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NiZjQ2NmMyNDE0NjQ1YTA4Mzk4NmM5NTYyMjRhYTYzLmJpbmRQb3B1cChwb3B1cF8zNTc0YzgzNTZlNTg0ZGY5OTZiNTg3MGQwMzdlMDZiOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzAyNTJhMGNiNWNlNGY0MDhkMzYzYmRmMmZjMjY1MTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMzY5MjgxMSwgLTc3LjA0NDIzNDE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiOGYwOGQxYjZiNjRiMDNhM2NhMTI3YmM0ZjQwMWQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmMGVhNjRmZGYyZTQ0Yjc4ZGRkMjM2ZmQyYzlhNjM1ID0gJChgPGRpdiBpZD0iaHRtbF80ZjBlYTY0ZmRmMmU0NGI3OGRkZDIzNmZkMmM5YTYzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3IENyZWF0aW9uIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGI4ZjA4ZDFiNmI2NGIwM2EzY2ExMjdiYzRmNDAxZDQuc2V0Q29udGVudChodG1sXzRmMGVhNjRmZGYyZTQ0Yjc4ZGRkMjM2ZmQyYzlhNjM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwMjUyYTBjYjVjZTRmNDA4ZDM2M2JkZjJmYzI2NTE1LmJpbmRQb3B1cChwb3B1cF80YjhmMDhkMWI2YjY0YjAzYTNjYTEyN2JjNGY0MDFkNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjJhNjA0ZGZlMTE5NDU5NTliNTcxZTNlNzUyNTIxM2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MDM4MTQwMDAwMDAwMDQsIC03Ni45MTM0NDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDA1NzQ1MDAyZGMzNDUzMjkwNGVhM2E3NGU3YjM5NjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjY5YzBmOWY5ODkxNGU0ZDk5ZTBjMTc2NDQ1OTM3YTMgPSAkKGA8ZGl2IGlkPSJodG1sXzI2OWMwZjlmOTg5MTRlNGQ5OWUwYzE3NjQ0NTkzN2EzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TeWx2YW4gVmlzdGEgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QwNTc0NTAwMmRjMzQ1MzI5MDRlYTNhNzRlN2IzOTYxLnNldENvbnRlbnQoaHRtbF8yNjljMGY5Zjk4OTE0ZTRkOTllMGMxNzY0NDU5MzdhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMmE2MDRkZmUxMTk0NTk1OWI1NzFlM2U3NTI1MjEzYy5iaW5kUG9wdXAocG9wdXBfZDA1NzQ1MDAyZGMzNDUzMjkwNGVhM2E3NGU3YjM5NjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkMjUxNTkxZTExYTRhYTE5ZGMxZTllYjA5ZjllNGM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDE4MjAwMzMsIC03Ny4wMjkwNTM0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZDM1NmJjZjNiOWQ0ZTIzYmIzZjkzOWQ5MDNmMzIzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYzA0Y2M2YzgxNGI0MjgzYTI3OWY4MTRkNmE3NDcyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2MwNGNjNmM4MTRiNDI4M2EyNzlmODE0ZDZhNzQ3MjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPllNQ0EgWW91dGggYW5kIEZhbWlseSBTZXJ2aWNlczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2QzNTZiY2YzYjlkNGUyM2JiM2Y5MzlkOTAzZjMyM2Quc2V0Q29udGVudChodG1sXzNjMDRjYzZjODE0YjQyODNhMjc5ZjgxNGQ2YTc0NzI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkMjUxNTkxZTExYTRhYTE5ZGMxZTllYjA5ZjllNGM1LmJpbmRQb3B1cChwb3B1cF8zZDM1NmJjZjNiOWQ0ZTIzYmIzZjkzOWQ5MDNmMzIzZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmJlMDAyNzM3ODA4NDg0YmFmYTUyYjE2ZTY0OTE1NmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wOTM0NzI1LCAtNzcuMTM1OTE1MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGIxY2ExZmYxNjY4NDcwMThmMWM5ODNlNmM1ZDJkMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTUyMmU1Yzg2NTA3NGZkNmEzZjc4ODU3MmNjNDMwNjMgPSAkKGA8ZGl2IGlkPSJodG1sX2U1MjJlNWM4NjUwNzRmZDZhM2Y3ODg1NzJjYzQzMDYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3VyaXNoIE5vdzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGIxY2ExZmYxNjY4NDcwMThmMWM5ODNlNmM1ZDJkMTYuc2V0Q29udGVudChodG1sX2U1MjJlNWM4NjUwNzRmZDZhM2Y3ODg1NzJjYzQzMDYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiZTAwMjczNzgwODQ4NGJhZmE1MmIxNmU2NDkxNTZlLmJpbmRQb3B1cChwb3B1cF80YjFjYTFmZjE2Njg0NzAxOGYxYzk4M2U2YzVkMmQxNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTQ0NTQxZWIxNWQ3NDU3YmJiNzMxYjBiZTU1MmZkY2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43Mzk1NzMsIC03Ny4wMDAwMzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDBkMGVjMjg3MGFlNDY1N2JkYTdiNDQzOTUxMzQ5YjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVmMmM1MTZlYTg1NDY3ZWJmY2VlMzdkM2IyYTE0MjAgPSAkKGA8ZGl2IGlkPSJodG1sXzVlZjJjNTE2ZWE4NTQ2N2ViZmNlZTM3ZDNiMmExNDIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CcmVhdGggb2YgTGlmZSBTREEgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MGQwZWMyODcwYWU0NjU3YmRhN2I0NDM5NTEzNDliNy5zZXRDb250ZW50KGh0bWxfNWVmMmM1MTZlYTg1NDY3ZWJmY2VlMzdkM2IyYTE0MjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTQ0NTQxZWIxNWQ3NDU3YmJiNzMxYjBiZTU1MmZkY2MuYmluZFBvcHVwKHBvcHVwXzQwZDBlYzI4NzBhZTQ2NTdiZGE3YjQ0Mzk1MTM0OWI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZmZhOGY0NzQzMmI0Zjc1YmQ1YzY4N2Q4NWQzZTI0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAzNjI5MDYsIC03Ny4wMjc5MjYzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMDViZDQ2OTQyYWU0YjAxYThjNDgyODNlNThlOWVlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMWZiMmZiOWE3NGQ0ZGU3YTUyNmU5NDY4ODhjZTE4MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTFmYjJmYjlhNzRkNGRlN2E1MjZlOTQ2ODg4Y2UxODIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFyY29sYSBUb3dlcnM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwNWJkNDY5NDJhZTRiMDFhOGM0ODI4M2U1OGU5ZWU3LnNldENvbnRlbnQoaHRtbF9lMWZiMmZiOWE3NGQ0ZGU3YTUyNmU5NDY4ODhjZTE4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZmZhOGY0NzQzMmI0Zjc1YmQ1YzY4N2Q4NWQzZTI0OC5iaW5kUG9wdXAocG9wdXBfYzA1YmQ0Njk0MmFlNGIwMWE4YzQ4MjgzZTU4ZTllZTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyNjM0MjA0MWFlNjQ3YTA4MWM3NGQzNzY4ZGNlZTljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDQzMDcxMDAwMDAwMDA1LCAtNzYuOTE4MDQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QxZTAyZTE2OTAzZTQ2YTI5MWU4MWY5NWVkMTYyNmNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5Y2I4YWUyMjg4MzQ2ODFiODdjMTZkOWZjM2JhODUzID0gJChgPGRpdiBpZD0iaHRtbF84OWNiOGFlMjI4ODM0NjgxYjg3YzE2ZDlmYzNiYTg1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RW1tYW51ZWwgVU1DPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMWUwMmUxNjkwM2U0NmEyOTFlODFmOTVlZDE2MjZjYi5zZXRDb250ZW50KGh0bWxfODljYjhhZTIyODgzNDY4MWI4N2MxNmQ5ZmMzYmE4NTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTI2MzQyMDQxYWU2NDdhMDgxYzc0ZDM3NjhkY2VlOWMuYmluZFBvcHVwKHBvcHVwX2QxZTAyZTE2OTAzZTQ2YTI5MWU4MWY5NWVkMTYyNmNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzA2ZDJkNzA3MmQ0ODQwODg0MjVmNzMwYzQzNmU5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAwMTg4Njk5OTk5OTk5NiwgLTc2Ljg3NjM3MDk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3ZDU4NjFhZDUwMjQ2NWJiOWU5ZTFlNjg1MmM4ZTMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5NzZkMTk2ZjU4NDRhMjRiYjU1OGVlZTllZTgzMDcwID0gJChgPGRpdiBpZD0iaHRtbF82OTc2ZDE5NmY1ODQ0YTI0YmI1NThlZWU5ZWU4MzA3MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVzdG9yYXRpb24gQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81N2Q1ODYxYWQ1MDI0NjViYjllOWUxZTY4NTJjOGUzMi5zZXRDb250ZW50KGh0bWxfNjk3NmQxOTZmNTg0NGEyNGJiNTU4ZWVlOWVlODMwNzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDcwNmQyZDcwNzJkNDg0MDg4NDI1ZjczMGM0MzZlOWIuYmluZFBvcHVwKHBvcHVwXzU3ZDU4NjFhZDUwMjQ2NWJiOWU5ZTFlNjg1MmM4ZTMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDhmZWNjNTAxYTM0ZDVkYWFmNWIzMTczNjExOGI2YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA1MjQyODk0LCAtNzYuOTY5MTMyMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzM0M2NhMTgwYTUxNDNlOWIzZTMzYTYzMmMzMWZhOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDMzZDE4NDM4MjEyNDA5YzhkNjFkYTBmMTk2NTMzYjkgPSAkKGA8ZGl2IGlkPSJodG1sXzQzM2QxODQzODIxMjQwOWM4ZDYxZGEwZjE5NjUzM2I5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BIFBsYWNlIGZvciBIYXNoZW0gTWluaXN0cmllczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzM0M2NhMTgwYTUxNDNlOWIzZTMzYTYzMmMzMWZhOTcuc2V0Q29udGVudChodG1sXzQzM2QxODQzODIxMjQwOWM4ZDYxZGEwZjE5NjUzM2I5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E0OGZlY2M1MDFhMzRkNWRhYWY1YjMxNzM2MTE4YjZjLmJpbmRQb3B1cChwb3B1cF83MzQzY2ExODBhNTE0M2U5YjNlMzNhNjMyYzMxZmE5NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjIwZTU5NDgzZTA1NDcyMTliY2U2ZTY1ODFlMzEzZDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NzIwMzUsIC03Ni44OTU3NTI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyOGE2YzU2NmIwNTQ0Y2I5M2I1NWM0NjY4MGMxN2NhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1ODU3YWExYTQ1ZjRhYjg4NzI5OTE1ZGQzMWUzYWE4ID0gJChgPGRpdiBpZD0iaHRtbF8yNTg1N2FhMWE0NWY0YWI4ODcyOTkxNWRkMzFlM2FhOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2FpbnQgUGF1bCBTZW5pb3IgTGl2aW5nPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MjhhNmM1NjZiMDU0NGNiOTNiNTVjNDY2ODBjMTdjYS5zZXRDb250ZW50KGh0bWxfMjU4NTdhYTFhNDVmNGFiODg3Mjk5MTVkZDMxZTNhYTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjIwZTU5NDgzZTA1NDcyMTliY2U2ZTY1ODFlMzEzZDQuYmluZFBvcHVwKHBvcHVwXzkyOGE2YzU2NmIwNTQ0Y2I5M2I1NWM0NjY4MGMxN2NhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NDczZmIzNDg4NzI0MDRhOGM0OGJkYTA5OTQ2Zjc1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjcyMjg3OCwgLTc2Ljg5MzA4ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVmYWMxMWViY2Y1NDExODk5MWRlNzU3ZWI5MDQxNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2FiNmYzZDA0OWE3NDFhOGE5Zjk2Y2ZiZTkxNmU1NmQgPSAkKGA8ZGl2IGlkPSJodG1sXzdhYjZmM2QwNDlhNzQxYThhOWY5NmNmYmU5MTZlNTZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYWx2YXRpb24gTWluaXN0cmllczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjVmYWMxMWViY2Y1NDExODk5MWRlNzU3ZWI5MDQxNWUuc2V0Q29udGVudChodG1sXzdhYjZmM2QwNDlhNzQxYThhOWY5NmNmYmU5MTZlNTZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0NzNmYjM0ODg3MjQwNGE4YzQ4YmRhMDk5NDZmNzUwLmJpbmRQb3B1cChwb3B1cF9mNWZhYzExZWJjZjU0MTE4OTkxZGU3NTdlYjkwNDE1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTg1Mzg0Yzg1MGE1NGZmYThkNDk3N2ZjNmEyMGUyNzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNTYwMjAyMywgLTc3LjA0OTkyODEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2ZjgyN2JjNmNkOTRlYWE5YWViMjhmMTlkNDc1NGI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5YzNhOTc2ZmI5MTQ3NjJiMjA1YzAyZTcwZmNkYjYyID0gJChgPGRpdiBpZD0iaHRtbF84OWMzYTk3NmZiOTE0NzYyYjIwNWMwMmU3MGZjZGI2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9udGdvbWVyeSBDb3VudHkgRmFtaWx5IENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzZmODI3YmM2Y2Q5NGVhYTlhZWIyOGYxOWQ0NzU0Yjkuc2V0Q29udGVudChodG1sXzg5YzNhOTc2ZmI5MTQ3NjJiMjA1YzAyZTcwZmNkYjYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU4NTM4NGM4NTBhNTRmZmE4ZDQ5NzdmYzZhMjBlMjcyLmJpbmRQb3B1cChwb3B1cF83NmY4MjdiYzZjZDk0ZWFhOWFlYjI4ZjE5ZDQ3NTRiOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTY5ODdiZDRkMDkyNDQ2NmI5MmViMzExOWUwNjg1MDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNTYwMjAyMywgLTc3LjA0OTkyODEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzNTU4NzcxZDIwNDQ4YjM4ZDVhMzJkOWY4NDNiZDAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAwNjk2Yjk3MGU4YzRkMWE4ZmI2MmFkZDQwZGU3ZDhiID0gJChgPGRpdiBpZD0iaHRtbF8wMDY5NmI5NzBlOGM0ZDFhOGZiNjJhZGQ0MGRlN2Q4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2F0aG9saWMgQ2hhcml0aWVzIEFET1cgTW9udGdvbWVyeSBDb3VudHkgRmFtaWx5IENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjM1NTg3NzFkMjA0NDhiMzhkNWEzMmQ5Zjg0M2JkMDIuc2V0Q29udGVudChodG1sXzAwNjk2Yjk3MGU4YzRkMWE4ZmI2MmFkZDQwZGU3ZDhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE2OTg3YmQ0ZDA5MjQ0NjZiOTJlYjMxMTllMDY4NTAxLmJpbmRQb3B1cChwb3B1cF82MzU1ODc3MWQyMDQ0OGIzOGQ1YTMyZDlmODQzYmQwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTZmYmQxZWEwZmI0NDYxMWEzMjIzZjI2NDRiMTFkZGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43MjA1OTE5OTk5OTk5OTYsIC03Ni45ODUyMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg1NGYzZGMxZWZjNGFlNmI0NDVhMGJkYjNhMzZkYTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzZlODRiODE0NTc1NGFkNDg4MDAwZjM4YTBlOGJiN2YgPSAkKGA8ZGl2IGlkPSJodG1sXzc2ZTg0YjgxNDU3NTRhZDQ4ODAwMGYzOGEwZThiYjdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WaWN0b3J5IE91dHJlYWNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ODU0ZjNkYzFlZmM0YWU2YjQ0NWEwYmRiM2EzNmRhNC5zZXRDb250ZW50KGh0bWxfNzZlODRiODE0NTc1NGFkNDg4MDAwZjM4YTBlOGJiN2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTZmYmQxZWEwZmI0NDYxMWEzMjIzZjI2NDRiMTFkZGUuYmluZFBvcHVwKHBvcHVwXzU4NTRmM2RjMWVmYzRhZTZiNDQ1YTBiZGIzYTM2ZGE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MmRlZWI3MTEwOTE0M2EyODIyYzRmY2IyODlhYmVjMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg3Mzk0MDgxLCAtNzYuOTI5MzAwMTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjEwOWE1ZTg3MDFlNDgxMTgwM2NmMDMxMmY2MzI4NWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjA3MjhmODI5ZTA5NDIyOGI5YWQxNzkzNThjODk0MzIgPSAkKGA8ZGl2IGlkPSJodG1sXzIwNzI4ZjgyOWUwOTQyMjhiOWFkMTc5MzU4Yzg5NDMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWRvd3MgJiBPcnBoYW5zIG9mIEdvZCBJbmMuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTA5YTVlODcwMWU0ODExODAzY2YwMzEyZjYzMjg1Yi5zZXRDb250ZW50KGh0bWxfMjA3MjhmODI5ZTA5NDIyOGI5YWQxNzkzNThjODk0MzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzJkZWViNzExMDkxNDNhMjgyMmM0ZmNiMjg5YWJlYzEuYmluZFBvcHVwKHBvcHVwXzYxMDlhNWU4NzAxZTQ4MTE4MDNjZjAzMTJmNjMyODViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmYxNDI1MzZiMjY0MWZjOWQxY2M2NWNhMmQ5OThiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA2MjM0MjEzLCAtNzYuOTk4ODYyODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzcwZWNhZTQwODcyNDQyY2FiMWQ1MDBhZTg2Mzc5MWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTFjMWVkNWEwMDZmNGMwY2ExY2FiNzJkZjBkMmYxMDIgPSAkKGA8ZGl2IGlkPSJodG1sXzExYzFlZDVhMDA2ZjRjMGNhMWNhYjcyZGYwZDJmMTAyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXNoaW5ndG9uIFNwYW5pc2ggU0RBIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzcwZWNhZTQwODcyNDQyY2FiMWQ1MDBhZTg2Mzc5MWYuc2V0Q29udGVudChodG1sXzExYzFlZDVhMDA2ZjRjMGNhMWNhYjcyZGYwZDJmMTAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VmZjE0MjUzNmIyNjQxZmM5ZDFjYzY1Y2EyZDk5OGIxLmJpbmRQb3B1cChwb3B1cF8zNzBlY2FlNDA4NzI0NDJjYWIxZDUwMGFlODYzNzkxZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmI2NmM3ODZmNzg4NGQ2NzlkZWE4Njk1YjFmNDY5ODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNjM5NTk1NCwgLTc2Ljk0NTAzNzg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxZWUzZGNiYzY2YjRiZDFiYjcwMjc4MDIyY2YxMjJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEzOTljNDY3Y2VmMjRkMzZhZmU2Y2YwMjRhMzhiMzE1ID0gJChgPGRpdiBpZD0iaHRtbF8xMzk5YzQ2N2NlZjI0ZDM2YWZlNmNmMDI0YTM4YjMxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R2Fsd2F5IEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MWVlM2RjYmM2NmI0YmQxYmI3MDI3ODAyMmNmMTIyYS5zZXRDb250ZW50KGh0bWxfMTM5OWM0NjdjZWYyNGQzNmFmZTZjZjAyNGEzOGIzMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmI2NmM3ODZmNzg4NGQ2NzlkZWE4Njk1YjFmNDY5ODMuYmluZFBvcHVwKHBvcHVwXzUxZWUzZGNiYzY2YjRiZDFiYjcwMjc4MDIyY2YxMjJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNGUyNDczM2Y5OWY0ZGJlOWI1MWQxMDY4MzA3NzBlNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA2Mzc1NDc5LCAtNzcuMDk2MDI3NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDdkZjBiZTkxZTE2NGE4NWE0YjNiOThkYzRjNTRiYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODU0NTRkN2RlN2RlNDBiZTk2ODAwNjVjMTY1Mjc2ODAgPSAkKGA8ZGl2IGlkPSJodG1sXzg1NDU0ZDdkZTdkZTQwYmU5NjgwMDY1YzE2NTI3NjgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Sb2NrY3JlZWsgVGVycmFjZSBBcGFydG1lbnRzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wN2RmMGJlOTFlMTY0YTg1YTRiM2I5OGRjNGM1NGJjNC5zZXRDb250ZW50KGh0bWxfODU0NTRkN2RlN2RlNDBiZTk2ODAwNjVjMTY1Mjc2ODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDRlMjQ3MzNmOTlmNGRiZTliNTFkMTA2ODMwNzcwZTQuYmluZFBvcHVwKHBvcHVwXzA3ZGYwYmU5MWUxNjRhODVhNGIzYjk4ZGM0YzU0YmM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YzAxYWQ3N2Q0YmE0YjM0OGE4ZTU5NjMzYTc0NjU2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg3MzQ1NywgLTc2LjkyODU5MzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWE2MjVhMThmYTM4NGMyYmI2ODk3NjhhNDkzMDYzYWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjJmYjcxZjBkMjliNGJmNmE5ODRlMWRhODdlNDYwZGQgPSAkKGA8ZGl2IGlkPSJodG1sX2YyZmI3MWYwZDI5YjRiZjZhOTg0ZTFkYTg3ZTQ2MGRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmVlZG9tIFdheSBNaXNzaW9uYXJ5IEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYTYyNWExOGZhMzg0YzJiYjY4OTc2OGE0OTMwNjNhZi5zZXRDb250ZW50KGh0bWxfZjJmYjcxZjBkMjliNGJmNmE5ODRlMWRhODdlNDYwZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGMwMWFkNzdkNGJhNGIzNDhhOGU1OTYzM2E3NDY1NjEuYmluZFBvcHVwKHBvcHVwXzFhNjI1YTE4ZmEzODRjMmJiNjg5NzY4YTQ5MzA2M2FmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YWU4ZTc4MDdkM2Y0NDc4ODM4NjdhZDY4N2FmNmE0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk2MzIyMywgLTc2LjcyODkxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMjYwOWQwYmIzZmI0YjAwYjI4MzVlNTA1OTJhNDdiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yN2Y4MjUzMGYwYzc0ZjViOGVhNzA4YmQ3YmNkMzhiMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMjdmODI1MzBmMGM3NGY1YjhlYTcwOGJkN2JjZDM4YjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkF1dHVtbiBNZWFkb3dzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMjYwOWQwYmIzZmI0YjAwYjI4MzVlNTA1OTJhNDdiYy5zZXRDb250ZW50KGh0bWxfMjdmODI1MzBmMGM3NGY1YjhlYTcwOGJkN2JjZDM4YjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGFlOGU3ODA3ZDNmNDQ3ODgzODY3YWQ2ODdhZjZhNDMuYmluZFBvcHVwKHBvcHVwX2YyNjA5ZDBiYjNmYjRiMDBiMjgzNWU1MDU5MmE0N2JjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODhlZTRlOWUxNmQ0MDBhODRiNDVmYjc3ODA0YTI2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAwODM0OSwgLTc2Ljc4MTQ3OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzJlMmEwMzFkNDNlNGU4YWE3NjE5NjI2MjQ4MDRmMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGJkNzY5MmIwODgyNDg1MzgwZWQ2MzVkNjRjZTliYTEgPSAkKGA8ZGl2IGlkPSJodG1sXzhiZDc2OTJiMDg4MjQ4NTM4MGVkNjM1ZDY0Y2U5YmExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Zb3VyIENob2ljZSBGZWxsb3dzaGlwIENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzJlMmEwMzFkNDNlNGU4YWE3NjE5NjI2MjQ4MDRmMTQuc2V0Q29udGVudChodG1sXzhiZDc2OTJiMDg4MjQ4NTM4MGVkNjM1ZDY0Y2U5YmExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA4OGVlNGU5ZTE2ZDQwMGE4NGI0NWZiNzc4MDRhMjY5LmJpbmRQb3B1cChwb3B1cF8zMmUyYTAzMWQ0M2U0ZThhYTc2MTk2MjYyNDgwNGYxNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjAzOGJkNWI2YTg1NDliNjgzYTE4MmVlZTkzZDg2YTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMTAwMjgzOTk5OTk5OTYsIC03Ni42OTg4MTY5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NTkwN2U0OGY2YjM0MzRkYWFiN2YxNzhmMzE1YTBmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NWU3Yzc3OTVlZWM0MjExYjZkMGY4MjkwM2M3NTZhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzVlN2M3Nzk1ZWVjNDIxMWI2ZDBmODI5MDNjNzU2YTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBMb3JkJ3MgQ2hvc2VuIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NTkwN2U0OGY2YjM0MzRkYWFiN2YxNzhmMzE1YTBmMC5zZXRDb250ZW50KGh0bWxfNzVlN2M3Nzk1ZWVjNDIxMWI2ZDBmODI5MDNjNzU2YTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjAzOGJkNWI2YTg1NDliNjgzYTE4MmVlZTkzZDg2YTkuYmluZFBvcHVwKHBvcHVwXzg1OTA3ZTQ4ZjZiMzQzNGRhYWI3ZjE3OGYzMTVhMGYwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNTBhNGJkNzM0MWE0NjhlODY4YTU3ZDFiMWZiZGYyMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk5NzUwMTUsIC03Ny4wMzE1NDQxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMGU1ZTNkOWZmOTA0YzkwYTQxYTAxMzc5ZTM5MzY5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTljZjFkYjgxMzc0MTRkYTM0YzIzNTEwNWMxZTUxMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWE5Y2YxZGI4MTM3NDE0ZGEzNGMyMzUxMDVjMWU1MTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBDaGFydGVyIEhvdXNlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMGU1ZTNkOWZmOTA0YzkwYTQxYTAxMzc5ZTM5MzY5YS5zZXRDb250ZW50KGh0bWxfMWE5Y2YxZGI4MTM3NDE0ZGEzNGMyMzUxMDVjMWU1MTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTUwYTRiZDczNDFhNDY4ZTg2OGE1N2QxYjFmYmRmMjEuYmluZFBvcHVwKHBvcHVwX2YwZTVlM2Q5ZmY5MDRjOTBhNDFhMDEzNzllMzkzNjlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMGQ1NzkwNDVlNDk0NjEzYmU5Zjc3MjIyZGNlZjRlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA4OTc3ODExLCAtNzcuMTA0ODEwMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzg0ODFmMjQ4MGNmNDc3YTgyNzg2ODc4YTYzMGEyOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmRkMzQwNGNhMDUxNDBlNDk3ZjIxMGFmNjQwZTQ1Y2UgPSAkKGA8ZGl2IGlkPSJodG1sX2JkZDM0MDRjYTA1MTQwZTQ5N2YyMTBhZjY0MGU0NWNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXVlciBQYXJrIEFwYXJ0bWVudHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4NDgxZjI0ODBjZjQ3N2E4Mjc4Njg3OGE2MzBhMjkxLnNldENvbnRlbnQoaHRtbF9iZGQzNDA0Y2EwNTE0MGU0OTdmMjEwYWY2NDBlNDVjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMGQ1NzkwNDVlNDk0NjEzYmU5Zjc3MjIyZGNlZjRlMi5iaW5kUG9wdXAocG9wdXBfNzg0ODFmMjQ4MGNmNDc3YTgyNzg2ODc4YTYzMGEyOTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1ODVhNDQ1NWFiMzQ1YTA5MTg3ODA1MDllYzZlOTJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNjYwNDM2LCAtNzYuNzcyMzQ0NDk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWNmZThkODdhYjE4NGMxYWEwN2Q4NDE4NjhmZWQ1N2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGM2MDFhODlhNDBlNGI1ZGIwOWQ0ODBjMjhmZTBiMTggPSAkKGA8ZGl2IGlkPSJodG1sX2RjNjAxYTg5YTQwZTRiNWRiMDlkNDgwYzI4ZmUwYjE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db21tdW5pdHkgU3VwcG9ydCBTeXN0ZW1zIEluYyBCQURFTjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWNmZThkODdhYjE4NGMxYWEwN2Q4NDE4NjhmZWQ1N2Muc2V0Q29udGVudChodG1sX2RjNjAxYTg5YTQwZTRiNWRiMDlkNDgwYzI4ZmUwYjE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ1ODVhNDQ1NWFiMzQ1YTA5MTg3ODA1MDllYzZlOTJkLmJpbmRQb3B1cChwb3B1cF9hY2ZlOGQ4N2FiMTg0YzFhYTA3ZDg0MTg2OGZlZDU3YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzkyYmVmM2U2MTc2NDU5M2IzYzdjMzRkMjE3YjJhMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45OTMwODUsIC03Ni43MjM2ODE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmZDJmZGVkYzdjNzRhN2U4MjIyOGY5NzBhNDUwODE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyMTVkYjIxOWZhNzRjNzc5NjBhNjQ0Njc3ZjA4YzAyID0gJChgPGRpdiBpZD0iaHRtbF82MjE1ZGIyMTlmYTc0Yzc3OTYwYTY0NDY3N2YwOGMwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xhcmEncyBQbGFjZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWZkMmZkZWRjN2M3NGE3ZTgyMjI4Zjk3MGE0NTA4MTguc2V0Q29udGVudChodG1sXzYyMTVkYjIxOWZhNzRjNzc5NjBhNjQ0Njc3ZjA4YzAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc5MmJlZjNlNjE3NjQ1OTNiM2M3YzM0ZDIxN2IyYTA1LmJpbmRQb3B1cChwb3B1cF85ZmQyZmRlZGM3Yzc0YTdlODIyMjhmOTcwYTQ1MDgxOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDgyNGMxMjQwMmI0NDE4NDk5NjcwMmNmNDI1YTg3MjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNzc1NjgsIC03Ni44NDc0NDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkZmQ2ZGQ3MzE4YjQ4MjM5YWRkNTk0MmUzNzViYzU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1MTkxMGM3YzNkMTQ3YTQ5ZDQ2NDEzOGIxNGE2ZGI2ID0gJChgPGRpdiBpZD0iaHRtbF9kNTE5MTBjN2MzZDE0N2E0OWQ0NjQxMzhiMTRhNmRiNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T3VyIFNhdmlvciBMdXRoZXJhbiBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkZmQ2ZGQ3MzE4YjQ4MjM5YWRkNTk0MmUzNzViYzU4LnNldENvbnRlbnQoaHRtbF9kNTE5MTBjN2MzZDE0N2E0OWQ0NjQxMzhiMTRhNmRiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kODI0YzEyNDAyYjQ0MTg0OTk2NzAyY2Y0MjVhODcyNy5iaW5kUG9wdXAocG9wdXBfZGRmZDZkZDczMThiNDgyMzlhZGQ1OTQyZTM3NWJjNTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjM2RkYThmM2ZkZTQ4NWFhNzEwNGM0MTYzZGU1NjQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDgwNDE4NjEsIC03Ny4wNDcwNzg0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Y2ZiODk5MjljM2Q0N2ExYmJiY2ZmNDhkNDJhMmZiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDQyMjM3YzBkYTI0NzdiYTg4YTY4MDRjYzc1N2YxZiA9ICQoYDxkaXYgaWQ9Imh0bWxfN2Q0MjIzN2MwZGEyNDc3YmE4OGE2ODA0Y2M3NTdmMWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZhaXRoIENvbW11bml0eSAgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljZmI4OTkyOWMzZDQ3YTFiYmJjZmY0OGQ0MmEyZmJhLnNldENvbnRlbnQoaHRtbF83ZDQyMjM3YzBkYTI0NzdiYTg4YTY4MDRjYzc1N2YxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYzNkZGE4ZjNmZGU0ODVhYTcxMDRjNDE2M2RlNTY0OC5iaW5kUG9wdXAocG9wdXBfOWNmYjg5OTI5YzNkNDdhMWJiYmNmZjQ4ZDQyYTJmYmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ2MzU0ZjRiMjg3MDRlZTY5N2ZhZWRjNmVmY2I2ODJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNzAxOTYyLCAtNzYuODcxMTA2MDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGU0M2NkY2RmOGI2NDNkZWFhOTI0YTcxMDI1ODljNDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQyZmYwYzQ1ZmQ0NDIwNDkyNTMzZjQwMGNlN2Y0ZGIgPSAkKGA8ZGl2IGlkPSJodG1sX2Y0MmZmMGM0NWZkNDQyMDQ5MjUzM2Y0MDBjZTdmNGRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QcmluY2UgR2VvcmdlcyBTb2NpYWwgU2VydmljZXMgLSBHd3lubiBQYXJrIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZTQzY2RjZGY4YjY0M2RlYWE5MjRhNzEwMjU4OWM0MS5zZXRDb250ZW50KGh0bWxfZjQyZmYwYzQ1ZmQ0NDIwNDkyNTMzZjQwMGNlN2Y0ZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDYzNTRmNGIyODcwNGVlNjk3ZmFlZGM2ZWZjYjY4MmMuYmluZFBvcHVwKHBvcHVwXzhlNDNjZGNkZjhiNjQzZGVhYTkyNGE3MTAyNTg5YzQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xODc2NGU3NzNlYTY0ZGNjOTkyZTNhN2NkNWI2OGFjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk5Njg1MTE1LCAtNzcuMDMzMTc2OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2YzNDg0MDhkNzQxNGExNWI4ODdmNmFmNGVjMmNhY2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2JiYWRkOWExMTUwNDJmOGI4MzgwZmMyODQ4YjBkOTggPSAkKGA8ZGl2IGlkPSJodG1sXzNiYmFkZDlhMTE1MDQyZjhiODM4MGZjMjg0OGIwZDk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbGl6YWJldGggSG91c2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmMzQ4NDA4ZDc0MTRhMTViODg3ZjZhZjRlYzJjYWNlLnNldENvbnRlbnQoaHRtbF8zYmJhZGQ5YTExNTA0MmY4YjgzODBmYzI4NDhiMGQ5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xODc2NGU3NzNlYTY0ZGNjOTkyZTNhN2NkNWI2OGFjYy5iaW5kUG9wdXAocG9wdXBfM2YzNDg0MDhkNzQxNGExNWI4ODdmNmFmNGVjMmNhY2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YxNzkyYmNkMDRjZTQ4MTg5MzIzZGExMTVmMDg5M2ZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTU3MDg1LCAtNzYuOTg1MjU3NDk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTBkNTNhYTY5OTIxNGFhZDg2ZTQzMjE1NWYzZGZkMTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2U4YzkzZGFhZDgxNDhlODk1ZDlhYzUyZjdkY2JlZGMgPSAkKGA8ZGl2IGlkPSJodG1sXzdlOGM5M2RhYWQ4MTQ4ZTg5NWQ5YWM1MmY3ZGNiZWRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Hb29kIFNhbWFyaXRhbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTBkNTNhYTY5OTIxNGFhZDg2ZTQzMjE1NWYzZGZkMTAuc2V0Q29udGVudChodG1sXzdlOGM5M2RhYWQ4MTQ4ZTg5NWQ5YWM1MmY3ZGNiZWRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YxNzkyYmNkMDRjZTQ4MTg5MzIzZGExMTVmMDg5M2ZhLmJpbmRQb3B1cChwb3B1cF8xMGQ1M2FhNjk5MjE0YWFkODZlNDMyMTU1ZjNkZmQxMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTg2N2E3Y2Y4ZTg2NDE3YThiNjE1ZjA2NDNiNWNmNTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NzE5MzYsIC03Ni44ODg5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTMxMDQ1NWI2ZjI0YTAyOTkzYTlhYjQzNTk4YWY1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NjBlYzQ4NDFlZDY0NzdlYTA1MDBjOTYzZWViMjAyMiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTYwZWM0ODQxZWQ2NDc3ZWEwNTAwYzk2M2VlYjIwMjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pbGx3b29kIENvbW11bml0eSBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExMzEwNDU1YjZmMjRhMDI5OTNhOWFiNDM1OThhZjU4LnNldENvbnRlbnQoaHRtbF85NjBlYzQ4NDFlZDY0NzdlYTA1MDBjOTYzZWViMjAyMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ODY3YTdjZjhlODY0MTdhOGI2MTVmMDY0M2I1Y2Y1OC5iaW5kUG9wdXAocG9wdXBfMTEzMTA0NTViNmYyNGEwMjk5M2E5YWI0MzU5OGFmNTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwN2ViNzAzNDhjNTRkMzU4OTM0YTEzZTZkMmQxOGFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTg3NzAzLCAtNzYuOTgxNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmQwNjJjNTc5MmI4NDc5NWEyMmI1ZmJjODhhNGI1YzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWVkNjIxZWM0YzI1NDIzOGE2ZjNlNWE5YTYyZTU4YWMgPSAkKGA8ZGl2IGlkPSJodG1sXzFlZDYyMWVjNGMyNTQyMzhhNmYzZTVhOWE2MmU1OGFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KdWR5IEhveWVyIENlbnRlciBhdCBCZWRmb3JkIFN0YXRpb24gQXBhcnRtZW50czwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQwNjJjNTc5MmI4NDc5NWEyMmI1ZmJjODhhNGI1Yzkuc2V0Q29udGVudChodG1sXzFlZDYyMWVjNGMyNTQyMzhhNmYzZTVhOWE2MmU1OGFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEwN2ViNzAzNDhjNTRkMzU4OTM0YTEzZTZkMmQxOGFhLmJpbmRQb3B1cChwb3B1cF9mZDA2MmM1NzkyYjg0Nzk1YTIyYjVmYmM4OGE0YjVjOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjJlY2IzNTJhOGE3NDE1M2FkZjcyYWM5NjkzNDlkODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44MTQzMjcsIC03Ni43NTMxMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2QzYjc1ZmFlNmY4NDMzZTg2ODUxNTg3ZDEwMDYwMzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTg3ZDkyM2Q2MmFmNDU0NzliMjVhZWYxYzM5ZWM3NmUgPSAkKGA8ZGl2IGlkPSJodG1sX2E4N2Q5MjNkNjJhZjQ1NDc5YjI1YWVmMWMzOWVjNzZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXJsYm9ybyBDaHVyY2hlcyBGb29kIEJhbms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkM2I3NWZhZTZmODQzM2U4Njg1MTU4N2QxMDA2MDM0LnNldENvbnRlbnQoaHRtbF9hODdkOTIzZDYyYWY0NTQ3OWIyNWFlZjFjMzllYzc2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MmVjYjM1MmE4YTc0MTUzYWRmNzJhYzk2OTM0OWQ4Ny5iaW5kUG9wdXAocG9wdXBfM2QzYjc1ZmFlNmY4NDMzZTg2ODUxNTg3ZDEwMDYwMzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzOWFmNjYwMWEzNDQ3ZGFhYzkyNDU3YjBkZTNkZjRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTkyODc4MDAwMDAwMDA1LCAtNzYuOTgxNjE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjOTJiZDhhZGMyZjQ2MDU4MjdlZDliNTNmNDgxYTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3NTEzYjQxYTQzNTQzNWY4MzMxYjAxOWU3ZWQ2MjlmID0gJChgPGRpdiBpZD0iaHRtbF8yNzUxM2I0MWE0MzU0MzVmODMzMWIwMTllN2VkNjI5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGFuZ2xleSBQYXJrIEZvb2QgRGlzdHJpYnV0aW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYzkyYmQ4YWRjMmY0NjA1ODI3ZWQ5YjUzZjQ4MWE2MC5zZXRDb250ZW50KGh0bWxfMjc1MTNiNDFhNDM1NDM1ZjgzMzFiMDE5ZTdlZDYyOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTM5YWY2NjAxYTM0NDdkYWFjOTI0NTdiMGRlM2RmNGQuYmluZFBvcHVwKHBvcHVwX2FjOTJiZDhhZGMyZjQ2MDU4MjdlZDliNTNmNDgxYTYwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYzcwYzZiMWFjYjU0M2EyYTIxMjQwYTRjMjNiYjJiMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA0NTE3MDIxLCAtNzcuMDMxMzgzNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzFlNmYzYjY0Mzc0NGM5ZmJlNWFjZDQzNWFkYWRiZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmJjN2NjNDIxMmU2NGVkOWI2ZjA0MzQ2MDMxNzYyZGIgPSAkKGA8ZGl2IGlkPSJodG1sXzZiYzdjYzQyMTJlNjRlZDliNmYwNDM0NjAzMTc2MmRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaWx2ZXIgU3ByaW5nIENocmlzdGlhbiBSZWZvcm1lZCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxZTZmM2I2NDM3NDRjOWZiZTVhY2Q0MzVhZGFkYmQ2LnNldENvbnRlbnQoaHRtbF82YmM3Y2M0MjEyZTY0ZWQ5YjZmMDQzNDYwMzE3NjJkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYzcwYzZiMWFjYjU0M2EyYTIxMjQwYTRjMjNiYjJiMC5iaW5kUG9wdXAocG9wdXBfMzFlNmYzYjY0Mzc0NGM5ZmJlNWFjZDQzNWFkYWRiZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3YTVlMmQ2YzZmNjRkNGU4YjFhMjNiZGUwMjg0ODRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTAyNzM4MjUsIC03Ni45OTc4NTI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTE3YjQzM2Q2ZGE0OTBlOTBiODhjM2Y5YjAxMWE4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNGJiNjA1NTEzMzA0YTNmYjBmNWQ2ZWFkYjY5Y2U0NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTRiYjYwNTUxMzMwNGEzZmIwZjVkNmVhZGI2OWNlNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vbnRnb21lcnkgRWxkZXJjYXJlIExMQzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjExN2I0MzNkNmRhNDkwZTkwYjg4YzNmOWIwMTFhODcuc2V0Q29udGVudChodG1sXzE0YmI2MDU1MTMzMDRhM2ZiMGY1ZDZlYWRiNjljZTQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U3YTVlMmQ2YzZmNjRkNGU4YjFhMjNiZGUwMjg0ODRiLmJpbmRQb3B1cChwb3B1cF9iMTE3YjQzM2Q2ZGE0OTBlOTBiODhjM2Y5YjAxMWE4NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzhkMDZiNTMwYmMwNDdiZWFhZDdhYmU4Yjc2ZDY1ODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xMDQ5NzQ4MiwgLTc3LjAwMjU3ODAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzNGY1NGI1YTJlMTRmOTNhN2YyMmNhYTdjZDVmYmU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjN2E3YWI0MjRkMzQ1Njg5NzQzZjA1OGRjNjk5MTRkID0gJChgPGRpdiBpZD0iaHRtbF83YzdhN2FiNDI0ZDM0NTY4OTc0M2YwNThkYzY5OTE0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TXVzbGltIENvbW11bml0eSBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNGY1NGI1YTJlMTRmOTNhN2YyMmNhYTdjZDVmYmU0LnNldENvbnRlbnQoaHRtbF83YzdhN2FiNDI0ZDM0NTY4OTc0M2YwNThkYzY5OTE0ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOGQwNmI1MzBiYzA0N2JlYWFkN2FiZThiNzZkNjU4My5iaW5kUG9wdXAocG9wdXBfMDM0ZjU0YjVhMmUxNGY5M2E3ZjIyY2FhN2NkNWZiZTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxYWE1MGQ5MTkzMTRkZWRiMDcxM2E2NWFkM2E1YTRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTA5NjM3MzEsIC03Ni45MzUwMjI3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNGEwYzk4ZGQzYWU0ZDBmODY4ODZhNWZmM2E4OWU1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMjYyNWI4OWI4MDI0ZGQ1YTczOTZkNzZhN2VmZjEyMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzI2MjViODliODAyNGRkNWE3Mzk2ZDc2YTdlZmYxMjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJ1cnRvbnN2aWxsZSBFUzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTRhMGM5OGRkM2FlNGQwZjg2ODg2YTVmZjNhODllNWMuc2V0Q29udGVudChodG1sX2MyNjI1Yjg5YjgwMjRkZDVhNzM5NmQ3NmE3ZWZmMTIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkxYWE1MGQ5MTkzMTRkZWRiMDcxM2E2NWFkM2E1YTRjLmJpbmRQb3B1cChwb3B1cF9hNGEwYzk4ZGQzYWU0ZDBmODY4ODZhNWZmM2E4OWU1YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjQ4NzMwYzAzMDY5NGIxNmJkMTU2ODNjMmU2MmYyMDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45Mjc3MjcwMDAwMDAwMDQsIC03Ni43MzE1MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGJiOTYxMzE4ZWFiNDAyMjg1NWEzMjdhZTA4MzU1NGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmU5NGYyNjIyYTVhNDk0NThkMTY0YjQ3OGM5ZDQxM2EgPSAkKGA8ZGl2IGlkPSJodG1sX2ZlOTRmMjYyMmE1YTQ5NDU4ZDE2NGI0NzhjOWQ0MTNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Kb3kgb2YgV29yc2hpcDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGJiOTYxMzE4ZWFiNDAyMjg1NWEzMjdhZTA4MzU1NGYuc2V0Q29udGVudChodG1sX2ZlOTRmMjYyMmE1YTQ5NDU4ZDE2NGI0NzhjOWQ0MTNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y0ODczMGMwMzA2OTRiMTZiZDE1NjgzYzJlNjJmMjA5LmJpbmRQb3B1cChwb3B1cF80YmI5NjEzMThlYWI0MDIyODU1YTMyN2FlMDgzNTU0ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmQ4NjVmZGQwYzc2NDVkYTkwYWJkZWJhYzlmZmQ5YmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC42NzAwMjEwMDAwMDAwMDYsIC03Ny4wMDYwNjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGNkMTEzMGVmNzI2NDY1YjhmNzU3MTVlNjAxNjY4YzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjZlOGUwNmExY2RjNDE2ZGJjNDk2YjIwOTU0YWJjMmIgPSAkKGA8ZGl2IGlkPSJodG1sXzY2ZThlMDZhMWNkYzQxNmRiYzQ5NmIyMDk1NGFiYzJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db21tdW5pdHkgU3VwcG9ydCBTeXN0ZW1zIEluYyBBQ0NPS0VFSzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGNkMTEzMGVmNzI2NDY1YjhmNzU3MTVlNjAxNjY4Yzguc2V0Q29udGVudChodG1sXzY2ZThlMDZhMWNkYzQxNmRiYzQ5NmIyMDk1NGFiYzJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJkODY1ZmRkMGM3NjQ1ZGE5MGFiZGViYWM5ZmZkOWJjLmJpbmRQb3B1cChwb3B1cF8wY2QxMTMwZWY3MjY0NjViOGY3NTcxNWU2MDE2NjhjOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2FiZDUwNTJhMmM3NDM4Y2JlZjczYTZiYmQ3MTBkNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xMTYwODkyNywgLTc3LjA1MjI2MzA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxYjRhYzZmYjAxMTRjYWViYzA5NGEyN2E1NzNiMDhmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5NTI0OGNiZmQwYTQ1NzJhY2Y0NjJkMjI3NTZlYjllID0gJChgPGRpdiBpZD0iaHRtbF85OTUyNDhjYmZkMGE0NTcyYWNmNDYyZDIyNzU2ZWI5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hyaXNtYSBDaGFyaXRpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxYjRhYzZmYjAxMTRjYWViYzA5NGEyN2E1NzNiMDhmLnNldENvbnRlbnQoaHRtbF85OTUyNDhjYmZkMGE0NTcyYWNmNDYyZDIyNzU2ZWI5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYWJkNTA1MmEyYzc0MzhjYmVmNzNhNmJiZDcxMGQ0Yi5iaW5kUG9wdXAocG9wdXBfYzFiNGFjNmZiMDExNGNhZWJjMDk0YTI3YTU3M2IwOGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmNTQ3ZWQyOTYxMDQ2NTBiYzBlYzAxODkzMzgzYmMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNjcwNjA1MDYsIC03Ny4wMTI2ODk4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDE4MTA5YjE0N2Q0OWQxOTg0MTNjMDg1ZTM3YTNiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYTY2YzkwNjljNTA0YzFhOWQ2NDMyMDliMGExOWMxZCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2E2NmM5MDY5YzUwNGMxYTlkNjQzMjA5YjBhMTljMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpdmVyIEpvcmRhbiwgSW5jLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQxODEwOWIxNDdkNDlkMTk4NDEzYzA4NWUzN2EzYjguc2V0Q29udGVudChodG1sXzNhNjZjOTA2OWM1MDRjMWE5ZDY0MzIwOWIwYTE5YzFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmNTQ3ZWQyOTYxMDQ2NTBiYzBlYzAxODkzMzgzYmMxLmJpbmRQb3B1cChwb3B1cF9lZDE4MTA5YjE0N2Q0OWQxOTg0MTNjMDg1ZTM3YTNiOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTEzMzY5ZjIwMTdkNGNiOWFiOTNlNzg1YmU5MTVhMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44ODQ4NDM4MSwgLTc2LjczMDk1NTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1ZTJhNTdjMDY4ZjQzYTdhYjBkMGU0OWJkYTNkNTVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyMDc1MGYwZmQ2YTQxMzY4OWVjZmVlZjRkNDU2ZGJjID0gJChgPGRpdiBpZD0iaHRtbF9lMjA3NTBmMGZkNmE0MTM2ODllY2ZlZWY0ZDQ1NmRiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm91bnRhaW4gQ29tbXVuaXR5IEVucmljaG1lbnQgSW5jLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTVlMmE1N2MwNjhmNDNhN2FiMGQwZTQ5YmRhM2Q1NWUuc2V0Q29udGVudChodG1sX2UyMDc1MGYwZmQ2YTQxMzY4OWVjZmVlZjRkNDU2ZGJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxMzM2OWYyMDE3ZDRjYjlhYjkzZTc4NWJlOTE1YTBkLmJpbmRQb3B1cChwb3B1cF9hNWUyYTU3YzA2OGY0M2E3YWIwZDBlNDliZGEzZDU1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjE2MTUxMDhmNzMyNGI5MTk4MzhiMzdkNTFiN2M1MzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xMTY5Mjc4OSwgLTc3LjE2MDgyOTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3ZjIwZmUyNTEzMjQyMDJiZDQwMzcwZjE1NDViZWFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZlYjM5ZDdiOWNmYTQ5MzJiZmUyMTI5M2IwYWEzMzE4ID0gJChgPGRpdiBpZD0iaHRtbF9mZWIzOWQ3YjljZmE0OTMyYmZlMjEyOTNiMGFhMzMxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGVhbGluZyBhbmQgRGVsaXZlcmFuY2UgTWluaXN0cnksIEluYy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI3ZjIwZmUyNTEzMjQyMDJiZDQwMzcwZjE1NDViZWFkLnNldENvbnRlbnQoaHRtbF9mZWIzOWQ3YjljZmE0OTMyYmZlMjEyOTNiMGFhMzMxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MTYxNTEwOGY3MzI0YjkxOTgzOGIzN2Q1MWI3YzUzNS5iaW5kUG9wdXAocG9wdXBfMjdmMjBmZTI1MTMyNDIwMmJkNDAzNzBmMTU0NWJlYWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAzNmI1NTJhOWQ1ZTQ0ZDI4Yjg5ZjFmZDMzMGM5MDAzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDEwNTg4MDYsIC03Ni45ODE3Mjk3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDNkMmEwMjcwYjQ0NDY4ODc0NTlkMzkxY2Y2NjkzMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDA0Zjc5ZTg3Mzk0NDk5YmZjMjE4ZDg0YjE3MjIxYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDQwNGY3OWU4NzM5NDQ5OWJmYzIxOGQ4NGIxNzIyMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNhaW50IENhbWlsbHVzIENhdGhvbGljIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDAzZDJhMDI3MGI0NDQ2ODg3NDU5ZDM5MWNmNjY5MzIuc2V0Q29udGVudChodG1sXzQ0MDRmNzllODczOTQ0OTliZmMyMThkODRiMTcyMjFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAzNmI1NTJhOWQ1ZTQ0ZDI4Yjg5ZjFmZDMzMGM5MDAzLmJpbmRQb3B1cChwb3B1cF9kMDNkMmEwMjcwYjQ0NDY4ODc0NTlkMzkxY2Y2NjkzMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTdhZjExYjViZGZjNDUxMGEyZmVmODA0ZmE1N2Q2MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NDA3NjgsIC03Ni43MjUyMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjRmMDk4NTQwZDMyNGY4N2I1ZDQ0Y2M4ZTQwODRlMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTg4YjljZWEyYzYzNDJmNWE1ODAyOWE3NzUyYjRmN2QgPSAkKGA8ZGl2IGlkPSJodG1sX2E4OGI5Y2VhMmM2MzQyZjVhNTgwMjlhNzc1MmI0ZjdkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaW4gT2FrIFZpbGxhZ2UgU2VuaW9yPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NGYwOTg1NDBkMzI0Zjg3YjVkNDRjYzhlNDA4NGUzMy5zZXRDb250ZW50KGh0bWxfYTg4YjljZWEyYzYzNDJmNWE1ODAyOWE3NzUyYjRmN2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTdhZjExYjViZGZjNDUxMGEyZmVmODA0ZmE1N2Q2MWQuYmluZFBvcHVwKHBvcHVwXzY0ZjA5ODU0MGQzMjRmODdiNWQ0NGNjOGU0MDg0ZTMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Y2YzYzVkY2UxYzk0MWQ2ODRkNWQ4MDY5YTY3Nzk5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjEyMTMwNjI3LCAtNzcuMTU4OTE1MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTg0NmM0YzdlNTBmNGRiMTlhZWZkMTc3OWRjZjZmYWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmM2YmZmNWQzNWVkNGRiN2IzNjM3NGU1NzE0ZTM3YzMgPSAkKGA8ZGl2IGlkPSJodG1sXzZjNmJmZjVkMzVlZDRkYjdiMzYzNzRlNTcxNGUzN2MzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaGFkeSBHcm92ZSBBcGFydG1lbnRzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hODQ2YzRjN2U1MGY0ZGIxOWFlZmQxNzc5ZGNmNmZhZS5zZXRDb250ZW50KGh0bWxfNmM2YmZmNWQzNWVkNGRiN2IzNjM3NGU1NzE0ZTM3YzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmNmM2M1ZGNlMWM5NDFkNjg0ZDVkODA2OWE2Nzc5OWQuYmluZFBvcHVwKHBvcHVwX2E4NDZjNGM3ZTUwZjRkYjE5YWVmZDE3NzlkY2Y2ZmFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OTE5Y2Y4OGJhZWQ0ODQ3YTdlMzRlYTEzYjc2NDViMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA0NjU4NzU4LCAtNzYuOTc3MTIwNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTYwMTg4OTk3OWVjNDZjNGFkMzM4MTZkMDZkODQyMDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdkODQ4ZWU2YTA3NDIwMzljNjA4YmU2ZGUxMDAwMzkgPSAkKGA8ZGl2IGlkPSJodG1sXzE3ZDg0OGVlNmEwNzQyMDM5YzYwOGJlNmRlMTAwMDM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaGl0ZSBPYWsgU2VuaW9yIENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTYwMTg4OTk3OWVjNDZjNGFkMzM4MTZkMDZkODQyMDMuc2V0Q29udGVudChodG1sXzE3ZDg0OGVlNmEwNzQyMDM5YzYwOGJlNmRlMTAwMDM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ5MTljZjg4YmFlZDQ4NDdhN2UzNGVhMTNiNzY0NWIzLmJpbmRQb3B1cChwb3B1cF8xNjAxODg5OTc5ZWM0NmM0YWQzMzgxNmQwNmQ4NDIwMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGYxYjI2OTIyYjgzNDhiMWIxNTIwZTAyNTEyZGE0ZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xMzYzOTk4NSwgLTc3LjIwNjM5NjQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiNDg2MjZjMmViYjRlNDlhM2JiMjY5MDU5NDM0YjJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0ODg1OWRjYmM4MTRmNWNhYzFlMDZjMjQyMTRhMzIwID0gJChgPGRpdiBpZD0iaHRtbF80NDg4NTlkY2JjODE0ZjVjYWMxZTA2YzI0MjE0YTMyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TG9uZG9uZGVycnkgVG93ZXJzIEFwYXJ0bWVudDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmI0ODYyNmMyZWJiNGU0OWEzYmIyNjkwNTk0MzRiMmMuc2V0Q29udGVudChodG1sXzQ0ODg1OWRjYmM4MTRmNWNhYzFlMDZjMjQyMTRhMzIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBmMWIyNjkyMmI4MzQ4YjFiMTUyMGUwMjUxMmRhNGU0LmJpbmRQb3B1cChwb3B1cF9iYjQ4NjI2YzJlYmI0ZTQ5YTNiYjI2OTA1OTQzNGIyYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTBkOWYzOTBjY2UyNGVjZGFiZjdiZmNmZjQ1ZWI3NjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NjUzMjEsIC03Ni45MjM1ODA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhZmFlMGZlZTk4ZjQ5MjFiN2EwMWUzZTE0M2RlMmNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2N2NmMjc0MzkwZTQ4YWRhNTQxOGFkZmJjNGRlNjRlID0gJChgPGRpdiBpZD0iaHRtbF80NjdjZjI3NDM5MGU0OGFkYTU0MThhZGZiYzRkZTY0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmljdG9yeSBEcnVnIENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmFmYWUwZmVlOThmNDkyMWI3YTAxZTNlMTQzZGUyY2Euc2V0Q29udGVudChodG1sXzQ2N2NmMjc0MzkwZTQ4YWRhNTQxOGFkZmJjNGRlNjRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EwZDlmMzkwY2NlMjRlY2RhYmY3YmZjZmY0NWViNzYzLmJpbmRQb3B1cChwb3B1cF9iYWZhZTBmZWU5OGY0OTIxYjdhMDFlM2UxNDNkZTJjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDc2ZTgxMDIwODRkNDZiYWIxNzQzY2U2YzM2NGEyMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xNTQ5NTU5OSwgLTc3LjE5NzIzMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTNiZTUxMDgyMWI4NDdiN2I4ZDdlZmE1MDhiZTE4MjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjYxMzU1N2I2MWU2NDlkZDkwOTI2NDBiY2Y5YmY4OTQgPSAkKGA8ZGl2IGlkPSJodG1sXzY2MTM1NTdiNjFlNjQ5ZGQ5MDkyNjQwYmNmOWJmODk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aGxha2UgRWxlbWVtdGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTNiZTUxMDgyMWI4NDdiN2I4ZDdlZmE1MDhiZTE4Mjcuc2V0Q29udGVudChodG1sXzY2MTM1NTdiNjFlNjQ5ZGQ5MDkyNjQwYmNmOWJmODk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3NmU4MTAyMDg0ZDQ2YmFiMTc0M2NlNmMzNjRhMjA1LmJpbmRQb3B1cChwb3B1cF9hM2JlNTEwODIxYjg0N2I3YjhkN2VmYTUwOGJlMTgyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmU1MzY2ZDQ2YjQ3NGExY2E5OTkxNTVjMGFhY2VkMTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MTQ0NTE3NSwgLTc2Ljg4MjAxOTcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyMjZlYjlkMDY3ZjQ2MDNiZTdhNzQwYmUzMGY0OGZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhMWU2MmUxNzNhNjQxMzk5ZGQ3ZDRjZDQyYzVmYjIwID0gJChgPGRpdiBpZD0iaHRtbF9jYTFlNjJlMTczYTY0MTM5OWRkN2Q0Y2Q0MmM1ZmIyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3VtbWVyIFJpZGdlIENvbW11bml0eSBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QyMjZlYjlkMDY3ZjQ2MDNiZTdhNzQwYmUzMGY0OGZjLnNldENvbnRlbnQoaHRtbF9jYTFlNjJlMTczYTY0MTM5OWRkN2Q0Y2Q0MmM1ZmIyMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZTUzNjZkNDZiNDc0YTFjYTk5OTE1NWMwYWFjZWQxNy5iaW5kUG9wdXAocG9wdXBfZDIyNmViOWQwNjdmNDYwM2JlN2E3NDBiZTMwZjQ4ZmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiMGViODZjM2RiYTRiZmVhODE4YTU3NTNjN2RkZWUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTY3ODkwNDUsIC03Ny4xNzI2MTA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwNmM3YmUxMDVkZjQ5ZTlhMzQ2ZmYwYWYxODgwNzQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QwYmQ2MGQwOGM3MTQ4NThhNzM2YTVjNjBjYjEwZjgwID0gJChgPGRpdiBpZD0iaHRtbF9kMGJkNjBkMDhjNzE0ODU4YTczNmE1YzYwY2IxMGY4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FsdmFyeSBQZW50ZWNvc3RhbCBNaW5pc3RyaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MDZjN2JlMTA1ZGY0OWU5YTM0NmZmMGFmMTg4MDc0Ny5zZXRDb250ZW50KGh0bWxfZDBiZDYwZDA4YzcxNDg1OGE3MzZhNWM2MGNiMTBmODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmIwZWI4NmMzZGJhNGJmZWE4MThhNTc1M2M3ZGRlZTMuYmluZFBvcHVwKHBvcHVwXzQwNmM3YmUxMDVkZjQ5ZTlhMzQ2ZmYwYWYxODgwNzQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYTY1YzYzZDU3MmY0YzEzODY5ZjhlN2UzMzQ2Njc2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA2NDI4NzE0LCAtNzcuMDM5NDIyMzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2I5MDg3NDQ1MmRlNDk4Y2FlOTg2NWJkMmRjMjc0N2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzAwODAxMDJkODgzNDQ0N2JiNDkwZGIxYjZiNmI1YTYgPSAkKGA8ZGl2IGlkPSJodG1sXzMwMDgwMTAyZDg4MzQ0NDdiYjQ5MGRiMWI2YjZiNWE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LZW5uZWR5IENsdXN0ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiOTA4NzQ0NTJkZTQ5OGNhZTk4NjViZDJkYzI3NDdlLnNldENvbnRlbnQoaHRtbF8zMDA4MDEwMmQ4ODM0NDQ3YmI0OTBkYjFiNmI2YjVhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYTY1YzYzZDU3MmY0YzEzODY5ZjhlN2UzMzQ2Njc2Zi5iaW5kUG9wdXAocG9wdXBfY2I5MDg3NDQ1MmRlNDk4Y2FlOTg2NWJkMmRjMjc0N2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwNGNiZjE4MWM3NjQ5YTg5YTRhZGFiYjBhNTAwZmI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDQwMDA4NTQsIC03Ny4wNDM0MzU5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Zjg1YWMzYzNkNWE0OWVkYmRjZWI3ZTZlMTZiZDQzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzgwYzQ4YjQ2MWE0ZmFiYmFiMjkzMTNhNWVlMWQ0MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTM4MGM0OGI0NjFhNGZhYmJhYjI5MzEzYTVlZTFkNDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPllhZCBZZWh1ZGEgb2YgR3JlYXRlciBXYXNoaW5ndG9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Zjg1YWMzYzNkNWE0OWVkYmRjZWI3ZTZlMTZiZDQzZi5zZXRDb250ZW50KGh0bWxfZTM4MGM0OGI0NjFhNGZhYmJhYjI5MzEzYTVlZTFkNDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjA0Y2JmMTgxYzc2NDlhODlhNGFkYWJiMGE1MDBmYjcuYmluZFBvcHVwKHBvcHVwXzhmODVhYzNjM2Q1YTQ5ZWRiZGNlYjdlNmUxNmJkNDNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNWM1MWExMTNkMTA0ZDA5YmMxNWY0ZDM5OWE1YjEwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjE3NDI4MTkzLCAtNzcuMjA2MTEwNDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTY5N2Q5NDA5NDk4NDM0MzhmZjE2NjU5NGZhM2I5N2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGI5MTQwMDMxNWIzNGYwNjljZDk2ZTRjMDVjOWUwNzEgPSAkKGA8ZGl2IGlkPSJodG1sXzBiOTE0MDAzMTViMzRmMDY5Y2Q5NmU0YzA1YzllMDcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Xb21lbiBXaG8gQ2FyZSBNaW5pc3RyaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Njk3ZDk0MDk0OTg0MzQzOGZmMTY2NTk0ZmEzYjk3YS5zZXRDb250ZW50KGh0bWxfMGI5MTQwMDMxNWIzNGYwNjljZDk2ZTRjMDVjOWUwNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTVjNTFhMTEzZDEwNGQwOWJjMTVmNGQzOTlhNWIxMDguYmluZFBvcHVwKHBvcHVwXzk2OTdkOTQwOTQ5ODQzNDM4ZmYxNjY1OTRmYTNiOTdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hY2ZmNDVlZGE2MmE0OGJhYTUwMzkzOWI3NDRjNDRiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjE3ODk1OTU2LCAtNzcuMDk5NzM2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMzMzMDRlYWY1YTg0MTk3YTNlZjE3YjhlYzhlNzc4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Y2YwOGM0NmJmYjk0ODYzODY3Y2Q4ODE3MTczMWE1OSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWNmMDhjNDZiZmI5NDg2Mzg2N2NkODgxNzE3MzFhNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk91ciBIb3VzZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzMzMzA0ZWFmNWE4NDE5N2EzZWYxN2I4ZWM4ZTc3ODcuc2V0Q29udGVudChodG1sXzljZjA4YzQ2YmZiOTQ4NjM4NjdjZDg4MTcxNzMxYTU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjZmY0NWVkYTYyYTQ4YmFhNTAzOTM5Yjc0NGM0NGIzLmJpbmRQb3B1cChwb3B1cF8zMzMzMDRlYWY1YTg0MTk3YTNlZjE3YjhlYzhlNzc4NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDdhNDI0MTEzMDhhNDY1OWI3YjM5MzY1ZjJiMDkyYjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xMzgyMzE5NiwgLTc3LjE5NDUyNDYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhhNTE4OWI0YTc1OTQ1YWRhYzI4MGM0OTM0YjQ1Nzc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3YzgxMjMwM2MzYzQ2NGJhNDQ3YjE3MjlhMDkzMGQyID0gJChgPGRpdiBpZD0iaHRtbF9mN2M4MTIzMDNjM2M0NjRiYTQ0N2IxNzI5YTA5MzBkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R2FpdGhlcnNidXJnIENvbW11bml0eSBTb3VwIEtpdGNoZW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhNTE4OWI0YTc1OTQ1YWRhYzI4MGM0OTM0YjQ1Nzc5LnNldENvbnRlbnQoaHRtbF9mN2M4MTIzMDNjM2M0NjRiYTQ0N2IxNzI5YTA5MzBkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kN2E0MjQxMTMwOGE0NjU5YjdiMzkzNjVmMmIwOTJiMS5iaW5kUG9wdXAocG9wdXBfOGE1MTg5YjRhNzU5NDVhZGFjMjgwYzQ5MzRiNDU3NzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwZTdkMTk0ZjMyZDQ4MWViNDRlNzQxNTlkOTVhOWE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDIwOTQyOTEsIC03Ny4wMDU1MDYwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMzQ3YzRjN2UyZTU0NTdmYTYyNzNhNTU1OWIxZTFlOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYzI0MTgxNmRkZjQ0N2RkYWJhNmQxODZiY2E3YWZjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYmMyNDE4MTZkZGY0NDdkZGFiYTZkMTg2YmNhN2FmYzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNoZXBoZXJkcyBvZiBaaW9uIE1pbmlzdHJpZXMgSW50ZXJuYXRpb25hbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTM0N2M0YzdlMmU1NDU3ZmE2MjczYTU1NTliMWUxZTkuc2V0Q29udGVudChodG1sX2JjMjQxODE2ZGRmNDQ3ZGRhYmE2ZDE4NmJjYTdhZmM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwZTdkMTk0ZjMyZDQ4MWViNDRlNzQxNTlkOTVhOWE2LmJpbmRQb3B1cChwb3B1cF8xMzQ3YzRjN2UyZTU0NTdmYTYyNzNhNTU1OWIxZTFlOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmY4MDEwYTk0NDhlNDA1Yzk0NTI4NjQ5MmNlYjhjODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MTgzMDEyLCAtNzYuODg4MDUxNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjUwYjVmMWQzMGE5NGRlYWJhMDNlYjE0NzQ0NDI5ZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODZiMDc0NDU5MzFmNDI3NDg1MzQ5NWZmZjcyNTU3Y2MgPSAkKGA8ZGl2IGlkPSJodG1sXzg2YjA3NDQ1OTMxZjQyNzQ4NTM0OTVmZmY3MjU1N2NjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbGRlcmx5IFdvcmxkIExMQzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjUwYjVmMWQzMGE5NGRlYWJhMDNlYjE0NzQ0NDI5ZGIuc2V0Q29udGVudChodG1sXzg2YjA3NDQ1OTMxZjQyNzQ4NTM0OTVmZmY3MjU1N2NjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZmODAxMGE5NDQ4ZTQwNWM5NDUyODY0OTJjZWI4YzgxLmJpbmRQb3B1cChwb3B1cF9mNTBiNWYxZDMwYTk0ZGVhYmEwM2ViMTQ3NDQ0MjlkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjY2MmY1ZGMwYzYxNDUwYjliZjE4N2FhY2MzYjQ2ZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MTcyODQxNiwgLTc2Ljg0MzczNTQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhMjhjMTg2ODM4MjQ5ZjViNDI3NWJlOThjYjA2YmNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwOTAwZjE1ZmUyYTQxYjY4NGE5MjZlOTdiNjY2MTdiID0gJChgPGRpdiBpZD0iaHRtbF9lMDkwMGYxNWZlMmE0MWI2ODRhOTI2ZTk3YjY2NjE3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIEpvc2VwaCBDYXRob2xpYyBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhMjhjMTg2ODM4MjQ5ZjViNDI3NWJlOThjYjA2YmNiLnNldENvbnRlbnQoaHRtbF9lMDkwMGYxNWZlMmE0MWI2ODRhOTI2ZTk3YjY2NjE3Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NjYyZjVkYzBjNjE0NTBiOWJmMTg3YWFjYzNiNDZkYS5iaW5kUG9wdXAocG9wdXBfYmEyOGMxODY4MzgyNDlmNWI0Mjc1YmU5OGNiMDZiY2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliMTM3NmU0NTQxNjQ3MTliNmNjN2ZlMGU5ZWE1NDNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTg0ODE4OSwgLTc3LjI0Njc1MTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmODc1YWM1MjRiYTQ5NmNhMjdhNWRiOWQ4ZWMzYzE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhODA4MGJlOTdlNzQ3Y2ZiYjA1MDk0ODJlOWI5OTgxID0gJChgPGRpdiBpZD0iaHRtbF8wYTgwODBiZTk3ZTc0N2NmYmIwNTA5NDgyZTliOTk4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9udGdvbWVyeSBDb2xsZWdlLSBHZXJtYW50b3duPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Zjg3NWFjNTI0YmE0OTZjYTI3YTVkYjlkOGVjM2MxNS5zZXRDb250ZW50KGh0bWxfMGE4MDgwYmU5N2U3NDdjZmJiMDUwOTQ4MmU5Yjk5ODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWIxMzc2ZTQ1NDE2NDcxOWI2Y2M3ZmUwZTllYTU0M2IuYmluZFBvcHVwKHBvcHVwXzVmODc1YWM1MjRiYTQ5NmNhMjdhNWRiOWQ4ZWMzYzE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMTQ0ZGRhYzFkY2U0ZjUxYTU1ZjI0NDg5NmQ5YjA5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkxOTA1MDU3LCAtNzYuODg3NTM3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTNlYTA0ODc0MDBmNDcyYWE1MTY1NjUwMmQwZDlkMGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTkyMTExYjNkMGI5NGFlMGI5YjRkN2MxOThjMTE0NTUgPSAkKGA8ZGl2IGlkPSJodG1sXzk5MjExMWIzZDBiOTRhZTBiOWI0ZDdjMTk4YzExNDU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaGFiYWNoIEVtZXJnZW5jeSBFbXBvd2VybWVudDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNlYTA0ODc0MDBmNDcyYWE1MTY1NjUwMmQwZDlkMGQuc2V0Q29udGVudChodG1sXzk5MjExMWIzZDBiOTRhZTBiOWI0ZDdjMTk4YzExNDU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxNDRkZGFjMWRjZTRmNTFhNTVmMjQ0ODk2ZDliMDkwLmJpbmRQb3B1cChwb3B1cF9lM2VhMDQ4NzQwMGY0NzJhYTUxNjU2NTAyZDBkOWQwZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTIyZmFjYTAzMmM1NGUxN2JjNmJmMTkwYWVhMTMxNzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NjEyNzEsIC03Ni45MzM0NzE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkZDI2MTRjMGY2YTQ5YjlhMGNkM2E3MTI4YjEwNmYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3MzgwMWE1NzFkNjQ5NzRhMDAzYTkzMTNjN2VlODM0ID0gJChgPGRpdiBpZD0iaHRtbF8yNzM4MDFhNTcxZDY0OTc0YTAwM2E5MzEzYzdlZTgzNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R2FsaWxlZSBDb21tdW5pdHkgRGV2ZWxvcG1lbnQgQ29ycG9yYXRpb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkZDI2MTRjMGY2YTQ5YjlhMGNkM2E3MTI4YjEwNmYxLnNldENvbnRlbnQoaHRtbF8yNzM4MDFhNTcxZDY0OTc0YTAwM2E5MzEzYzdlZTgzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMjJmYWNhMDMyYzU0ZTE3YmM2YmYxOTBhZWExMzE3NC5iaW5kUG9wdXAocG9wdXBfZmRkMjYxNGMwZjZhNDliOWEwY2QzYTcxMjhiMTA2ZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5MGFmODIwNTBhZjRiODlhMWQ1OWJhYzA1M2IwY2VlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODkxNTI5LCAtNzYuOTA5MTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxOGI0Y2VkMTY3NDQ2NWE5MDQ1NDcwOTIzYmM1MjNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiNGYxZDg4Y2E3YTQzNTRiYzA3NzQ3ZDU0NzU0ZDM3ID0gJChgPGRpdiBpZD0iaHRtbF9mYjRmMWQ4OGNhN2E0MzU0YmMwNzc0N2Q1NDc1NGQzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RmFpdGggVGVtcGxlICMyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MThiNGNlZDE2NzQ0NjVhOTA0NTQ3MDkyM2JjNTIzZC5zZXRDb250ZW50KGh0bWxfZmI0ZjFkODhjYTdhNDM1NGJjMDc3NDdkNTQ3NTRkMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzkwYWY4MjA1MGFmNGI4OWExZDU5YmFjMDUzYjBjZWUuYmluZFBvcHVwKHBvcHVwXzkxOGI0Y2VkMTY3NDQ2NWE5MDQ1NDcwOTIzYmM1MjNkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MzYzMTEzOGVhN2U0OTZiODcwNGM4NWZlYjRjOGFmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg5MTUyOSwgLTc2LjkwOTE5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMjQyZjZiODc2Y2Q0NTVlYjI0YmM2OGRlMmZhODk5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYzI3Y2E2OTQ1N2Y0ZWM1OTJmZDU4MDliZTJiMGQxOCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2MyN2NhNjk0NTdmNGVjNTkyZmQ1ODA5YmUyYjBkMTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByaW5jZSBHZW9yZ2VzIEJyb3duIEJhZyBQcm9ncmFtIC0tIFdhcmVob3VzZSBUcmFuc2ZlcnM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyNDJmNmI4NzZjZDQ1NWViMjRiYzY4ZGUyZmE4OTk2LnNldENvbnRlbnQoaHRtbF8zYzI3Y2E2OTQ1N2Y0ZWM1OTJmZDU4MDliZTJiMGQxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MzYzMTEzOGVhN2U0OTZiODcwNGM4NWZlYjRjOGFmYy5iaW5kUG9wdXAocG9wdXBfZTI0MmY2Yjg3NmNkNDU1ZWIyNGJjNjhkZTJmYTg5OTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2NmUzYjc0ZmRmMTQ1N2ZiODkxODlhYmNiYjZjYjc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDU0ODczMDQsIC03Ni45Njk5Mzc1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTNmMzM2NzgyYjM0NjU1YmFmOGM4YjNhZTE0Yjg3NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjgyMzZhYzU0Y2M0NDY3OTYyYjkwMjRmMTBiZDAyYyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWY4MjM2YWM1NGNjNDQ2Nzk2MmI5MDI0ZjEwYmQwMmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhaW5ib3cgQ29tbXVuaXR5IERldmVsb3BtZW50IENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmUzZjMzNjc4MmIzNDY1NWJhZjhjOGIzYWUxNGI4NzUuc2V0Q29udGVudChodG1sXzlmODIzNmFjNTRjYzQ0Njc5NjJiOTAyNGYxMGJkMDJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y2NmUzYjc0ZmRmMTQ1N2ZiODkxODlhYmNiYjZjYjc2LmJpbmRQb3B1cChwb3B1cF8yZTNmMzM2NzgyYjM0NjU1YmFmOGM4YjNhZTE0Yjg3NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjcyOTAzYWM2YjJjNGQxOGFmNzAzZmVjZTUzZWU4NDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45OTg2NzQsIC03Ni44NzQ0MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzUzYzQ4YjZlZTZhNGNlYTllNjExNmZjODQwOTNmMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ1MzEyYTZmNjI4NDJiNmFlMjFkMzM4Mjk2NTFkYzkgPSAkKGA8ZGl2IGlkPSJodG1sXzM0NTMxMmE2ZjYyODQyYjZhZTIxZDMzODI5NjUxZGM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaXR5IG9mIEdyZWVuYmVsdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzUzYzQ4YjZlZTZhNGNlYTllNjExNmZjODQwOTNmMjQuc2V0Q29udGVudChodG1sXzM0NTMxMmE2ZjYyODQyYjZhZTIxZDMzODI5NjUxZGM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3MjkwM2FjNmIyYzRkMThhZjcwM2ZlY2U1M2VlODQ5LmJpbmRQb3B1cChwb3B1cF83NTNjNDhiNmVlNmE0Y2VhOWU2MTE2ZmM4NDA5M2YyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQ3YTI1MzU5ZjY1NDVmNjhiZjljNDdlNmU2OTRjNmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNjcyNTYyMSwgLTc3LjEyMjQxNDg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3Njc3YjdiZTA4ZTRhMTc4MjY4NjcxMzA1YzFkNmQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNlMmI3NjE2YmQyMTQ1ZTM4NmE5ZGQ1ZGY3MjA2ZWUzID0gJChgPGRpdiBpZD0iaHRtbF8zZTJiNzYxNmJkMjE0NWUzODZhOWRkNWRmNzIwNmVlMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9ja3ZpbGxlIFNwYW5pc2ggU0RBIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDc2NzdiN2JlMDhlNGExNzgyNjg2NzEzMDVjMWQ2ZDIuc2V0Q29udGVudChodG1sXzNlMmI3NjE2YmQyMTQ1ZTM4NmE5ZGQ1ZGY3MjA2ZWUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0N2EyNTM1OWY2NTQ1ZjY4YmY5YzQ3ZTZlNjk0YzZmLmJpbmRQb3B1cChwb3B1cF9kNzY3N2I3YmUwOGU0YTE3ODI2ODY3MTMwNWMxZDZkMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjhhYTk1NDM1NzM0NDlmZThmYTYzYjRkNWU4YTU0ZWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xNDExOTU1OSwgLTc3LjE5OTY1MTQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkNjc4YzRmNTdlNDQyMWE4ZTI3ZjA1NjAyZjU3OTFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U5ZDNiOGE1ZjViZTQwNGM4ODE0OThlMTM2YTc0YzI3ID0gJChgPGRpdiBpZD0iaHRtbF9lOWQzYjhhNWY1YmU0MDRjODgxNDk4ZTEzNmE3NGMyNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlcmUncyBIb3BlIENocmlzdGlhbiBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FkNjc4YzRmNTdlNDQyMWE4ZTI3ZjA1NjAyZjU3OTFlLnNldENvbnRlbnQoaHRtbF9lOWQzYjhhNWY1YmU0MDRjODgxNDk4ZTEzNmE3NGMyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iOGFhOTU0MzU3MzQ0OWZlOGZhNjNiNGQ1ZThhNTRlZi5iaW5kUG9wdXAocG9wdXBfYWQ2NzhjNGY1N2U0NDIxYThlMjdmMDU2MDJmNTc5MWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4OTdiNWExYWNkYzRmODM5NTVhMzA2NjJlMTgwOTJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODU4MDY3LCAtNzYuODg5NTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3Nzg5M2E4Y2ZjZjRhNmE5ZGY0NTA5YmExMWQ2MjcxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwM2RjZGE3ZWNjODQ2MGI4MDI3NWE4YWE1YjAwMTk5ID0gJChgPGRpdiBpZD0iaHRtbF9lMDNkY2RhN2VjYzg0NjBiODAyNzVhOGFhNWIwMDE5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW5nZWwgU3F1YXJlIEFzc2lzdGVkIExpdmluZzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjc3ODkzYThjZmNmNGE2YTlkZjQ1MDliYTExZDYyNzEuc2V0Q29udGVudChodG1sX2UwM2RjZGE3ZWNjODQ2MGI4MDI3NWE4YWE1YjAwMTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk4OTdiNWExYWNkYzRmODM5NTVhMzA2NjJlMTgwOTJkLmJpbmRQb3B1cChwb3B1cF8yNzc4OTNhOGNmY2Y0YTZhOWRmNDUwOWJhMTFkNjI3MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTg2MGQwMjZiNjFmNGZiMGI4NzdhZmRmMjQ3NDNjYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNzc1NTYzMSwgLTc2Ljk1OTk3Njc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EwM2NhZjRhODNiNzQ1MTM4ZmI5ZGFlNTk5NDljYzlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVhYzQyNTYyYzVmZjQ4MTliMWU4OTNhYjZjOGE0ZjFiID0gJChgPGRpdiBpZD0iaHRtbF81YWM0MjU2MmM1ZmY0ODE5YjFlODkzYWI2YzhhNGYxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmF0aW9ucyBVbml0ZWQgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EwM2NhZjRhODNiNzQ1MTM4ZmI5ZGFlNTk5NDljYzlmLnNldENvbnRlbnQoaHRtbF81YWM0MjU2MmM1ZmY0ODE5YjFlODkzYWI2YzhhNGYxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ODYwZDAyNmI2MWY0ZmIwYjg3N2FmZGYyNDc0M2NhMC5iaW5kUG9wdXAocG9wdXBfYTAzY2FmNGE4M2I3NDUxMzhmYjlkYWU1OTk0OWNjOWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NhODAyMzQxOGE2MjQzYzRhYWI3ZDVhZmI2Zjc5N2NlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODE2NjEzMDAwMDAwMDA0LCAtNzYuOTY1MTg3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NTFjMjA2M2VkNTg0YTAwYTRhMGViYzk2YjdiOGFiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYjMyMjhiNzlkOTk0OWUwYWQ1YmM4YzRhNzM5ZGRjMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWIzMjI4Yjc5ZDk5NDllMGFkNWJjOGM0YTczOWRkYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhcm5hYnkgTWFub3IgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1MWMyMDYzZWQ1ODRhMDBhNGEwZWJjOTZiN2I4YWI2LnNldENvbnRlbnQoaHRtbF8xYjMyMjhiNzlkOTk0OWUwYWQ1YmM4YzRhNzM5ZGRjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYTgwMjM0MThhNjI0M2M0YWFiN2Q1YWZiNmY3OTdjZS5iaW5kUG9wdXAocG9wdXBfNDUxYzIwNjNlZDU4NGEwMGE0YTBlYmM5NmI3YjhhYjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxODhjZjA2MzIzYTQ0NDFiMTVjMjUwMjljZjQ0ZDhmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTIzNzU4LCAtNzYuODk0MDE1NTAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTE5YTAyZGEwZTcyNDE5ZmE1YzBkYzBiMmMxODAxYzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDc4Mzk5NWVjZTU3NGNkYTkyODhhMGVmM2JlOGU0MmYgPSAkKGA8ZGl2IGlkPSJodG1sXzA3ODM5OTVlY2U1NzRjZGE5Mjg4YTBlZjNiZThlNDJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij40LUggQ2x1YiBQYXJrIGFuZCBQbGFubmluZzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTE5YTAyZGEwZTcyNDE5ZmE1YzBkYzBiMmMxODAxYzIuc2V0Q29udGVudChodG1sXzA3ODM5OTVlY2U1NzRjZGE5Mjg4YTBlZjNiZThlNDJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYxODhjZjA2MzIzYTQ0NDFiMTVjMjUwMjljZjQ0ZDhmLmJpbmRQb3B1cChwb3B1cF8xMTlhMDJkYTBlNzI0MTlmYTVjMGRjMGIyYzE4MDFjMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDA0MDhlOTgyNzBiNDRjZGEyY2QzMTI4MDJjODE2NzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMDA1MDEsIC03Ni44Nzc0NTEwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MDZkYTA2OWM3ZjU0MjFhOGQ5OWE0OGNlN2U2Zjc4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNzZmYzlmMDQwZjQ0NjI3ODQ0ZTA3MmEwNzM5ZmJmZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDc2ZmM5ZjA0MGY0NDYyNzg0NGUwNzJhMDczOWZiZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNpdHkgb2YgR3JlZW5iZWx0IEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MDZkYTA2OWM3ZjU0MjFhOGQ5OWE0OGNlN2U2Zjc4Yi5zZXRDb250ZW50KGh0bWxfMDc2ZmM5ZjA0MGY0NDYyNzg0NGUwNzJhMDczOWZiZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDA0MDhlOTgyNzBiNDRjZGEyY2QzMTI4MDJjODE2NzkuYmluZFBvcHVwKHBvcHVwXzYwNmRhMDY5YzdmNTQyMWE4ZDk5YTQ4Y2U3ZTZmNzhiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NTJiNjA1ZDFjZmQ0MTI3YTk0YTM3ZWQ0YWVjYjUyZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg4NjMyNywgLTc2LjkxMjA5NjQ5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiOTYwOWJhNjA3YjRmNjg5MzQzZjMyY2FjZWMxOTQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxOTdjZmU3NGNiMjQyNjg5ZWRlMmRlNTJmNmZkOTQ1ID0gJChgPGRpdiBpZD0iaHRtbF80MTk3Y2ZlNzRjYjI0MjY4OWVkZTJkZTUyZjZmZDk0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xvdGhpbmcgb2YgUG93ZXIgRXRlcm5hbCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiOTYwOWJhNjA3YjRmNjg5MzQzZjMyY2FjZWMxOTQ2LnNldENvbnRlbnQoaHRtbF80MTk3Y2ZlNzRjYjI0MjY4OWVkZTJkZTUyZjZmZDk0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NTJiNjA1ZDFjZmQ0MTI3YTk0YTM3ZWQ0YWVjYjUyZC5iaW5kUG9wdXAocG9wdXBfYmI5NjA5YmE2MDdiNGY2ODkzNDNmMzJjYWNlYzE5NDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlOTdjNzg1NjA3OTQ3NmY4ZmRkOTI3ZWM5NGJhNzY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTIxNTgsIC03Ni45MjkzOTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VkYjQxMDRjODdjMzQxODA5MDIyY2QzNmJlYTJkZDYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzZTUxOWVmODk1YzQ1NGQ5NzRiZWNmYjBhODc1MjVlID0gJChgPGRpdiBpZD0iaHRtbF80M2U1MTllZjg5NWM0NTRkOTc0YmVjZmIwYTg3NTI1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R29zcGVsIEJlYXJlcnMgQXNzZW1ibHkgSW50ZXJuYXRpb25hbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWRiNDEwNGM4N2MzNDE4MDkwMjJjZDM2YmVhMmRkNjAuc2V0Q29udGVudChodG1sXzQzZTUxOWVmODk1YzQ1NGQ5NzRiZWNmYjBhODc1MjVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVlOTdjNzg1NjA3OTQ3NmY4ZmRkOTI3ZWM5NGJhNzY2LmJpbmRQb3B1cChwb3B1cF9lZGI0MTA0Yzg3YzM0MTgwOTAyMmNkMzZiZWEyZGQ2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWVjNmI5NTAyZGRlNDRiYzlhMTQ3YmIxMjI1NWE4ZGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNzcwNjI0MywgLTc2Ljk1ODU4NjE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmOTdiYWE4Mzc2YzRlMGM4NjFlMTIxNzIxMWU4OTNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlNWJlNjIyNWFkZDRhNWZhYjAyNDcxNzlkMWRjYTY2ID0gJChgPGRpdiBpZD0iaHRtbF8wZTViZTYyMjVhZGQ0YTVmYWIwMjQ3MTc5ZDFkY2E2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWxsZW4gQ2hhcGVsIEFNRSBDaHVyY2ggT3V0cmVhY2ggTWluaXN0cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmOTdiYWE4Mzc2YzRlMGM4NjFlMTIxNzIxMWU4OTNlLnNldENvbnRlbnQoaHRtbF8wZTViZTYyMjVhZGQ0YTVmYWIwMjQ3MTc5ZDFkY2E2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZWM2Yjk1MDJkZGU0NGJjOWExNDdiYjEyMjU1YThkZi5iaW5kUG9wdXAocG9wdXBfOGY5N2JhYTgzNzZjNGUwYzg2MWUxMjE3MjExZTg5M2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4MmNmMjhlZDQxMzQ2YThhYTk4YzBjMGZiMWFkMmZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDAyNTgzNjQsIC03Ni45NjM3MzI3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kN2FhMjMxOWZmOTk0NzM4YTZlYWEzMDllNzY2MDliOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNDY1OTFhMWNlNDE0ZmE4YjY5MzU2ZDUzZDBhM2MyOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTQ2NTkxYTFjZTQxNGZhOGI2OTM1NmQ1M2QwYTNjMjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRhYmVybmFjdWxvIGRlIGxhIEZlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kN2FhMjMxOWZmOTk0NzM4YTZlYWEzMDllNzY2MDliOC5zZXRDb250ZW50KGh0bWxfYTQ2NTkxYTFjZTQxNGZhOGI2OTM1NmQ1M2QwYTNjMjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTgyY2YyOGVkNDEzNDZhOGFhOThjMGMwZmIxYWQyZmMuYmluZFBvcHVwKHBvcHVwX2Q3YWEyMzE5ZmY5OTQ3MzhhNmVhYTMwOWU3NjYwOWI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjc0YjQ3MmQ4ODM0YjQxODk4NDE1MDA2NjY1NzA1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkyNjczNywgLTc2LjgwNjA3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMTBjYjU3NDU4NGI0OTc1YjQyNWZlODlmYjAyN2U4MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YmI5OGEyMTFkMzE0MjZmYThhMDIwNzk1Y2Y0OGMzMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNmJiOThhMjExZDMxNDI2ZmE4YTAyMDc5NWNmNDhjMzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByaW5jZSBFbW1hbnVlbCBBbGwgTmF0aW9ucyBTREEgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMTBjYjU3NDU4NGI0OTc1YjQyNWZlODlmYjAyN2U4Mi5zZXRDb250ZW50KGh0bWxfNmJiOThhMjExZDMxNDI2ZmE4YTAyMDc5NWNmNDhjMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGI3NGI0NzJkODgzNGI0MTg5ODQxNTAwNjY2NTcwNTAuYmluZFBvcHVwKHBvcHVwXzIxMGNiNTc0NTg0YjQ5NzViNDI1ZmU4OWZiMDI3ZTgyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NWRhNzQ1ZjFiZTE0ODA1OGJiN2ZlYTBmYTkyMTVkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkzMTYwNiwgLTc2LjgwNjQ3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODEzOGNkNjdhNDk0NGQyYTdjOGE3NTgxNjRmMGFlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNzQ4Y2YyYWQxOWU0OGQ2YmE3YmJmMjdmY2Q4MzI2NCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzc0OGNmMmFkMTllNDhkNmJhN2JiZjI3ZmNkODMyNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFwb3N0b2xpYyBDaHVyY2ggR2xvcmlvdXMgVmlzaW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ODEzOGNkNjdhNDk0NGQyYTdjOGE3NTgxNjRmMGFlYS5zZXRDb250ZW50KGh0bWxfMzc0OGNmMmFkMTllNDhkNmJhN2JiZjI3ZmNkODMyNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzVkYTc0NWYxYmUxNDgwNThiYjdmZWEwZmE5MjE1ZDYuYmluZFBvcHVwKHBvcHVwXzk4MTM4Y2Q2N2E0OTQ0ZDJhN2M4YTc1ODE2NGYwYWVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNjRjMzBlN2Y2YzU0NTdhYTM0OWMzYmIzYWMyNTA0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA5ODQ1NywgLTc2Ljg1MDYyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZWM0MGU5MmQ2N2I0ZTRhOGI3ZmM5MmQxM2QwMDI1NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjViNGUyMTJjZDE0ZTY1YmI1MTlmMzQ5NjAwODA5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2Y1YjRlMjEyY2QxNGU2NWJiNTE5ZjM0OTYwMDgwOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZJU0ggb2YgTGF1cmVsLCBJbmMuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZWM0MGU5MmQ2N2I0ZTRhOGI3ZmM5MmQxM2QwMDI1NC5zZXRDb250ZW50KGh0bWxfM2Y1YjRlMjEyY2QxNGU2NWJiNTE5ZjM0OTYwMDgwOTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTY0YzMwZTdmNmM1NDU3YWEzNDljM2JiM2FjMjUwNGUuYmluZFBvcHVwKHBvcHVwXzJlYzQwZTkyZDY3YjRlNGE4YjdmYzkyZDEzZDAwMjU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MTFkMzlmNWI3MGY0NGQ3YTQ1NWMxZTVjNzRlMDk0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk0OTkzLCAtNzYuOTY2NzQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlOTczMTFlNWJlYzQ0YTE5NjA4NGQxZTg1ZDRhMjJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmYmI5OWQwOTc2MjRhMDJhM2ExNTNjMWZiNmEzMWI5ID0gJChgPGRpdiBpZD0iaHRtbF8wZmJiOTlkMDk3NjI0YTAyYTNhMTUzYzFmYjZhMzFiOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UXVlZW5zdG93biBDb21tdW5pdHkgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTk3MzExZTViZWM0NGExOTYwODRkMWU4NWQ0YTIyZi5zZXRDb250ZW50KGh0bWxfMGZiYjk5ZDA5NzYyNGEwMmEzYTE1M2MxZmI2YTMxYjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODExZDM5ZjViNzBmNDRkN2E0NTVjMWU1Yzc0ZTA5NDkuYmluZFBvcHVwKHBvcHVwXzVlOTczMTFlNWJlYzQ0YTE5NjA4NGQxZTg1ZDRhMjJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MmUxMDYzNTc0ODU0NmVjYTVjZGRjOWU4N2I1ZjA1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjEwMTg1LCAtNzYuODQ3NzAxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNmU1YjRkMmIzN2Q0NTYzODk0MTExNTgzNjZjZDljMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYTQ2MTc5N2QzMTY0N2NiOGI0MTM5MzU1MzhjNzU5YSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2E0NjE3OTdkMzE2NDdjYjhiNDEzOTM1NTM4Yzc1OWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhdXJlbCBBZHZvY2FjeSAmIFJlZmVycmFsIFNlcnZpY2VzLCBJbmMuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNmU1YjRkMmIzN2Q0NTYzODk0MTExNTgzNjZjZDljMC5zZXRDb250ZW50KGh0bWxfM2E0NjE3OTdkMzE2NDdjYjhiNDEzOTM1NTM4Yzc1OWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDJlMTA2MzU3NDg1NDZlY2E1Y2RkYzllODdiNWYwNWIuYmluZFBvcHVwKHBvcHVwX2I2ZTViNGQyYjM3ZDQ1NjM4OTQxMTE1ODM2NmNkOWMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MmY5NmNlNTJhZmM0MmY4OTdmODFmM2Y0MDdmNGIzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg1MDYyMzk5OTk5OTk5NiwgLTc2Ljk1MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjdjZjlkOTE2MzZmNDBlZDkzODRiMzRhYTA2MzllMDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzBmNTk3MmIyODE1NDk4YjkyYjRhYmQ0OGI2ODU1YjIgPSAkKGA8ZGl2IGlkPSJodG1sXzMwZjU5NzJiMjgxNTQ5OGI5MmI0YWJkNDhiNjg1NWIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NVlAgSW5jLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjdjZjlkOTE2MzZmNDBlZDkzODRiMzRhYTA2MzllMDkuc2V0Q29udGVudChodG1sXzMwZjU5NzJiMjgxNTQ5OGI5MmI0YWJkNDhiNjg1NWIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcyZjk2Y2U1MmFmYzQyZjg5N2Y4MWYzZjQwN2Y0YjNlLmJpbmRQb3B1cChwb3B1cF8yN2NmOWQ5MTYzNmY0MGVkOTM4NGIzNGFhMDYzOWUwOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTU5YTAwMDg2ZGRkNGJlNTkyM2I5OWUzOTg4OTJmZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MzIwNjM5NiwgLTc2Ljg4ODczODUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2YjIzN2U5YmEwNDQ1MzJiOWJjMWM3ODZhNTgyNDEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyY2Y3YzE4OTNlNjQ4OGU4ZjIxYWM3NGMzMmY1ZmIxID0gJChgPGRpdiBpZD0iaHRtbF83MmNmN2MxODkzZTY0ODhlOGYyMWFjNzRjMzJmNWZiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGliZXJ0eSBIb3VzZSBNaW5pc3RyaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNmIyMzdlOWJhMDQ0NTMyYjliYzFjNzg2YTU4MjQxMC5zZXRDb250ZW50KGh0bWxfNzJjZjdjMTg5M2U2NDg4ZThmMjFhYzc0YzMyZjVmYjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTU5YTAwMDg2ZGRkNGJlNTkyM2I5OWUzOTg4OTJmZDEuYmluZFBvcHVwKHBvcHVwXzA2YjIzN2U5YmEwNDQ1MzJiOWJjMWM3ODZhNTgyNDEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmQ3NzlhZGUyMGE0ZWFjYjhkNTQxNjQxYjA3M2JjNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjgwMjU1NSwgLTc2Ljk1Mjk4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNGI2YjkwZWYwNzc0ZGQzODcwZGUxZGJkMzkzZDViZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZGMwZTBhNzcxZTY0YzdiOTEwZmVjYjkxYjI2YjljMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWRjMGUwYTc3MWU2NGM3YjkxMGZlY2I5MWIyNmI5YzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNoYWRlbmp1YW4gQ2hpbGQgQ2FyZSBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0YjZiOTBlZjA3NzRkZDM4NzBkZTFkYmQzOTNkNWJmLnNldENvbnRlbnQoaHRtbF8xZGMwZTBhNzcxZTY0YzdiOTEwZmVjYjkxYjI2YjljMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZmQ3NzlhZGUyMGE0ZWFjYjhkNTQxNjQxYjA3M2JjNy5iaW5kUG9wdXAocG9wdXBfYTRiNmI5MGVmMDc3NGRkMzg3MGRlMWRiZDM5M2Q1YmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3YmZiNmJiNDUxODQ5ZDRhY2Q0ZTcyMTY2NWJkM2U2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDE5NDQ4MTIsIC03Ny4wMTI2OTI5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MTcyYzAwOTYxZTc0MWJkYmQ0MTU2MmQ2ZWNiNjdjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTFmNjU0N2U0OGY0YzU0YjRjOGZkZDcyZmJjZDkxNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWUxZjY1NDdlNDhmNGM1NGI0YzhmZGQ3MmZiY2Q5MTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNpbHZlciBTcHJpbmcgVU1DPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MTcyYzAwOTYxZTc0MWJkYmQ0MTU2MmQ2ZWNiNjdjNS5zZXRDb250ZW50KGh0bWxfNWUxZjY1NDdlNDhmNGM1NGI0YzhmZGQ3MmZiY2Q5MTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDdiZmI2YmI0NTE4NDlkNGFjZDRlNzIxNjY1YmQzZTYuYmluZFBvcHVwKHBvcHVwXzkxNzJjMDA5NjFlNzQxYmRiZDQxNTYyZDZlY2I2N2M1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDJmZGQ4NTBmY2M0ZGYwOTZhZDZlMTZkM2ExNzA1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg0NTA3OTU1LCAtNzYuOTA1Mzg5MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzA3YjBlZDg0MWEwNDFkMGFhMzVmMGRhZWI1OTYwMDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDJkMDkyYzRkZWMyNDg5MWEwZjAyMzBmNzY4ZTRiZjAgPSAkKGA8ZGl2IGlkPSJodG1sXzAyZDA5MmM0ZGVjMjQ4OTFhMGYwMjMwZjc2OGU0YmYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYW11ZWwgUC4gTWFzc2V5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MDdiMGVkODQxYTA0MWQwYWEzNWYwZGFlYjU5NjAwMS5zZXRDb250ZW50KGh0bWxfMDJkMDkyYzRkZWMyNDg5MWEwZjAyMzBmNzY4ZTRiZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDAyZmRkODUwZmNjNGRmMDk2YWQ2ZTE2ZDNhMTcwNTkuYmluZFBvcHVwKHBvcHVwXzcwN2IwZWQ4NDFhMDQxZDBhYTM1ZjBkYWViNTk2MDAxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Y2ZlMGM0ZmUzMzE0MTYzOTY5ZWI0NTQ3MjliYjA1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAzNjQ2NSwgLTc2Ljk0OTEyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lM2Q3YzRmZjRjMzc0NGY4OTFlZDk1ZjA1ZTk0YmE4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGEzZTJjNGE4YTI0M2Y3YWM0MDMxMDFlNGQ3ZjJlNCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjhhM2UyYzRhOGEyNDNmN2FjNDAzMTAxZTRkN2YyZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvcmViIFNEQTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNkN2M0ZmY0YzM3NDRmODkxZWQ5NWYwNWU5NGJhODguc2V0Q29udGVudChodG1sXzY4YTNlMmM0YThhMjQzZjdhYzQwMzEwMWU0ZDdmMmU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZjZmUwYzRmZTMzMTQxNjM5NjllYjQ1NDcyOWJiMDVjLmJpbmRQb3B1cChwb3B1cF9lM2Q3YzRmZjRjMzc0NGY4OTFlZDk1ZjA1ZTk0YmE4OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTNiMDIwM2U2MjM4NDM5MWFlMmNmMjRhMjY3YjYyZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MzE3NjQwNCwgLTc2Ljg3NzAzNDIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1MDQ0ZDQ5MGYxOTQ4NzBiMzk1OWMyOWE0OTIxNjg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEwNGFiZDBhNThhYTQ4YWNhZDFiNWQ5NTY2ODhhZTY1ID0gJChgPGRpdiBpZD0iaHRtbF8xMDRhYmQwYTU4YWE0OGFjYWQxYjVkOTU2Njg4YWU2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RG9kZ2UgUGFyayBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NTA0NGQ0OTBmMTk0ODcwYjM5NTljMjlhNDkyMTY4Ni5zZXRDb250ZW50KGh0bWxfMTA0YWJkMGE1OGFhNDhhY2FkMWI1ZDk1NjY4OGFlNjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTNiMDIwM2U2MjM4NDM5MWFlMmNmMjRhMjY3YjYyZTcuYmluZFBvcHVwKHBvcHVwXzU1MDQ0ZDQ5MGYxOTQ4NzBiMzk1OWMyOWE0OTIxNjg2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lODMyN2ZhMzYyYmM0OTkyYTg0OTViZmFkYTQzNDU0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkzMTAxMTc5LCAtNzYuODgwNjQ3NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjIwZDUwOGUyZjUwNGRjZmEzZTQ0YjE5YzFiYjU3MmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDBmYWY1MzAwYzVjNDNlNDg2Mjg4ZWIxZmZiODJmZDEgPSAkKGA8ZGl2IGlkPSJodG1sXzAwZmFmNTMwMGM1YzQzZTQ4NjI4OGViMWZmYjgyZmQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYWx2YXJ5IC0gRG9kZ2UgUGFyayBGb29kIERpc3RyaWJ1dGlvbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjIwZDUwOGUyZjUwNGRjZmEzZTQ0YjE5YzFiYjU3MmUuc2V0Q29udGVudChodG1sXzAwZmFmNTMwMGM1YzQzZTQ4NjI4OGViMWZmYjgyZmQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4MzI3ZmEzNjJiYzQ5OTJhODQ5NWJmYWRhNDM0NTQ3LmJpbmRQb3B1cChwb3B1cF82MjBkNTA4ZTJmNTA0ZGNmYTNlNDRiMTljMWJiNTcyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTkzODIwYTE1ZmI4NDUxOWIzMzNkYzM3MjViMDE0NmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MzU0OTQsIC03Ni44NTg4MDMwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hODJhMjFiY2VkNTQ0NzVmYTZkNjI1MGIxNTFkNzk2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82N2IxYmFkM2FiYWE0NjFkOTY0NmY2OGIxMzIyYTlhZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjdiMWJhZDNhYmFhNDYxZDk2NDZmNjhiMTMyMmE5YWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbW11bml0eSBNYXJrZXRwbGFjZSBhdCBTSEFCQUNIITwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTgyYTIxYmNlZDU0NDc1ZmE2ZDYyNTBiMTUxZDc5Njcuc2V0Q29udGVudChodG1sXzY3YjFiYWQzYWJhYTQ2MWQ5NjQ2ZjY4YjEzMjJhOWFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU5MzgyMGExNWZiODQ1MTliMzMzZGMzNzI1YjAxNDZiLmJpbmRQb3B1cChwb3B1cF9hODJhMjFiY2VkNTQ0NzVmYTZkNjI1MGIxNTFkNzk2NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODdkYjdkMjhjNWFmNDUyYjk3ZGVlMGZiZWRjNDQ2ODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MzQ4MzcsIC03Ni45NjI1ODY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5OTc1YjY0N2QwMDRhNzhhY2NiNDk3NjU1NTAxOWIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5NjIwMTQwYTYwNzQ0ZjM5Y2RlMzFlMmVlODdhMmNmID0gJChgPGRpdiBpZD0iaHRtbF84OTYyMDE0MGE2MDc0NGYzOWNkZTMxZTJlZTg3YTJjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWxhZmlhIEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOTk3NWI2NDdkMDA0YTc4YWNjYjQ5NzY1NTUwMTliMi5zZXRDb250ZW50KGh0bWxfODk2MjAxNDBhNjA3NDRmMzljZGUzMWUyZWU4N2EyY2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODdkYjdkMjhjNWFmNDUyYjk3ZGVlMGZiZWRjNDQ2ODguYmluZFBvcHVwKHBvcHVwXzE5OTc1YjY0N2QwMDRhNzhhY2NiNDk3NjU1NTAxOWIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZmMxMjY5YTg0NTc0ZWM4OGZhNDMyZjBiZGQ4ZTUzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg0MDQ3MDExLCAtNzYuOTQ3NDk3NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGYyNWEzNjc4YzAxNDFhYTg2NjBlZDA3Mjk5NjgxNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzQzMDNhOTdmMjQ0NGE1MDhmZjQ4ZjJkYTM0YzU4OWQgPSAkKGA8ZGl2IGlkPSJodG1sX2M0MzAzYTk3ZjI0NDRhNTA4ZmY0OGYyZGEzNGM1ODlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JdmVyc29uIE1hbGwgLSBDb21tdW5pdHkgb2YgSG9wZSBBTUU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMjVhMzY3OGMwMTQxYWE4NjYwZWQwNzI5OTY4MTRhLnNldENvbnRlbnQoaHRtbF9jNDMwM2E5N2YyNDQ0YTUwOGZmNDhmMmRhMzRjNTg5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZmMxMjY5YTg0NTc0ZWM4OGZhNDMyZjBiZGQ4ZTUzNC5iaW5kUG9wdXAocG9wdXBfOGYyNWEzNjc4YzAxNDFhYTg2NjBlZDA3Mjk5NjgxNGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5OGMwYzg0YzNkYzRkZDJhMmVlYzBlZDZmYjQxODEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTM0NzAyLCAtNzYuOTYwMDAzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYmRiYzVjYWY3Yzc0NDNkOGVmZWNhZDU5MGRkYmZmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOWZiYjMxMTlhYWY0NzBkYjM4M2M1MzM2ZTUyNDU1NCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjlmYmIzMTE5YWFmNDcwZGIzODNjNTMzNmU1MjQ1NTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhbHZhcnkgQXNzZW1ibHkgb2YgSG9seSBDcm9zcyBMQzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGJkYmM1Y2FmN2M3NDQzZDhlZmVjYWQ1OTBkZGJmZjQuc2V0Q29udGVudChodG1sX2Y5ZmJiMzExOWFhZjQ3MGRiMzgzYzUzMzZlNTI0NTU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA5OGMwYzg0YzNkYzRkZDJhMmVlYzBlZDZmYjQxODEzLmJpbmRQb3B1cChwb3B1cF9kYmRiYzVjYWY3Yzc0NDNkOGVmZWNhZDU5MGRkYmZmNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzc0MmRiY2UyYzY2NDA2Y2FmN2YwMWFjN2EwZWY4ZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44MzYzOTUsIC03Ni43NzQ3MDY5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzBiY2RiM2RmNDE0Y2NhYmRlYjIxYWEzYzFlMTMyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzVlOGM5MDhiNjk0NzlkOTQzYjYyMzJkMTllNmI1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzM1ZThjOTA4YjY5NDc5ZDk0M2I2MjMyZDE5ZTZiNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByaW5jZSBHZW9yZ2UncyBDb3VudHkgQW5pbWFsIFNoZWx0ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzMGJjZGIzZGY0MTRjY2FiZGViMjFhYTNjMWUxMzJjLnNldENvbnRlbnQoaHRtbF8zMzVlOGM5MDhiNjk0NzlkOTQzYjYyMzJkMTllNmI1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNzQyZGJjZTJjNjY0MDZjYWY3ZjAxYWM3YTBlZjhlOC5iaW5kUG9wdXAocG9wdXBfOTMwYmNkYjNkZjQxNGNjYWJkZWIyMWFhM2MxZTEzMmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0YjNlMThjZGMxZTQ1MmFiOTA2Y2I0ZTYxZTMxMmQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNjA3NDk5OTUsIC03Ni45MjU4MTQ3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NmY3ODMyNDYyZDM0NWRkYjI4NjQyNWViMzk0ZDkwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZjNmOGZhZjZlOWE0YWM3YTA3Y2ZlOGVkZjUwNDMyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMmYzZjhmYWY2ZTlhNGFjN2EwN2NmZThlZGY1MDQzMmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZhaXRoIEFsaXZlIEZvdW5kYXRpb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2Zjc4MzI0NjJkMzQ1ZGRiMjg2NDI1ZWIzOTRkOTBiLnNldENvbnRlbnQoaHRtbF8yZjNmOGZhZjZlOWE0YWM3YTA3Y2ZlOGVkZjUwNDMyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NGIzZTE4Y2RjMWU0NTJhYjkwNmNiNGU2MWUzMTJkMy5iaW5kUG9wdXAocG9wdXBfNDZmNzgzMjQ2MmQzNDVkZGIyODY0MjVlYjM5NGQ5MGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxZWRlNmY1NjllNzRlMTFiODBmMTZhZGU3MmFlN2IxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTM3NjgxLCAtNzYuOTM2MzQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlNmI4NWM3MGZmYTRkMDVhOTdmN2JiNGE3YmI4ZGIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhOWIyYTA4NDE2MjRhOWNiNmZiZWQyYjU1NGRmMDM1ID0gJChgPGRpdiBpZD0iaHRtbF83YTliMmEwODQxNjI0YTljYjZmYmVkMmI1NTRkZjAzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWluaXN0ZXJpbyBJbnRlcm5hY2lvbmFsIENyaXN0byBFbCBSZXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlNmI4NWM3MGZmYTRkMDVhOTdmN2JiNGE3YmI4ZGIyLnNldENvbnRlbnQoaHRtbF83YTliMmEwODQxNjI0YTljYjZmYmVkMmI1NTRkZjAzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MWVkZTZmNTY5ZTc0ZTExYjgwZjE2YWRlNzJhZTdiMS5iaW5kUG9wdXAocG9wdXBfMmU2Yjg1YzcwZmZhNGQwNWE5N2Y3YmI0YTdiYjhkYjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3NDgxZGM3OWU2NDQ0NGVhODQ1Y2JiMDliN2NhODExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODM2MDUwNjgsIC03Ni45NDA0Njg1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjYwZTFkZTdhM2M0YTUyYTYzMmZjNTdiZGYwOWNjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzIyZGQ5MDY1NDc0ZmVjOTliZTI4MmM4M2U3Yzk5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzMyMmRkOTA2NTQ3NGZlYzk5YmUyODJjODNlN2M5OTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByaW5jZSBHZW9yZ2UncyBEZXBhcnRtZW50IG9mIFNvY2lhbCBTZXJ2aWNlczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGI2MGUxZGU3YTNjNGE1MmE2MzJmYzU3YmRmMDljYzUuc2V0Q29udGVudChodG1sXzMzMjJkZDkwNjU0NzRmZWM5OWJlMjgyYzgzZTdjOTk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3NDgxZGM3OWU2NDQ0NGVhODQ1Y2JiMDliN2NhODExLmJpbmRQb3B1cChwb3B1cF8wYjYwZTFkZTdhM2M0YTUyYTYzMmZjNTdiZGYwOWNjNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjE0NjkwYjVjNjY0NGRiZDk2MTQyMzllNTQ0ZGE4NWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44MzYwNTA2OCwgLTc2Ljk0MDQ2ODUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc0YWRhZGIxNjk4ODRhNDNiMzI4NWFkYmU0MTY2NTFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkMmQyMGYxNmFmMTRjY2U4NTJmZDMwMWZhYmQ3OWM1ID0gJChgPGRpdiBpZD0iaHRtbF9jZDJkMjBmMTZhZjE0Y2NlODUyZmQzMDFmYWJkNzljNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmljdG9yeSBDaHJpc3RpYW4gTWluaXN0cmllcyBJbnRlcm5hdGlvbmFsPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NGFkYWRiMTY5ODg0YTQzYjMyODVhZGJlNDE2NjUxYi5zZXRDb250ZW50KGh0bWxfY2QyZDIwZjE2YWYxNGNjZTg1MmZkMzAxZmFiZDc5YzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjE0NjkwYjVjNjY0NGRiZDk2MTQyMzllNTQ0ZGE4NWYuYmluZFBvcHVwKHBvcHVwXzc0YWRhZGIxNjk4ODRhNDNiMzI4NWFkYmU0MTY2NTFiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83N2MwMjEzZTJhZTQ0NDc5YTc2NjhjZjkxNzEwNTQxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAzMTc3MDk4LCAtNzcuMDc5NTkyMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmU2ZGE3M2NkYWFhNDAzMmIwZDlkMmMzYjhjYmJkYWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTNjMTg5NWFhNzZlNGRkMmI3MTUwNGU4Zjk5ZDA0OGYgPSAkKGA8ZGl2IGlkPSJodG1sXzEzYzE4OTVhYTc2ZTRkZDJiNzE1MDRlOGY5OWQwNDhmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GaXJzdCBCYXB0aXN0IENodXJjaCBLZW4tR2FyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTZkYTczY2RhYWE0MDMyYjBkOWQyYzNiOGNiYmRhZC5zZXRDb250ZW50KGh0bWxfMTNjMTg5NWFhNzZlNGRkMmI3MTUwNGU4Zjk5ZDA0OGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzdjMDIxM2UyYWU0NDQ3OWE3NjY4Y2Y5MTcxMDU0MWEuYmluZFBvcHVwKHBvcHVwX2ZlNmRhNzNjZGFhYTQwMzJiMGQ5ZDJjM2I4Y2JiZGFkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYWIxMjRmZGI0MGQ0YTI4OWViOWMxNDZiM2JjNjNlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkzODIxNjU5LCAtNzYuOTM2MTEzODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjIwZTM5YmNhZGRlNGZhY2IyNGE5MjllYjRhMjk5ZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWNhYjNlMDE4ZGRjNGVjYzhkMzg4N2MzNzA4MmI0ODkgPSAkKGA8ZGl2IGlkPSJodG1sXzVjYWIzZTAxOGRkYzRlY2M4ZDM4ODdjMzcwODJiNDg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFjZSBvZiBHb2QgTWluaXN0cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyMGUzOWJjYWRkZTRmYWNiMjRhOTI5ZWI0YTI5OWRiLnNldENvbnRlbnQoaHRtbF81Y2FiM2UwMThkZGM0ZWNjOGQzODg3YzM3MDgyYjQ4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYWIxMjRmZGI0MGQ0YTI4OWViOWMxNDZiM2JjNjNlZC5iaW5kUG9wdXAocG9wdXBfYjIwZTM5YmNhZGRlNGZhY2IyNGE5MjllYjRhMjk5ZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkZTIwZjNjZDgwYTQ1ODk5ZDlkNDUzMGQ4YjI1MWFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTg3MzE2LCAtNzYuOTQ0NjU4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZmQxYTg1MzNkNjg0ZjdjYTgzZTMyYjNkYjliODM4NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMWE2ZTk5MTM3YTY0NjIzYTI4ZGMxMjIxNTM3ZmZkNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDFhNmU5OTEzN2E2NDYyM2EyOGRjMTIyMTUzN2ZmZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaXZlcnNpdHkgb2YgTWFyeWxhbmQgQ29sbGVnZSBQYXJrIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZmQxYTg1MzNkNjg0ZjdjYTgzZTMyYjNkYjliODM4NS5zZXRDb250ZW50KGh0bWxfZDFhNmU5OTEzN2E2NDYyM2EyOGRjMTIyMTUzN2ZmZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWRlMjBmM2NkODBhNDU4OTlkOWQ0NTMwZDhiMjUxYWUuYmluZFBvcHVwKHBvcHVwXzlmZDFhODUzM2Q2ODRmN2NhODNlMzJiM2RiOWI4Mzg1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMWUxZjEyN2M3MTk0ODI3ODVjN2NiMjc0MmFiNDhhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkzODQwMSwgLTc2Ljk2MTY3NzUwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmZDNlOTMwZDc3ZjQ3NWY4NjQ5ZGZmOWJjYTIyYzY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczYzZjOTQwNDRhNjQyOGI4ODNhOTYwMzlmODM3ZDU3ID0gJChgPGRpdiBpZD0iaHRtbF83M2M2Yzk0MDQ0YTY0MjhiODgzYTk2MDM5ZjgzN2Q1NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RW1hbnVlbCBTcGFuaXNoIFNEQSBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmZDNlOTMwZDc3ZjQ3NWY4NjQ5ZGZmOWJjYTIyYzY4LnNldENvbnRlbnQoaHRtbF83M2M2Yzk0MDQ0YTY0MjhiODgzYTk2MDM5ZjgzN2Q1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMWUxZjEyN2M3MTk0ODI3ODVjN2NiMjc0MmFiNDhhOC5iaW5kUG9wdXAocG9wdXBfOWZkM2U5MzBkNzdmNDc1Zjg2NDlkZmY5YmNhMjJjNjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5ODQ2YjYxNDlhMDQ4NTA5MzM0ZGFmYjM3NTFmZWUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODk1OTc1LCAtNzYuODg4NDUzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YmVmZGE4Mzk4ZDg0MTFmODI1M2EzYzNhMmE5MjhlZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MDgxZDdkYTY3YWI0YzBjYTdhMWRiZTZkYTY3YmI3NiA9ICQoYDxkaXYgaWQ9Imh0bWxfODA4MWQ3ZGE2N2FiNGMwY2E3YTFkYmU2ZGE2N2JiNzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcm1vZHkgSGlsbHMgRVM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiZWZkYTgzOThkODQxMWY4MjUzYTNjM2EyYTkyOGVkLnNldENvbnRlbnQoaHRtbF84MDgxZDdkYTY3YWI0YzBjYTdhMWRiZTZkYTY3YmI3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OTg0NmI2MTQ5YTA0ODUwOTMzNGRhZmIzNzUxZmVlMy5iaW5kUG9wdXAocG9wdXBfNGJlZmRhODM5OGQ4NDExZjgyNTNhM2MzYTJhOTI4ZWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5N2NkMmIzNWQzZjQ1ZWQ4MDkzNzQyODJlMzhhMzRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODY0MTk0OTcsIC03Ni45NDU3NDQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNWU1ZTc2YTUxZDM0OTI4Yjc4YTU0YWUwNTBkNjIwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzM0NTQ4OTEwY2U0YmY0ODU3ZWEyYjNjODk5MjE1YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTMzNDU0ODkxMGNlNGJmNDg1N2VhMmIzYzg5OTIxNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBlbm5zeWx2YW5pYSBBdmVudWUgU2V2ZW50aCBEYXkgQWR2ZW50aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzVlNWU3NmE1MWQzNDkyOGI3OGE1NGFlMDUwZDYyMGIuc2V0Q29udGVudChodG1sXzEzMzQ1NDg5MTBjZTRiZjQ4NTdlYTJiM2M4OTkyMTViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA5N2NkMmIzNWQzZjQ1ZWQ4MDkzNzQyODJlMzhhMzRkLmJpbmRQb3B1cChwb3B1cF8zNWU1ZTc2YTUxZDM0OTI4Yjc4YTU0YWUwNTBkNjIwYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzFlYzcyYjRmNDhiNDRmZjg3MzRjNGIxODRhODgxMmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NDM5MDkwMDAwMDAwMDUsIC03Ni45NTE5NDg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5ZTkxNmVkMTdlNjRjM2JiNGI1ZWM2ZjBkOWI5ZjcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5NGQ5NjAzMGRkMDQzZWRiNDUxNTdmOGY3ZDFkMDMwID0gJChgPGRpdiBpZD0iaHRtbF81OTRkOTYwMzBkZDA0M2VkYjQ1MTU3ZjhmN2QxZDAzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG93biBvZiBOb3J0aCBCcmVudHdvb2Q8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M5ZTkxNmVkMTdlNjRjM2JiNGI1ZWM2ZjBkOWI5ZjcyLnNldENvbnRlbnQoaHRtbF81OTRkOTYwMzBkZDA0M2VkYjQ1MTU3ZjhmN2QxZDAzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMWVjNzJiNGY0OGI0NGZmODczNGM0YjE4NGE4ODEyZC5iaW5kUG9wdXAocG9wdXBfYzllOTE2ZWQxN2U2NGMzYmI0YjVlYzZmMGQ5YjlmNzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzOGFlMWNiZDk5YTQ5MDk5NmFkMDM0YmI2YTE5YzdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODk0OTYyOTMsIC03Ni44NTEyNjAyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NjgwMjk2ZGE5NzI0MDMzYmI3MmQxNzUxYTYwMDgxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTViZTkzOWJiYjI0OTFjODNlYmQ4MmNjMzY0MzM4YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTU1YmU5MzliYmIyNDkxYzgzZWJkODJjYzM2NDMzOGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNoYWJhY2ggRW1lcmdlbmN5IEVtcG93ZXJtZW50IENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODY4MDI5NmRhOTcyNDAzM2JiNzJkMTc1MWE2MDA4MTYuc2V0Q29udGVudChodG1sXzE1NWJlOTM5YmJiMjQ5MWM4M2ViZDgyY2MzNjQzMzhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UzOGFlMWNiZDk5YTQ5MDk5NmFkMDM0YmI2YTE5YzdmLmJpbmRQb3B1cChwb3B1cF84NjgwMjk2ZGE5NzI0MDMzYmI3MmQxNzUxYTYwMDgxNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGNjZjJiZjhhMTk3NGI1OGJhZTYyZDEwZjBhODQyZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NDA4NzcsIC03Ni45MzkwMzM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3MjhmNjI4MTEwZTQ0YmI4ZjY1NjNhY2ViM2UxMzM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q3M2VmMWUyZjFkZTQxZTk5ZWNiNzc4OTE0N2ViMmYzID0gJChgPGRpdiBpZD0iaHRtbF9kNzNlZjFlMmYxZGU0MWU5OWVjYjc3ODkxNDdlYjJmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVmdWdlIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3MjhmNjI4MTEwZTQ0YmI4ZjY1NjNhY2ViM2UxMzM4LnNldENvbnRlbnQoaHRtbF9kNzNlZjFlMmYxZGU0MWU5OWVjYjc3ODkxNDdlYjJmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Y2NmMmJmOGExOTc0YjU4YmFlNjJkMTBmMGE4NDJkYy5iaW5kUG9wdXAocG9wdXBfNjcyOGY2MjgxMTBlNDRiYjhmNjU2M2FjZWIzZTEzMzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcyNGFlMTljM2NlMTRlYzk5ZDA5OTJmMzVmYjBmNDVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODgzNTkwOTk5OTk5OTk2LCAtNzYuODk2Mjg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlM2UxNzU3YTZmMjQ4NDY4MWUzZGM2NTZhOGQ2NDYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzZjkyY2Y4N2Y2NTRlOGU5NzcxNzhlNjE5MDA0YWYzID0gJChgPGRpdiBpZD0iaHRtbF82M2Y5MmNmODdmNjU0ZThlOTc3MTc4ZTYxOTAwNGFmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIE1hcmdhcmV0IG9mIFNjb3RsYW5kIENhdGhvbGljIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWUzZTE3NTdhNmYyNDg0NjgxZTNkYzY1NmE4ZDY0NjIuc2V0Q29udGVudChodG1sXzYzZjkyY2Y4N2Y2NTRlOGU5NzcxNzhlNjE5MDA0YWYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcyNGFlMTljM2NlMTRlYzk5ZDA5OTJmMzVmYjBmNDVmLmJpbmRQb3B1cChwb3B1cF81ZTNlMTc1N2E2ZjI0ODQ2ODFlM2RjNjU2YThkNjQ2MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2YxOWZhYmZhN2NmNGFjNzkyMzZiMWJkNzY2MzEzMGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45Mzk0MjcsIC03Ni45MjY2NDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViY2I2N2M3YWIxYjQ3ZmJiY2I0NmNkMDY3NTljZjc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyYzUyYWNiODAwMzQyYTg5YmRmNmRiMTgyOTcyNzNmID0gJChgPGRpdiBpZD0iaHRtbF9lMmM1MmFjYjgwMDM0MmE4OWJkZjZkYjE4Mjk3MjczZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG93ZXIgb2YgUHJhaXNlIENodXJjaCBJbnRlcm5hdGlvbmFsPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYmNiNjdjN2FiMWI0N2ZiYmNiNDZjZDA2NzU5Y2Y3OS5zZXRDb250ZW50KGh0bWxfZTJjNTJhY2I4MDAzNDJhODliZGY2ZGIxODI5NzI3M2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2YxOWZhYmZhN2NmNGFjNzkyMzZiMWJkNzY2MzEzMGMuYmluZFBvcHVwKHBvcHVwX2ViY2I2N2M3YWIxYjQ3ZmJiY2I0NmNkMDY3NTljZjc5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOTZhOGUwZDA5NTU0OWQ5YjhkNTZhNGEyNWJkZjhiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjgxNjQ5NiwgLTc2LjkzNzA4MDUwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMjMzNzI2MjVmNTQzNjFhYzVkNjYyYmU5ZDcwMmJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUyMGI5ZTQzNGUxZTQ1YTc4YWJhNzE0ZDhhNGEyNTkzID0gJChgPGRpdiBpZD0iaHRtbF81MjBiOWU0MzRlMWU0NWE3OGFiYTcxNGQ4YTRhMjU5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29hbGl0aW9uIGZvciBBbmltYWxzIFdlbGZhcmUsIEluYy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlMjMzNzI2MjVmNTQzNjFhYzVkNjYyYmU5ZDcwMmJlLnNldENvbnRlbnQoaHRtbF81MjBiOWU0MzRlMWU0NWE3OGFiYTcxNGQ4YTRhMjU5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xOTZhOGUwZDA5NTU0OWQ5YjhkNTZhNGEyNWJkZjhiNS5iaW5kUG9wdXAocG9wdXBfNWUyMzM3MjYyNWY1NDM2MWFjNWQ2NjJiZTlkNzAyYmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5ODc1YjgxZDJlNDQ3NTBiNzM1N2UxZmI2ZDQ1ZTg0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTQwMTAxNTUsIC03Ni45NjEzMTQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MGQyYWViMTA2YzY0NGI3ODQxNWIzM2JmMTgwOTYxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYzc3NWIxZGM5YWQ0OTc1OTE1YmZmZmZlYWZlZGExZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmM3NzViMWRjOWFkNDk3NTkxNWJmZmZmZWFmZWRhMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBKb2huJ3MgQ29tbXVuaXR5IE91dHJlYWNoIFByb2dyYW08L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwZDJhZWIxMDZjNjQ0Yjc4NDE1YjMzYmYxODA5NjFlLnNldENvbnRlbnQoaHRtbF9mYzc3NWIxZGM5YWQ0OTc1OTE1YmZmZmZlYWZlZGExZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOTg3NWI4MWQyZTQ0NzUwYjczNTdlMWZiNmQ0NWU4NC5iaW5kUG9wdXAocG9wdXBfOTBkMmFlYjEwNmM2NDRiNzg0MTViMzNiZjE4MDk2MWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmYmZlZTY5ZDUzMzQ4Yzg4OTIyOTg5NjZhOTJkNDZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODYzNDk0LCAtNzYuOTQyMDM5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOGVjYTA2MTE0NTg0MWIwYTIyMWM0YmNjYTNkNGM2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTM1OGUyNjhhZDY0MmQxOGJkYmRlM2JjY2Y5MmZjNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNmEzNThlMjY4YWQ2NDJkMThiZGJkZTNiY2NmOTJmYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcGxlIFNwcmluZ3MgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4ZWNhMDYxMTQ1ODQxYjBhMjIxYzRiY2NhM2Q0YzY1LnNldENvbnRlbnQoaHRtbF82YTM1OGUyNjhhZDY0MmQxOGJkYmRlM2JjY2Y5MmZjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZmJmZWU2OWQ1MzM0OGM4ODkyMjk4OTY2YTkyZDQ2ZS5iaW5kUG9wdXAocG9wdXBfYjhlY2EwNjExNDU4NDFiMGEyMjFjNGJjY2EzZDRjNjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y0MGQyNjVlMTIxNzRiMzA4MzhiZTE4OGY5N2E5MTc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTM5OTc2LCAtNzYuOTQ5MDQxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNTEyYzUxYTc3ZWY0ZDJiOWI3NGU4NmRiOWZlNjVjZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMjRiZDhjZGI5OGY0YTkxOGQ1ZjIzOWVlMGQyZmQwMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDI0YmQ4Y2RiOThmNGE5MThkNWYyMzllZTBkMmZkMDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFCU1lOQSwgSW5jLiAtIEJyZW50d29vZDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTUxMmM1MWE3N2VmNGQyYjliNzRlODZkYjlmZTY1Y2Quc2V0Q29udGVudChodG1sXzAyNGJkOGNkYjk4ZjRhOTE4ZDVmMjM5ZWUwZDJmZDAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y0MGQyNjVlMTIxNzRiMzA4MzhiZTE4OGY5N2E5MTc2LmJpbmRQb3B1cChwb3B1cF8xNTEyYzUxYTc3ZWY0ZDJiOWI3NGU4NmRiOWZlNjVjZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmI2YTYyOGZlMDY5NDMxOGEwMGI4Y2EyNjI0NDJiYzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMDg0MTc5MywgLTc2Ljk5ODU1NTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2NGY4ZTRjN2IwYjQxNTY5ZTJkYmVjYWNhMTFhY2EyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzN2VhZDQxMDY0NzRlNDc4MDI1YjgyNjgyYTJmYjFmID0gJChgPGRpdiBpZD0iaHRtbF81MzdlYWQ0MTA2NDc0ZTQ3ODAyNWI4MjY4MmEyZmIxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW91bnQgSmV6cmVlbCBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTY0ZjhlNGM3YjBiNDE1NjllMmRiZWNhY2ExMWFjYTIuc2V0Q29udGVudChodG1sXzUzN2VhZDQxMDY0NzRlNDc4MDI1YjgyNjgyYTJmYjFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZiNmE2MjhmZTA2OTQzMThhMDBiOGNhMjYyNDQyYmM0LmJpbmRQb3B1cChwb3B1cF85NjRmOGU0YzdiMGI0MTU2OWUyZGJlY2FjYTExYWNhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTZkODI1NjU5YzMwNDVmNGFjMDNmNmU4NzhkMzBhOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NDIzNTIsIC03Ni45MTc4OTI1MDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZmUzYTIxNmMxNjE0YjUzYTBiNWQ4ZWM5ZTBkZDM1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OGMwZWNmNjkzMWU0ZWE5YjAxY2NkMDA4ZjI1N2YxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfODhjMGVjZjY5MzFlNGVhOWIwMWNjZDAwOGYyNTdmMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJsYWRlbnNidXJnIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZmUzYTIxNmMxNjE0YjUzYTBiNWQ4ZWM5ZTBkZDM1MC5zZXRDb250ZW50KGh0bWxfODhjMGVjZjY5MzFlNGVhOWIwMWNjZDAwOGYyNTdmMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTZkODI1NjU5YzMwNDVmNGFjMDNmNmU4NzhkMzBhOTcuYmluZFBvcHVwKHBvcHVwXzdmZTNhMjE2YzE2MTRiNTNhMGI1ZDhlYzllMGRkMzUwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yN2NiZTBmNjRiMDI0NDIxYWQ5YzhiYjdhMDdkMzI5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljc5OTk1NCwgLTc2LjkzNTQyNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzA1NDUxOWUyYjQxNDA5NWEzNzYzMTVhMzJkNTQ4NGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzNhYjA4ZjMzZTViNGI0Nzk5ZWYxODYyMzQ4Mzg0NjQgPSAkKGA8ZGl2IGlkPSJodG1sXzMzYWIwOGYzM2U1YjRiNDc5OWVmMTg2MjM0ODM4NDY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PeG9uIEhpbGwgQ2h1cmNoIG9mIENocmlzdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzA1NDUxOWUyYjQxNDA5NWEzNzYzMTVhMzJkNTQ4NGUuc2V0Q29udGVudChodG1sXzMzYWIwOGYzM2U1YjRiNDc5OWVmMTg2MjM0ODM4NDY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI3Y2JlMGY2NGIwMjQ0MjFhZDljOGJiN2EwN2QzMjk2LmJpbmRQb3B1cChwb3B1cF8zMDU0NTE5ZTJiNDE0MDk1YTM3NjMxNWEzMmQ1NDg0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTE4NDU5ZmUyZGZhNDY2YWI5NTNlZDljNTMxMDljMDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NDM4ODIsIC03Ni45MTQwNDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1YzUwMzAxODcxYjQ1MmQ4OGRkZTUzNTJkOWEyZmIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0M2JjN2NjMmJiODRlNTk5OGE1MDUyY2JmOTg2ZWU1ID0gJChgPGRpdiBpZD0iaHRtbF84NDNiYzdjYzJiYjg0ZTU5OThhNTA1MmNiZjk4NmVlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFyayBWaWV3IGF0IEJsYWRlbnNidXJnPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NWM1MDMwMTg3MWI0NTJkODhkZGU1MzUyZDlhMmZiMS5zZXRDb250ZW50KGh0bWxfODQzYmM3Y2MyYmI4NGU1OTk4YTUwNTJjYmY5ODZlZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTE4NDU5ZmUyZGZhNDY2YWI5NTNlZDljNTMxMDljMDYuYmluZFBvcHVwKHBvcHVwXzc1YzUwMzAxODcxYjQ1MmQ4OGRkZTUzNTJkOWEyZmIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MmE4M2IwNDQwOGU0MTRkOTg5ZTc1ODczOTFmNTY5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk0MjQwNiwgLTc2Ljk1ODEwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTFhNmUzNzQ0MmQ0YmUxOThhYmJjZTJlZTQyZDgxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMjZmOGJjZjM0MDQ0MTBiYmZkMTBmMGZhOTc0ZGExZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDI2ZjhiY2YzNDA0NDEwYmJmZDEwZjBmYTk3NGRhMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklnbGVzaWEgRGUgRGlvcyBQZW50ZWNvc3RhbCBOdWV2byBSZW5hY2VyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYTFhNmUzNzQ0MmQ0YmUxOThhYmJjZTJlZTQyZDgxYy5zZXRDb250ZW50KGh0bWxfZDI2ZjhiY2YzNDA0NDEwYmJmZDEwZjBmYTk3NGRhMWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODJhODNiMDQ0MDhlNDE0ZDk4OWU3NTg3MzkxZjU2OTYuYmluZFBvcHVwKHBvcHVwX2VhMWE2ZTM3NDQyZDRiZTE5OGFiYmNlMmVlNDJkODFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjAxOTI1OTU0ODY0YjY0OTRiYWRlMzg1Y2M3ZWUyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk0NzI5MjE4LCAtNzYuODA1NjAyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZjRkYzYzZTM3ZWY0MTI0YjkzM2FhNTJlMjhiOTJmZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MjhiOWY3NWM5NDE0ZTFhYTE2MzE1OWMyZTI5MGU2MiA9ICQoYDxkaXYgaWQ9Imh0bWxfODI4YjlmNzVjOTQxNGUxYWExNjMxNTljMmUyOTBlNjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRpdmluZSBHcmFjZSBNaXNzaW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZjRkYzYzZTM3ZWY0MTI0YjkzM2FhNTJlMjhiOTJmZS5zZXRDb250ZW50KGh0bWxfODI4YjlmNzVjOTQxNGUxYWExNjMxNTljMmUyOTBlNjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGIwMTkyNTk1NDg2NGI2NDk0YmFkZTM4NWNjN2VlMjQuYmluZFBvcHVwKHBvcHVwXzBmNGRjNjNlMzdlZjQxMjRiOTMzYWE1MmUyOGI5MmZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOGMxYjFkNWZkZDA0NmY3YmY5YmJlOTcyODNjYWMzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg5NTI5NTExLCAtNzYuODUxMzQ0NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjA2NDc3Nzc0OTRjNDU2YjgzMDA5NzYyZDFkMzgzMWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWNkMjM2ZjNkOTRlNDU5ZThlMWQ5MWI2NDJhYzQ4MDYgPSAkKGA8ZGl2IGlkPSJodG1sX2FjZDIzNmYzZDk0ZTQ1OWU4ZTFkOTFiNjQyYWM0ODA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QcmluY2UgR2VvcmdlJ3MgQ291bnR5IERTUzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjA2NDc3Nzc0OTRjNDU2YjgzMDA5NzYyZDFkMzgzMWQuc2V0Q29udGVudChodG1sX2FjZDIzNmYzZDk0ZTQ1OWU4ZTFkOTFiNjQyYWM0ODA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4YzFiMWQ1ZmRkMDQ2ZjdiZjliYmU5NzI4M2NhYzNmLmJpbmRQb3B1cChwb3B1cF9iMDY0Nzc3NzQ5NGM0NTZiODMwMDk3NjJkMWQzODMxZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzQ4YjBmZWQzNGE5NDZhMDhjYzU1NTkzYmVjMmQ0MjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xNDA0NTA1MSwgLTc3LjIwOTgyMDk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjNDljZGQ5N2E5MjQ5NzE4ZDAyMGM3NTc3YzczMmZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc3NTc2MmMyOGFlNzQzNTNhZTIxM2YyNDU3YWM0MDAzID0gJChgPGRpdiBpZD0iaHRtbF83NzU3NjJjMjhhZTc0MzUzYWUyMTNmMjQ1N2FjNDAwMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFdpbGxvd3MgQXBhcnRtZW50czwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWM0OWNkZDk3YTkyNDk3MThkMDIwYzc1NzdjNzMyZmUuc2V0Q29udGVudChodG1sXzc3NTc2MmMyOGFlNzQzNTNhZTIxM2YyNDU3YWM0MDAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M0OGIwZmVkMzRhOTQ2YTA4Y2M1NTU5M2JlYzJkNDIzLmJpbmRQb3B1cChwb3B1cF9lYzQ5Y2RkOTdhOTI0OTcxOGQwMjBjNzU3N2M3MzJmZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWI5Njk2ODdhNjM2NDAzNzk2NWE1MmIwOWJjZDY1MDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMzg2ODgsIC03Ni45MTg1Njc1MDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYzBmM2ZhZGI5Njk0MDQ4OGQzYmY3ZGRkZTAwYzFiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNWY5NWY4ZTBmYzk0MmUwYjFiYWIyYzI5ZDIzZGJjZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzVmOTVmOGUwZmM5NDJlMGIxYmFiMmMyOWQyM2RiY2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlbHRzdmlsbGUgQWNhZGVteS9CZWx0c3ZpbGxlIFNldmVudGgtZGF5IEFkdmVudGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FjMGYzZmFkYjk2OTQwNDg4ZDNiZjdkZGRlMDBjMWJiLnNldENvbnRlbnQoaHRtbF8zNWY5NWY4ZTBmYzk0MmUwYjFiYWIyYzI5ZDIzZGJjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85Yjk2OTY4N2E2MzY0MDM3OTY1YTUyYjA5YmNkNjUwMi5iaW5kUG9wdXAocG9wdXBfYWMwZjNmYWRiOTY5NDA0ODhkM2JmN2RkZGUwMGMxYmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjMjA0MjRkNjBiNTRkNWNhMjBhZjQxY2FlYzY2N2M5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTQ2MzY2LCAtNzYuOTExODA4NDk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmZiMTMxN2E4YTU2NDBiYmE1N2QyZWI1NzYwNzM0NmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjlkMDdlMGQxZjMwNDhjYzg3YTJlNDVkODdkZWJmZmUgPSAkKGA8ZGl2IGlkPSJodG1sX2I5ZDA3ZTBkMWYzMDQ4Y2M4N2EyZTQ1ZDg3ZGViZmZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qb3J0IFRvd25zIEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZmIxMzE3YThhNTY0MGJiYTU3ZDJlYjU3NjA3MzQ2ZS5zZXRDb250ZW50KGh0bWxfYjlkMDdlMGQxZjMwNDhjYzg3YTJlNDVkODdkZWJmZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGMyMDQyNGQ2MGI1NGQ1Y2EyMGFmNDFjYWVjNjY3YzkuYmluZFBvcHVwKHBvcHVwXzZmYjEzMTdhOGE1NjQwYmJhNTdkMmViNTc2MDczNDZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MmUxNDYzN2NiMzE0NWMyOTc0MjE1YTg3YjVhYTBkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjgwNDI5MiwgLTc2LjkzMjI2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMjczNTMxMGM1ZWU0YjVkYjRiYzMyMGMwYWE2MTNjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMjI0NDRlZWZkNjA0NDM4ODkxNTZiODkxZmViZDQ5ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDIyNDQ0ZWVmZDYwNDQzODg5MTU2Yjg5MWZlYmQ0OWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBTdGVwaGVuJ3MgQmFwdGlzdCBDaHVyY2gvTWVyY3kgSG91c2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EyNzM1MzEwYzVlZTRiNWRiNGJjMzIwYzBhYTYxM2M3LnNldENvbnRlbnQoaHRtbF8wMjI0NDRlZWZkNjA0NDM4ODkxNTZiODkxZmViZDQ5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MmUxNDYzN2NiMzE0NWMyOTc0MjE1YTg3YjVhYTBkNi5iaW5kUG9wdXAocG9wdXBfYTI3MzUzMTBjNWVlNGI1ZGI0YmMzMjBjMGFhNjEzYzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlYWEyMThjN2VkZTRhMzFhMDFiNWE3OTE0YmI4NjcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTQ1OTk3LCAtNzYuODg5ODMwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTA1ZWQwNWEyM2Y0NmFhYjBjNzdjYTFlNmU4ZDljYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODg4NDAwZjkxZDk0NDk2ODIzM2MxMDNiNzZhNDM5ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjg4ODQwMGY5MWQ5NDQ5NjgyMzNjMTAzYjc2YTQzOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhbmRvdmVyIEhpbGxzIEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZTA1ZWQwNWEyM2Y0NmFhYjBjNzdjYTFlNmU4ZDljYy5zZXRDb250ZW50KGh0bWxfZjg4ODQwMGY5MWQ5NDQ5NjgyMzNjMTAzYjc2YTQzOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmVhYTIxOGM3ZWRlNGEzMWEwMWI1YTc5MTRiYjg2NzIuYmluZFBvcHVwKHBvcHVwXzJlMDVlZDA1YTIzZjQ2YWFiMGM3N2NhMWU2ZThkOWNjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YTc0ZmU5ODk1MDI0MGYzODllYzE4YzU4ZjRhNGQ3YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjgzMDQ4MTQ5LCAtNzYuOTMyMTkxOTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTMwZDcwMmY2ZjgxNDNlNTg0NjA1NjhiZGU5YjQyNmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjRmYWU4ZTA3ZTMwNDJiOWE4N2FjZmZmZWIyZTQ3YmMgPSAkKGA8ZGl2IGlkPSJodG1sXzI0ZmFlOGUwN2UzMDQyYjlhODdhY2ZmZmViMmU0N2JjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aGVybiBGcmllbmRzaGlwIE1pc3Npb25hcnkgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzMGQ3MDJmNmY4MTQzZTU4NDYwNTY4YmRlOWI0MjZmLnNldENvbnRlbnQoaHRtbF8yNGZhZThlMDdlMzA0MmI5YTg3YWNmZmZlYjJlNDdiYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YTc0ZmU5ODk1MDI0MGYzODllYzE4YzU4ZjRhNGQ3Yy5iaW5kUG9wdXAocG9wdXBfZTMwZDcwMmY2ZjgxNDNlNTg0NjA1NjhiZGU5YjQyNmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NhYzJhZDcyZWU1MTRkMzI4YjExZWFlY2M0MWMwYTZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTQ1NTQ3LCAtNzYuOTE3NDQyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNTViOGEzOTU0MmM0MDRjYWQ0NjBkODg3MTNiNTM5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZjFiMmRhMWVlODY0YWRlODEwMzdiZWUzYjMzY2YzZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWYxYjJkYTFlZTg2NGFkZTgxMDM3YmVlM2IzM2NmM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNlbmlvcnMgQWdhaW5zdCBTdGFsa2luZyAmIERvbWVzdGljIFZpb2xlbmNlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNTViOGEzOTU0MmM0MDRjYWQ0NjBkODg3MTNiNTM5MS5zZXRDb250ZW50KGh0bWxfYWYxYjJkYTFlZTg2NGFkZTgxMDM3YmVlM2IzM2NmM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2FjMmFkNzJlZTUxNGQzMjhiMTFlYWVjYzQxYzBhNmIuYmluZFBvcHVwKHBvcHVwX2U1NWI4YTM5NTQyYzQwNGNhZDQ2MGQ4ODcxM2I1MzkxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Nzc2MGQ0MmU0M2Y0OGIwOWUwMmZhNGM2ZWNmMjI2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAzNTc4MSwgLTc2LjkxMzc0MzUwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5ODMzMWViNWYwZjQzY2JhMmI1MTc3Njc1NGE3ODM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FkYTE2MDA3MzMxODRmMDQ4NGI2Mzg1ODk1ZGQ3MTM5ID0gJChgPGRpdiBpZD0iaHRtbF9hZGExNjAwNzMzMTg0ZjA0ODRiNjM4NTg5NWRkNzEzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2hvc29ldmVyIFdpbGwgQ2hyaXN0aWFuIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjk4MzMxZWI1ZjBmNDNjYmEyYjUxNzc2NzU0YTc4Mzkuc2V0Q29udGVudChodG1sX2FkYTE2MDA3MzMxODRmMDQ4NGI2Mzg1ODk1ZGQ3MTM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3NzYwZDQyZTQzZjQ4YjA5ZTAyZmE0YzZlY2YyMjY5LmJpbmRQb3B1cChwb3B1cF9iOTgzMzFlYjVmMGY0M2NiYTJiNTE3NzY3NTRhNzgzOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTdiYjA0ZjBkZmZkNDIyZDg4OGFmZDVmNTYwZjY0YjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NDQwNjIsIC03Ni45NzQyMTg5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NWE2Y2EyZmJkNzQ0ZDNiYTkxZDIzMjEyMWFkYzcwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZDgyNmE4ZGM1Zjk0NTkwYWYyMDcxNzFmNmU5YTdjMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmQ4MjZhOGRjNWY5NDU5MGFmMjA3MTcxZjZlOWE3YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRyaXVtcGhhbnQgQmFwdGlzdCBDaHVyY2ggRm9vZCBNaW5pc3RyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDVhNmNhMmZiZDc0NGQzYmE5MWQyMzIxMjFhZGM3MDUuc2V0Q29udGVudChodG1sXzZkODI2YThkYzVmOTQ1OTBhZjIwNzE3MWY2ZTlhN2MxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E3YmIwNGYwZGZmZDQyMmQ4ODhhZmQ1ZjU2MGY2NGI1LmJpbmRQb3B1cChwb3B1cF80NWE2Y2EyZmJkNzQ0ZDNiYTkxZDIzMjEyMWFkYzcwNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjE4NzI2Y2YzMGQ4NGMyMTgyNTA2Zjg4NTdjZTkyNjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wODUxNDI4MywgLTc3LjA5MDk2MTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q2NzBhNmZkZDBkODQ4ZGRiNDFlNTViZGJlMTNlZTg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmZTJkM2VhMGE2OTQyZDBhNTNlYmNkYmM1MzYyOThmID0gJChgPGRpdiBpZD0iaHRtbF9lZmUyZDNlYTBhNjk0MmQwYTUzZWJjZGJjNTM2Mjk4ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFya2xhbmQgTWlkZGxlIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDY3MGE2ZmRkMGQ4NDhkZGI0MWU1NWJkYmUxM2VlODQuc2V0Q29udGVudChodG1sX2VmZTJkM2VhMGE2OTQyZDBhNTNlYmNkYmM1MzYyOThmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YxODcyNmNmMzBkODRjMjE4MjUwNmY4ODU3Y2U5MjY4LmJpbmRQb3B1cChwb3B1cF9kNjcwYTZmZGQwZDg0OGRkYjQxZTU1YmRiZTEzZWU4NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWNhMmNlN2RjY2JiNDU3Njg0M2RjYzQ2MTA0NjkyZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NTMzMDUsIC03Ni44MzA2MTUwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NzA2MGExYjkxYzU0ODAzODFmMGJkMGY5Y2QxZTI0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YWY0Yjk1MWM2ZTE0YjZkODEzYTlmNWM5YzQ1YmNiNiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWFmNGI5NTFjNmUxNGI2ZDgxM2E5ZjVjOWM0NWJjYjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlppb24gQ2h1cmNoIEluYy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3MDYwYTFiOTFjNTQ4MDM4MWYwYmQwZjljZDFlMjQyLnNldENvbnRlbnQoaHRtbF85YWY0Yjk1MWM2ZTE0YjZkODEzYTlmNWM5YzQ1YmNiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81Y2EyY2U3ZGNjYmI0NTc2ODQzZGNjNDYxMDQ2OTJmMC5iaW5kUG9wdXAocG9wdXBfNTcwNjBhMWI5MWM1NDgwMzgxZjBiZDBmOWNkMWUyNDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyMmFlMzdiYjZkZjRkNWQ5NTM5M2JkMTA5MTdkNTY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTU5ODMsIC03Ni45MzQ5Mjk1MDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYmI4MTYwMDBiZTc0MzAzOTY0Zjk0MDgwNmJkZjYxNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMGYzZDY4NDcwMmQ0NzNkODJkNGJiNzVhY2VkMTUwOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDBmM2Q2ODQ3MDJkNDczZDgyZDRiYjc1YWNlZDE1MDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZpcnN0IFBlbnRlY29zdGFsIENodXJjaCBvZiBHb2Qgb2YgU2lsdmVyIFNwcmluZywgSW5jPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYmI4MTYwMDBiZTc0MzAzOTY0Zjk0MDgwNmJkZjYxNC5zZXRDb250ZW50KGh0bWxfZDBmM2Q2ODQ3MDJkNDczZDgyZDRiYjc1YWNlZDE1MDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjIyYWUzN2JiNmRmNGQ1ZDk1MzkzYmQxMDkxN2Q1NjkuYmluZFBvcHVwKHBvcHVwX2ZiYjgxNjAwMGJlNzQzMDM5NjRmOTQwODA2YmRmNjE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNjg4NDk1YzVkYjQ0NWI0YTkwZWFlYTkwNjA2NGQxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk5MTUxLCAtNzYuOTMxODUxNTAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWU2NDc3YWU1OGUzNGYxN2FiNzQ0NWI0NzNjNjFlYmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODIyMWJjYmQ4YmRkNGMwMWE5ZTg5YzBjYzdhMWZiZWMgPSAkKGA8ZGl2IGlkPSJodG1sXzgyMjFiY2JkOGJkZDRjMDFhOWU4OWMwY2M3YTFmYmVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TcGVsbG1hbiBIb3VzZSBBcGFydG1hbnQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlNjQ3N2FlNThlMzRmMTdhYjc0NDViNDczYzYxZWJhLnNldENvbnRlbnQoaHRtbF84MjIxYmNiZDhiZGQ0YzAxYTllODljMGNjN2ExZmJlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNjg4NDk1YzVkYjQ0NWI0YTkwZWFlYTkwNjA2NGQxOC5iaW5kUG9wdXAocG9wdXBfMWU2NDc3YWU1OGUzNGYxN2FiNzQ0NWI0NzNjNjFlYmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM2NjU4YWI0NTdlODRhOTliZGJlMmYzZTY3NDE1ODIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODczNDg0MDAwMDAwMDA1LCAtNzYuOTMyOTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjNGQ2NTA0OTEyOTRhNWZhNDRjMmUyYWRmMWE5ZmQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyMjBhODM3YWQxNDQ4OTZiYWI5ZDZiODY4ZTNiOTY2ID0gJChgPGRpdiBpZD0iaHRtbF9iMjIwYTgzN2FkMTQ0ODk2YmFiOWQ2Yjg2OGUzYjk2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29tbXVuaXR5IE91dHJlYWNoIGFuZCBEZXZlbG9wbWVudCBDZW50ZXIgQ0RDPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYzRkNjUwNDkxMjk0YTVmYTQ0YzJlMmFkZjFhOWZkMy5zZXRDb250ZW50KGh0bWxfYjIyMGE4MzdhZDE0NDg5NmJhYjlkNmI4NjhlM2I5NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzY2NThhYjQ1N2U4NGE5OWJkYmUyZjNlNjc0MTU4MjIuYmluZFBvcHVwKHBvcHVwX2FjNGQ2NTA0OTEyOTRhNWZhNDRjMmUyYWRmMWE5ZmQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOGQ4ZmJiMDczOGI0YWZiYWYzYjBiMDI5OThhNzViYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk5ODAxNywgLTc2LjkyNzk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODc0MTFhZjc0YWVjNGE3YThiZmFhYzlkN2RjNjgwMjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2U1NDJhYTMzN2FlNGRkYjg1OGI3MzhiNDU3MjZhNmEgPSAkKGA8ZGl2IGlkPSJodG1sX2NlNTQyYWEzMzdhZTRkZGI4NThiNzM4YjQ1NzI2YTZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QcmVnbmFuY3kgQWlkIENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc0MTFhZjc0YWVjNGE3YThiZmFhYzlkN2RjNjgwMjUuc2V0Q29udGVudChodG1sX2NlNTQyYWEzMzdhZTRkZGI4NThiNzM4YjQ1NzI2YTZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I4ZDhmYmIwNzM4YjRhZmJhZjNiMGIwMjk5OGE3NWJjLmJpbmRQb3B1cChwb3B1cF84NzQxMWFmNzRhZWM0YTdhOGJmYWFjOWQ3ZGM2ODAyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDRhZjRiNGE4MTk4NDAyMWI5NTJiZTgxOGI4ZmFiNTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44MjMyNjAxNywgLTc2Ljk1MDIyNzM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIzM2IyNmQwNmM4ZDQ4Yjc5NWEwZmU4Y2NlZTQ2Y2Y2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4M2FiZWM3MTAwYjQzYzE5NDczOTVmMjM2ZTk4MGQ0ID0gJChgPGRpdiBpZD0iaHRtbF80ODNhYmVjNzEwMGI0M2MxOTQ3Mzk1ZjIzNmU5ODBkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmV0aGVsIFN0YW5kIGZvciBMaWZlIE91dHJlYWNoIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzM2IyNmQwNmM4ZDQ4Yjc5NWEwZmU4Y2NlZTQ2Y2Y2LnNldENvbnRlbnQoaHRtbF80ODNhYmVjNzEwMGI0M2MxOTQ3Mzk1ZjIzNmU5ODBkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NGFmNGI0YTgxOTg0MDIxYjk1MmJlODE4YjhmYWI1MS5iaW5kUG9wdXAocG9wdXBfMjMzYjI2ZDA2YzhkNDhiNzk1YTBmZThjY2VlNDZjZjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyYWI4MzkxODQzNDQ1NDE5MGJhOGQ5ZmY4ZjBjNjE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODIzMjY0LCAtNzYuOTQwNTQ1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmM2Yzk2OGFmOGQ0NDM1OWY0NGRhYjk1OThmMDNlOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wODAxOTZkZWEzYWM0NTRiYmEyNzI2MDFjMTgxNzI3YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDgwMTk2ZGVhM2FjNDU0YmJhMjcyNjAxYzE4MTcyN2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJlYWNoaW5nIFRoZSBXb3JsZCBDb21tdW5pdHkgRGV2ZWxvcG1lbnQsIEluYy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiYzZjOTY4YWY4ZDQ0MzU5ZjQ0ZGFiOTU5OGYwM2U5LnNldENvbnRlbnQoaHRtbF8wODAxOTZkZWEzYWM0NTRiYmEyNzI2MDFjMTgxNzI3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMmFiODM5MTg0MzQ0NTQxOTBiYThkOWZmOGYwYzYxOS5iaW5kUG9wdXAocG9wdXBfNmJjNmM5NjhhZjhkNDQzNTlmNDRkYWI5NTk4ZjAzZTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3YTUwNWI2MmIwZDQ1ZDU4YzMyMjExNmJkZGI3MWZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODIzMDM5LCAtNzYuOTQwMDU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3NjdjOWRlNTY4NTQ0Y2Q5MDU5NjUxMjM0OGM4ZWY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3Y2ZiMjVjYmI0MjRkMzFhYzcwMDY5YjhjOTc5NjcyID0gJChgPGRpdiBpZD0iaHRtbF84N2NmYjI1Y2JiNDI0ZDMxYWM3MDA2OWI4Yzk3OTY3MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFRydWUgVmluZSBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE3NjdjOWRlNTY4NTQ0Y2Q5MDU5NjUxMjM0OGM4ZWY5LnNldENvbnRlbnQoaHRtbF84N2NmYjI1Y2JiNDI0ZDMxYWM3MDA2OWI4Yzk3OTY3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kN2E1MDViNjJiMGQ0NWQ1OGMzMjIxMTZiZGRiNzFmZS5iaW5kUG9wdXAocG9wdXBfMTc2N2M5ZGU1Njg1NDRjZDkwNTk2NTEyMzQ4YzhlZjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlNjYxNDY3ODJmZDQwNTg4OTgwYThhODNjNGU4ZTQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODIxNjk4LCAtNzYuOTY4ODE0NTAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2FlY2Q3MmZiNzAwNDhlODllZmEzMjdiY2EwMTBjNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQ3M2EwZTdlNTU4NDQzZDg0NGQ0NmZjNDhmODNhNWQgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0NzNhMGU3ZTU1ODQ0M2Q4NDRkNDZmYzQ4ZjgzYTVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgSG9wZSBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhZWNkNzJmYjcwMDQ4ZTg5ZWZhMzI3YmNhMDEwYzc1LnNldENvbnRlbnQoaHRtbF9kNDczYTBlN2U1NTg0NDNkODQ0ZDQ2ZmM0OGY4M2E1ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZTY2MTQ2NzgyZmQ0MDU4ODk4MGE4YTgzYzRlOGU0MS5iaW5kUG9wdXAocG9wdXBfM2FlY2Q3MmZiNzAwNDhlODllZmEzMjdiY2EwMTBjNzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhYTA0ZGFhMzg1ZjRhNjU5Mjk4OTQxZTUzZTRhMmIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODE4MzMyLCAtNzYuOTQ5MzM4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MjRjNmI0OTk5MzQ0ZDI0OTU0YTBhNjkyM2RhNTVlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYmMwNjAwZjBkY2E0NjFhYmM1ODJlNzMzNWM3YTUwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfY2JjMDYwMGYwZGNhNDYxYWJjNTgyZTczMzVjN2E1MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNwcmVhZCBUaGUgTmV3cyBDaHVyY2ggb2YgR29kIGluIENocmlzdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjI0YzZiNDk5OTM0NGQyNDk1NGEwYTY5MjNkYTU1ZWIuc2V0Q29udGVudChodG1sX2NiYzA2MDBmMGRjYTQ2MWFiYzU4MmU3MzM1YzdhNTAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VhYTA0ZGFhMzg1ZjRhNjU5Mjk4OTQxZTUzZTRhMmIwLmJpbmRQb3B1cChwb3B1cF82MjRjNmI0OTk5MzQ0ZDI0OTU0YTBhNjkyM2RhNTVlYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWU3ZmNhMDNlYzg4NGJmNWJlMDgxNGJmZjZmOGI0YzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NTAyMTgsIC03Ni45NDI2NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjgxMjVlZDg0ZmFiNGRhODhhMWY0NzY0MjMwNTViMWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGI3ZjkxZTUwNmYyNDIwZWExYTgyNTNkMjlmZGY2YTYgPSAkKGA8ZGl2IGlkPSJodG1sXzhiN2Y5MWU1MDZmMjQyMGVhMWE4MjUzZDI5ZmRmNmE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IeWF0dHN2aWxsZSBDb3VydGhvdXNlIFBhcm9sZSBhbmQgUHJvYmF0aW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODEyNWVkODRmYWI0ZGE4OGExZjQ3NjQyMzA1NWIxYi5zZXRDb250ZW50KGh0bWxfOGI3ZjkxZTUwNmYyNDIwZWExYTgyNTNkMjlmZGY2YTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWU3ZmNhMDNlYzg4NGJmNWJlMDgxNGJmZjZmOGI0YzkuYmluZFBvcHVwKHBvcHVwX2Y4MTI1ZWQ4NGZhYjRkYTg4YTFmNDc2NDIzMDU1YjFiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMWU4YTY0YjQ1MWY0YWY4OTU2YTQ2YTUwZjY5MmU1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg4MzcxOTk0LCAtNzYuODMyMzU1ODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWUxMzI5ZjAzMTIxNDY2Yzg2ZDFmNWY2YmE3NTFiYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM4ZDRkMzBmNzMzNDM1ZWFhZGRmNTQ3ZGI4Yzc5OGUgPSAkKGA8ZGl2IGlkPSJodG1sXzljOGQ0ZDMwZjczMzQzNWVhYWRkZjU0N2RiOGM3OThlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgVmlzdGFzIGF0IExha2UgTGFyZ288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllMTMyOWYwMzEyMTQ2NmM4NmQxZjVmNmJhNzUxYmIwLnNldENvbnRlbnQoaHRtbF85YzhkNGQzMGY3MzM0MzVlYWFkZGY1NDdkYjhjNzk4ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMWU4YTY0YjQ1MWY0YWY4OTU2YTQ2YTUwZjY5MmU1Yi5iaW5kUG9wdXAocG9wdXBfOWUxMzI5ZjAzMTIxNDY2Yzg2ZDFmNWY2YmE3NTFiYjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlODFmMzk4OGVmMTQ3MjdhYTkzMDdlYjhlYmVlYjZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODQ5NTk4LCAtNzYuOTIwOTc5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iY2RjNzBlNmQyMmI0MTMzYTUyNzJhODEzYTNmNWI2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTAyOWY5NjQ1MzY0OTkzYjg4MjIxNGJlMTVhY2MwYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWEwMjlmOTY0NTM2NDk5M2I4ODIyMTRiZTE1YWNjMGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbmRzb3IgQ3Jvc3Npbmc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JjZGM3MGU2ZDIyYjQxMzNhNTI3MmE4MTNhM2Y1YjYwLnNldENvbnRlbnQoaHRtbF9lYTAyOWY5NjQ1MzY0OTkzYjg4MjIxNGJlMTVhY2MwYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZTgxZjM5ODhlZjE0NzI3YWE5MzA3ZWI4ZWJlZWI2ZC5iaW5kUG9wdXAocG9wdXBfYmNkYzcwZTZkMjJiNDEzM2E1MjcyYTgxM2EzZjViNjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhMTZiOWZmYmM3YzRlNjBhMzU2ZGQ0NzQ3ZjhjMjg0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTA3MzMxLCAtNzYuODQ5OTQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2MTg3MjIwYWYyMTRiZTQ5MjM2ZGM3OTY4MmMxMGVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyMDUxMzZmZDc5ZjRlZjI4YTg5OWQ0YTk2ZGE5YjhlID0gJChgPGRpdiBpZD0iaHRtbF9lMjA1MTM2ZmQ3OWY0ZWYyOGE4OTlkNGE5NmRhOWI4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2VsYm9ybmUgSG91c2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2MTg3MjIwYWYyMTRiZTQ5MjM2ZGM3OTY4MmMxMGVlLnNldENvbnRlbnQoaHRtbF9lMjA1MTM2ZmQ3OWY0ZWYyOGE4OTlkNGE5NmRhOWI4ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYTE2YjlmZmJjN2M0ZTYwYTM1NmRkNDc0N2Y4YzI4NC5iaW5kUG9wdXAocG9wdXBfNDYxODcyMjBhZjIxNGJlNDkyMzZkYzc5NjgyYzEwZWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjMGYxYjAyYWVhMjRjMTliZTNjOWMwZTk2YjAxMmE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTkxMzgzNDMsIC03Ny4wMTE4NDM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhNGViMmQyMGExMTQ5ZTliNDlmM2YyZjNhMWIyYjcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjOWIxNzM2ZjkzOTQ3ODU4MDYwNDg5NDhhZDkwYzdiID0gJChgPGRpdiBpZD0iaHRtbF8wYzliMTczNmY5Mzk0Nzg1ODA2MDQ4OTQ4YWQ5MGM3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWR2ZW50aXN0IENvbW11bml0eSBTZXJ2aWNlcyBvZiBHcmVhdGVyIFdhc2hpbmd0b248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhNGViMmQyMGExMTQ5ZTliNDlmM2YyZjNhMWIyYjcwLnNldENvbnRlbnQoaHRtbF8wYzliMTczNmY5Mzk0Nzg1ODA2MDQ4OTQ4YWQ5MGM3Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YzBmMWIwMmFlYTI0YzE5YmUzYzljMGU5NmIwMTJhNS5iaW5kUG9wdXAocG9wdXBfMmE0ZWIyZDIwYTExNDllOWI0OWYzZjJmM2ExYjJiNzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliZTk3ZmU0MDQzNzQyOWNiMGNjMDQwNTA5Njg0NmZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODgyNjY0LCAtNzYuODUxOTE4MDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmZhZmVkMTVjYWE2NDdmNWI5YjBhYjYzNGViNmU0ODcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmM4ZTI4YjhjMmUxNDliOTkzYzM4MzQ1YTkxMDE2M2YgPSAkKGA8ZGl2IGlkPSJodG1sX2JjOGUyOGI4YzJlMTQ5Yjk5M2MzODM0NWE5MTAxNjNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGVvY3JhY3kgSW50ZXJuYXRpb25hbCBNaW5pc3RyaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZmFmZWQxNWNhYTY0N2Y1YjliMGFiNjM0ZWI2ZTQ4Ny5zZXRDb250ZW50KGh0bWxfYmM4ZTI4YjhjMmUxNDliOTkzYzM4MzQ1YTkxMDE2M2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWJlOTdmZTQwNDM3NDI5Y2IwY2MwNDA1MDk2ODQ2ZmQuYmluZFBvcHVwKHBvcHVwX2JmYWZlZDE1Y2FhNjQ3ZjViOWIwYWI2MzRlYjZlNDg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMjY5MzdmYTFlNjE0NzI1OWFiMDc1MzIzMzFmMzljNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg4MzUxOSwgLTc2LjkxMTY2NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmZjNzM0Y2ZlNmFiNGI5YmIwYmQxZjE4MDA4ZTg4OTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDBiOTE2ZjQ5OGRjNDY5MmE1ZDJhN2YxZTc3ZWE0YzMgPSAkKGA8ZGl2IGlkPSJodG1sXzQwYjkxNmY0OThkYzQ2OTJhNWQyYTdmMWU3N2VhNGMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HYXRld2F5IFZpbGxhZ2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmYzczNGNmZTZhYjRiOWJiMGJkMWYxODAwOGU4ODkxLnNldENvbnRlbnQoaHRtbF80MGI5MTZmNDk4ZGM0NjkyYTVkMmE3ZjFlNzdlYTRjMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMjY5MzdmYTFlNjE0NzI1OWFiMDc1MzIzMzFmMzljNi5iaW5kUG9wdXAocG9wdXBfMmZjNzM0Y2ZlNmFiNGI5YmIwYmQxZjE4MDA4ZTg4OTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjMDEwZjA0NGZkNDRlZmRiYjJkOGY1OGJhYjRmNzQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDk1NDk4NzksIC03Ny4xNTg2MDA3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYmE4Nzg4NmY1NTM0NDFhOGE3MTkyMjY3ZjYzODhhYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MGQwMmM4YmNjYzI0ZDU3OTg0OTQzZjFiMGUwMTBlNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzBkMDJjOGJjY2MyNGQ1Nzk4NDk0M2YxYjBlMDEwZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vbnRnb21lcnkgQ29sbGVnZSAtIFJvY2t2aWxsZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGJhODc4ODZmNTUzNDQxYThhNzE5MjI2N2Y2Mzg4YWIuc2V0Q29udGVudChodG1sXzcwZDAyYzhiY2NjMjRkNTc5ODQ5NDNmMWIwZTAxMGU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjMDEwZjA0NGZkNDRlZmRiYjJkOGY1OGJhYjRmNzQ4LmJpbmRQb3B1cChwb3B1cF8wYmE4Nzg4NmY1NTM0NDFhOGE3MTkyMjY3ZjYzODhhYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWMyZDFhMDYxNjAyNGNiNGE1ZTBjNDgyNzI2MGIyNzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NTEzMDgsIC03Ni45MTk1ODQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxYTJkNjg0Y2Q3MTQxNDhiZDYyNmY1OTVhYTc5MWE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4MjViZmJiN2NiZDRiNTA4ZGU5NjM0ODAyMmQwMTc4ID0gJChgPGRpdiBpZD0iaHRtbF8zODI1YmZiYjdjYmQ0YjUwOGRlOTYzNDgwMjJkMDE3OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGlsZ3JpbWFnZSBDaHJpc3RpYW4gQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MWEyZDY4NGNkNzE0MTQ4YmQ2MjZmNTk1YWE3OTFhNC5zZXRDb250ZW50KGh0bWxfMzgyNWJmYmI3Y2JkNGI1MDhkZTk2MzQ4MDIyZDAxNzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWMyZDFhMDYxNjAyNGNiNGE1ZTBjNDgyNzI2MGIyNzkuYmluZFBvcHVwKHBvcHVwXzUxYTJkNjg0Y2Q3MTQxNDhiZDYyNmY1OTVhYTc5MWE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Y2JhNTE0MWZjZjY0MGIxODBlZjc1YWNhYTZlMWIyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk0ODc2OSwgLTc2Ljg1NDkzNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzkzNzYzYjY1OTI2NDZlYTljMGQzYzI3NWY4YjgzMTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjAwNjUxNGQwYWZlNDMzNGJmNTkxMjhhOTRjYjUyMmIgPSAkKGA8ZGl2IGlkPSJodG1sX2YwMDY1MTRkMGFmZTQzMzRiZjU5MTI4YTk0Y2I1MjJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NdC4gQ2FsdmFyeSBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzkzNzYzYjY1OTI2NDZlYTljMGQzYzI3NWY4YjgzMTUuc2V0Q29udGVudChodG1sX2YwMDY1MTRkMGFmZTQzMzRiZjU5MTI4YTk0Y2I1MjJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVjYmE1MTQxZmNmNjQwYjE4MGVmNzVhY2FhNmUxYjI5LmJpbmRQb3B1cChwb3B1cF8zOTM3NjNiNjU5MjY0NmVhOWMwZDNjMjc1ZjhiODMxNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTMwNTYwMzI4NzUxNGZhZGI5YWQyYjAzMjBjM2M1ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NjkwOTE5OTk5OTk5OTUsIC03Ni45MTg5NTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1YjJjZGRlYmJhOTQwYjM5Mzk2NzU5M2ViNGI1NDUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0NzU2NzdiYjQxYjQ2ZDNhOGIzNzZmZDNlNDFhYmY3ID0gJChgPGRpdiBpZD0iaHRtbF9iNDc1Njc3YmI0MWI0NmQzYThiMzc2ZmQzZTQxYWJmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnVpbGRlcnMsIEluYzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDViMmNkZGViYmE5NDBiMzkzOTY3NTkzZWI0YjU0NTIuc2V0Q29udGVudChodG1sX2I0NzU2NzdiYjQxYjQ2ZDNhOGIzNzZmZDNlNDFhYmY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzMDU2MDMyODc1MTRmYWRiOWFkMmIwMzIwYzNjNWRjLmJpbmRQb3B1cChwb3B1cF9kNWIyY2RkZWJiYTk0MGIzOTM5Njc1OTNlYjRiNTQ1MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDc1NDRjMDIyODcwNDIzZmE1M2Y0Yjg4YzRiMWZjNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNjYyMTMyMSwgLTc3LjAyMDU1MjYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U2YzUyMTJkMDEzNzQwNmM4NGIyYzYzNjE2YjE2NGYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmNGY0NzRkOTdjODRhMWU5NDlmMjMwN2E2ZDNiMTJkID0gJChgPGRpdiBpZD0iaHRtbF80ZjRmNDc0ZDk3Yzg0YTFlOTQ5ZjIzMDdhNmQzYjEyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2luZ3MgYW5kIFByaWVzdHMgSW50ZXJuYXRpb25hbCBNaW5pc3RyaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNmM1MjEyZDAxMzc0MDZjODRiMmM2MzYxNmIxNjRmMy5zZXRDb250ZW50KGh0bWxfNGY0ZjQ3NGQ5N2M4NGExZTk0OWYyMzA3YTZkM2IxMmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDc1NDRjMDIyODcwNDIzZmE1M2Y0Yjg4YzRiMWZjNGIuYmluZFBvcHVwKHBvcHVwX2U2YzUyMTJkMDEzNzQwNmM4NGIyYzYzNjE2YjE2NGYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZTA3YjZmM2U0M2Q0ZWNlYTM1MDcwZThmMWM1YThiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg1MjI0OTYxLCAtNzYuOTE3NDcyNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2U1NmI1NjJhMDk0NGIxY2FmMWMxMTlhYjBhYTdkMDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmY3NDk3NmNiNjJiNDdmM2E2NGNkNDQ0ZThmNGMyMzAgPSAkKGA8ZGl2IGlkPSJodG1sX2JmNzQ5NzZjYjYyYjQ3ZjNhNjRjZDQ0NGU4ZjRjMjMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdWl0bGFuZCBIaWdoIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2U1NmI1NjJhMDk0NGIxY2FmMWMxMTlhYjBhYTdkMDQuc2V0Q29udGVudChodG1sX2JmNzQ5NzZjYjYyYjQ3ZjNhNjRjZDQ0NGU4ZjRjMjMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlMDdiNmYzZTQzZDRlY2VhMzUwNzBlOGYxYzVhOGJiLmJpbmRQb3B1cChwb3B1cF8zZTU2YjU2MmEwOTQ0YjFjYWYxYzExOWFiMGFhN2QwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWE4N2Q4Zjk0NTkxNDZjMDk1MDE0NjEwZjQxMGM0YTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MzY2MDk5OTk5OTk5OTUsIC03Ni45MjczMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzMxMDA1MTNiMjQxNGU5NjlhMmRiZjZjOTg1NDRjMDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTQyMjk4NDUwZGI2NDcwNTg0NmE5OTA4ZDdmOWUzY2IgPSAkKGA8ZGl2IGlkPSJodG1sX2U0MjI5ODQ1MGRiNjQ3MDU4NDZhOTkwOGQ3ZjllM2NiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b24gR3JlZW4gU2VuaW9yIExpdmluZzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzMxMDA1MTNiMjQxNGU5NjlhMmRiZjZjOTg1NDRjMDcuc2V0Q29udGVudChodG1sX2U0MjI5ODQ1MGRiNjQ3MDU4NDZhOTkwOGQ3ZjllM2NiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlhODdkOGY5NDU5MTQ2YzA5NTAxNDYxMGY0MTBjNGEzLmJpbmRQb3B1cChwb3B1cF9jMzEwMDUxM2IyNDE0ZTk2OWEyZGJmNmM5ODU0NGMwNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTY2ZmM1Y2M2MjhhNGM4NzhkMjE3MjM3MGRhZDg0ZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNjY1MzE5MSwgLTc3LjAyMDE3MTAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxODU4ZTY0M2RlMTQwNzM5NTQ3MTMzNTgwZjY2ZDFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzNTBhNDgwYzY0YTRkZjFiOTg4YTM1NzRkMGU3ZjhiID0gJChgPGRpdiBpZD0iaHRtbF9kMzUwYTQ4MGM2NGE0ZGYxYjk4OGEzNTc0ZDBlN2Y4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFuZG9scGggVmlsbGFnZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjE4NThlNjQzZGUxNDA3Mzk1NDcxMzM1ODBmNjZkMWMuc2V0Q29udGVudChodG1sX2QzNTBhNDgwYzY0YTRkZjFiOTg4YTM1NzRkMGU3ZjhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2NmZjNWNjNjI4YTRjODc4ZDIxNzIzNzBkYWQ4NGZhLmJpbmRQb3B1cChwb3B1cF9iMTg1OGU2NDNkZTE0MDczOTU0NzEzMzU4MGY2NmQxYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDM4YWUyY2YwZGFhNDIyMjk4NTk4MzFjMmE3Y2IwN2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wOTcyMzE1NSwgLTc3LjEwNzI0MTc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwMjg4MmYyODhlNDQwYWNiM2IwNTllN2QyOGViYWQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5ZTkxOTYxYTg1NjQ3OWZhZWE2MDM2NmNiYmNlYTBjID0gJChgPGRpdiBpZD0iaHRtbF81OWU5MTk2MWE4NTY0NzlmYWVhNjAzNjZjYmJjZWEwYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWxmcmVkIEhvdXNlIEVsZGVyY2FyZSBJbmM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwMjg4MmYyODhlNDQwYWNiM2IwNTllN2QyOGViYWQ5LnNldENvbnRlbnQoaHRtbF81OWU5MTk2MWE4NTY0NzlmYWVhNjAzNjZjYmJjZWEwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMzhhZTJjZjBkYWE0MjIyOTg1OTgzMWMyYTdjYjA3Yy5iaW5kUG9wdXAocG9wdXBfMjAyODgyZjI4OGU0NDBhY2IzYjA1OWU3ZDI4ZWJhZDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjMWYzYzU3NDI5NDRmNTViMDA0NDE0NDIwMDIyNDFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTU1MTQxLCAtNzYuOTQwODc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwY2Y4MmFlM2ZmYTRkZGJhMzE1OTIzZjMwZTZmNjhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhM2EyOWE1NDkxMjQzMzdiNmEwMTkzODlhYjU1NjVmID0gJChgPGRpdiBpZD0iaHRtbF9lYTNhMjlhNTQ5MTI0MzM3YjZhMDE5Mzg5YWI1NTY1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q3Jvc3NvdmVyIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzBjZjgyYWUzZmZhNGRkYmEzMTU5MjNmMzBlNmY2OGIuc2V0Q29udGVudChodG1sX2VhM2EyOWE1NDkxMjQzMzdiNmEwMTkzODlhYjU1NjVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBjMWYzYzU3NDI5NDRmNTViMDA0NDE0NDIwMDIyNDFjLmJpbmRQb3B1cChwb3B1cF8zMGNmODJhZTNmZmE0ZGRiYTMxNTkyM2YzMGU2ZjY4YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGM2NDQ1NmQ4ZTJmNDBiMDlkNTA4YTJlMTRjNmVhYzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45OTM0OSwgLTc2LjkyMTQ2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOGY5MzVlYWI5MjI0ZGZhYjk0ZDk4ZDg3YzNkOTQyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMWMxNmI4NzYwYTk0NzRhYTFlODc0Njg1NzNlM2NjZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDFjMTZiODc2MGE5NDc0YWExZTg3NDY4NTczZTNjY2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdvZCdzIFBlb3BsZSBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4ZjkzNWVhYjkyMjRkZmFiOTRkOThkODdjM2Q5NDI2LnNldENvbnRlbnQoaHRtbF8wMWMxNmI4NzYwYTk0NzRhYTFlODc0Njg1NzNlM2NjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYzY0NDU2ZDhlMmY0MGIwOWQ1MDhhMmUxNGM2ZWFjOS5iaW5kUG9wdXAocG9wdXBfZDhmOTM1ZWFiOTIyNGRmYWI5NGQ5OGQ4N2MzZDk0MjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkNDAxMjc1MmJjNDRmYjJhNDI3NWQ2Y2MyNGI5YzFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODYyNjEyLCAtNzYuOTEzNDQ2NDk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTM0Njk5N2Y3ZTJkNDAyZWE0MTM5ZWI4YzI5YzVjNGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTgwZjA2MTI3OWM2NGMzOTg5OTIwY2U1NDI4YTYyODEgPSAkKGA8ZGl2IGlkPSJodG1sX2U4MGYwNjEyNzljNjRjMzk4OTkyMGNlNTQyOGE2MjgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HbGVucmlkZ2UgU0RBIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTM0Njk5N2Y3ZTJkNDAyZWE0MTM5ZWI4YzI5YzVjNGMuc2V0Q29udGVudChodG1sX2U4MGYwNjEyNzljNjRjMzk4OTkyMGNlNTQyOGE2MjgxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkNDAxMjc1MmJjNDRmYjJhNDI3NWQ2Y2MyNGI5YzFmLmJpbmRQb3B1cChwb3B1cF9hMzQ2OTk3ZjdlMmQ0MDJlYTQxMzllYjhjMjljNWM0YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjM0ZmY4Mzc3NzI5NGYyMmFiY2M0Y2ZlZGYwYzBkZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NTIwMSwgLTc2LjkxMjI4MTAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5MmZhOGRhZTE4NDQ5NDVhZDMwY2FmYmFjMTNjODE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExZGVhZTI0NDUyZDQ3Y2Q4NjZiYjhjNTU4MzFiMzFkID0gJChgPGRpdiBpZD0iaHRtbF8xMWRlYWUyNDQ1MmQ0N2NkODY2YmI4YzU1ODMxYjMxZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2Vjb25kIEJhcHRpc3QgQ2h1cmNoIFNvdXRod2VzdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDkyZmE4ZGFlMTg0NDk0NWFkMzBjYWZiYWMxM2M4MTguc2V0Q29udGVudChodG1sXzExZGVhZTI0NDUyZDQ3Y2Q4NjZiYjhjNTU4MzFiMzFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IzNGZmODM3NzcyOTRmMjJhYmNjNGNmZWRmMGMwZGZhLmJpbmRQb3B1cChwb3B1cF8wOTJmYThkYWUxODQ0OTQ1YWQzMGNhZmJhYzEzYzgxOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzk1MjYxZTkxYjUwNGYxMTllZDA4MjMyYzNhNTVjYWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NjEwNjQsIC03Ni45MTAzOTU0OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZDFiMDFiMWYwMmI0NThmYjcwNzQ1NjA2Nzk1MDlmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZWJhN2YyMGQ0OTM0MGI1OWU3YzkwZTc2ODJkOTRhNiA9ICQoYDxkaXYgaWQ9Imh0bWxfN2ViYTdmMjBkNDkzNDBiNTllN2M5MGU3NjgyZDk0YTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxpZmUgaW4gVmljdG9yeSBPdXRyZWFjaCBNaW5pc3RyaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZDFiMDFiMWYwMmI0NThmYjcwNzQ1NjA2Nzk1MDlmYS5zZXRDb250ZW50KGh0bWxfN2ViYTdmMjBkNDkzNDBiNTllN2M5MGU3NjgyZDk0YTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzk1MjYxZTkxYjUwNGYxMTllZDA4MjMyYzNhNTVjYWMuYmluZFBvcHVwKHBvcHVwXzNkMWIwMWIxZjAyYjQ1OGZiNzA3NDU2MDY3OTUwOWZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNmExODQ2N2QyYTA0MDliYWU5OWQ1YTliYWRjYjA1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjgxMTU1NSwgLTc2LjgzNzU3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDljOTM1ZWFhN2E0NGM2YWU1MTJiNWQxNjEyNzhhNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iN2VkY2JhYTkyZTE0NWFiOWYwNTdhOWY1ZjVhN2I4YiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjdlZGNiYWE5MmUxNDVhYjlmMDU3YTlmNWY1YTdiOGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcndvb2QgU2VuaW9yIEFwYXJ0bWVudHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRkOWM5MzVlYWE3YTQ0YzZhZTUxMmI1ZDE2MTI3OGE1LnNldENvbnRlbnQoaHRtbF9iN2VkY2JhYTkyZTE0NWFiOWYwNTdhOWY1ZjVhN2I4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNmExODQ2N2QyYTA0MDliYWU5OWQ1YTliYWRjYjA1Yy5iaW5kUG9wdXAocG9wdXBfNGQ5YzkzNWVhYTdhNDRjNmFlNTEyYjVkMTYxMjc4YTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlYTRkYWJiYmZlYzRkMWY4YjgwOGYwNWE1Yjg4OWFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTU5MDM4LCAtNzYuOTIyNjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2NWQ3Nzc5MDVlNDQyOTJiMzU1MWY2NmYwMDY5ZGYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjOTlkYWI2MzgyODQ5MGU5MzdjZDk4YmRlMDBmMzU2ID0gJChgPGRpdiBpZD0iaHRtbF9lYzk5ZGFiNjM4Mjg0OTBlOTM3Y2Q5OGJkZTAwZjM1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Uml2ZXIgb2YgTGlmZSBSZWRlZW1lZCBDaHJpc3RpYW4gQ2h1cmNoIG9mIEdvZDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzY1ZDc3NzkwNWU0NDI5MmIzNTUxZjY2ZjAwNjlkZjEuc2V0Q29udGVudChodG1sX2VjOTlkYWI2MzgyODQ5MGU5MzdjZDk4YmRlMDBmMzU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FlYTRkYWJiYmZlYzRkMWY4YjgwOGYwNWE1Yjg4OWFjLmJpbmRQb3B1cChwb3B1cF8zNjVkNzc3OTA1ZTQ0MjkyYjM1NTFmNjZmMDA2OWRmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTQ2MzI5ODJjMzJkNDcwNGIxYmVmMGRmYzU4NmVlOTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NTg1MjUsIC03Ni45OTI4MzU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4YWM0YTIxNzQzODRiYTZiYjNlZGZiNzNhNzBjMjhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4YTc2MzhjZWMzNDQ3OGU4YmMwNTlmOTM3MjVlMzMyID0gJChgPGRpdiBpZD0iaHRtbF9kOGE3NjM4Y2VjMzQ0NzhlOGJjMDU5ZjkzNzI1ZTMzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2hpbG9oIENodXJjaCBPZiBHb2QgNyBEYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4YWM0YTIxNzQzODRiYTZiYjNlZGZiNzNhNzBjMjhiLnNldENvbnRlbnQoaHRtbF9kOGE3NjM4Y2VjMzQ0NzhlOGJjMDU5ZjkzNzI1ZTMzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNDYzMjk4MmMzMmQ0NzA0YjFiZWYwZGZjNTg2ZWU5NC5iaW5kUG9wdXAocG9wdXBfZThhYzRhMjE3NDM4NGJhNmJiM2VkZmI3M2E3MGMyOGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0ZTgwNjViYjA0ODRkMzFiNTM5ODRiYjBjNDY1NmVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTYwMDgyODk5OTk5OTk2LCAtNzYuOTg2MTIwOTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDVkMDc5ZDU2ZWJjNDQ4NTk0ZmM3ZDExOTM5YjZkMWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDYwNjQ4NmQ3ODVlNGEzZDhjM2NmMDJiOWUzMWQzZGYgPSAkKGA8ZGl2IGlkPSJodG1sXzA2MDY0ODZkNzg1ZTRhM2Q4YzNjZjAyYjllMzFkM2RmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JbnN0aXR1dGUgb2YgdGhlIEluY2FybmF0ZSBXb3JkPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNWQwNzlkNTZlYmM0NDg1OTRmYzdkMTE5MzliNmQxYi5zZXRDb250ZW50KGh0bWxfMDYwNjQ4NmQ3ODVlNGEzZDhjM2NmMDJiOWUzMWQzZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTRlODA2NWJiMDQ4NGQzMWI1Mzk4NGJiMGM0NjU2ZWMuYmluZFBvcHVwKHBvcHVwX2Q1ZDA3OWQ1NmViYzQ0ODU5NGZjN2QxMTkzOWI2ZDFiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Mzc0MmQ0NjA1YjA0OTlmOGU5ZWQxYzIzM2E2NjU0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg5NjY5NSwgLTc2LjkwNzkyOTUwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyYjEzMTE1NTEyMDQ5YTliMjlkMGE4ZmMwNmUzODdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhN2RjNjA5YWE5YTQ3MGNhYmVhZjI4ODI3ODAyOGEzID0gJChgPGRpdiBpZD0iaHRtbF8zYTdkYzYwOWFhOWE0NzBjYWJlYWYyODgyNzgwMjhhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2VhdCBQbGVhc2FudCBDb21tdW5pdHkgRGV2ZWxvcG1lbnQgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMmIxMzExNTUxMjA0OWE5YjI5ZDBhOGZjMDZlMzg3Yi5zZXRDb250ZW50KGh0bWxfM2E3ZGM2MDlhYTlhNDcwY2FiZWFmMjg4Mjc4MDI4YTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODM3NDJkNDYwNWIwNDk5ZjhlOWVkMWMyMzNhNjY1NDQuYmluZFBvcHVwKHBvcHVwX2IyYjEzMTE1NTEyMDQ5YTliMjlkMGE4ZmMwNmUzODdiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZjYwNjVlNWRmNjY0OWM1YmZiNTBjYTMxNGJmYmE2MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg5NjY5NSwgLTc2LjkwNzkyOTUwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5YTNiMzI3Y2IwNzQxZDBhOTMwY2JjMDA5ZWUzZjU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhZjkwNjViYTM4ODQzZGZiMDQ3Zjc2YWE2YmU4NWRkID0gJChgPGRpdiBpZD0iaHRtbF9iYWY5MDY1YmEzODg0M2RmYjA0N2Y3NmFhNmJlODVkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29tbXVuaXR5IE1pbmlzdHJ5IG9mIFByaW5jZSBHZW9yZ2UnczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTlhM2IzMjdjYjA3NDFkMGE5MzBjYmMwMDllZTNmNTQuc2V0Q29udGVudChodG1sX2JhZjkwNjViYTM4ODQzZGZiMDQ3Zjc2YWE2YmU4NWRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNmNjA2NWU1ZGY2NjQ5YzViZmI1MGNhMzE0YmZiYTYwLmJpbmRQb3B1cChwb3B1cF8xOWEzYjMyN2NiMDc0MWQwYTkzMGNiYzAwOWVlM2Y1NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjZkNzQ3ZjBmM2VlNDFjN2E3YTg0YTNiYTZjNzkxNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NTgzNDUsIC03Ni45NDU4NDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0MTM1MWM3NTZhYzQ5YmRiODY5MTJiYjY0YjA1MDNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmNDcwZDg0MzNkNjQzN2M5YmRiNTI3NDRjZTkwOGZiID0gJChgPGRpdiBpZD0iaHRtbF9jZjQ3MGQ4NDMzZDY0MzdjOWJkYjUyNzQ0Y2U5MDhmYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnJpZW5kc2hpcCBBcm1zIEFwYXJ0bWVudHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0MTM1MWM3NTZhYzQ5YmRiODY5MTJiYjY0YjA1MDNkLnNldENvbnRlbnQoaHRtbF9jZjQ3MGQ4NDMzZDY0MzdjOWJkYjUyNzQ0Y2U5MDhmYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNmQ3NDdmMGYzZWU0MWM3YTdhODRhM2JhNmM3OTE1Yi5iaW5kUG9wdXAocG9wdXBfMjQxMzUxYzc1NmFjNDliZGI4NjkxMmJiNjRiMDUwM2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmMWIzMmMzN2IxYTQ0YTZiYzVjYTQxOTZjZDVhZjQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODAwNDEzLCAtNzYuOTA2NDMxMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQ2ZDkyZjY3NjM1NDE3NGI1YzU0YmRkNWQxMzg3NDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDhiYWIxYTBhN2I2NDkxODk3YTVhYTJkNDBkZTg3YjYgPSAkKGA8ZGl2IGlkPSJodG1sX2Q4YmFiMWEwYTdiNjQ5MTg5N2E1YWEyZDQwZGU4N2I2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db21tdW5pdHkgQ2hhbmdlcnMgQ0RDPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNDZkOTJmNjc2MzU0MTc0YjVjNTRiZGQ1ZDEzODc0NS5zZXRDb250ZW50KGh0bWxfZDhiYWIxYTBhN2I2NDkxODk3YTVhYTJkNDBkZTg3YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGYxYjMyYzM3YjFhNDRhNmJjNWNhNDE5NmNkNWFmNDAuYmluZFBvcHVwKHBvcHVwX2U0NmQ5MmY2NzYzNTQxNzRiNWM1NGJkZDVkMTM4NzQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmNmNWM1MDJlNWI0N2I5YWFjYTdmNTVlZDJkYzg1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk0NzIyMSwgLTc2LjkxMTExNTUwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzNjJkNTIwYjU1NzRiYzdiODBiODQ4OWU0NGE2ZDRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1OGJiN2UzYjhjMDQzMWM4MTFkMzEzYWNmOWRlZDliID0gJChgPGRpdiBpZD0iaHRtbF8zNThiYjdlM2I4YzA0MzFjODExZDMxM2FjZjlkZWQ5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U0VFRCBJbmM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzNjJkNTIwYjU1NzRiYzdiODBiODQ4OWU0NGE2ZDRjLnNldENvbnRlbnQoaHRtbF8zNThiYjdlM2I4YzA0MzFjODExZDMxM2FjZjlkZWQ5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZmNmNWM1MDJlNWI0N2I5YWFjYTdmNTVlZDJkYzg1MC5iaW5kUG9wdXAocG9wdXBfNjM2MmQ1MjBiNTU3NGJjN2I4MGI4NDg5ZTQ0YTZkNGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1ZTdhN2ViN2I0MzRjMTBiMWNlZTZmMzQzMjZjMmMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODg1MjExLCAtNzYuOTEzODgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmNDg4Mjc2NmQ4YTRjZjJhMjM5YTQ1YjIyMDgwYWRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzZmU5MDFkNWU1NTRiZGZiZDUyNWU5YTllNzA0Mjk2ID0gJChgPGRpdiBpZD0iaHRtbF8zM2ZlOTAxZDVlNTU0YmRmYmQ1MjVlOWE5ZTcwNDI5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rmlyc3QgQmFwdGlzdCBDaHVyY2ggb2YgQ2FwaXRvbCBIZWlnaHRzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjQ4ODI3NjZkOGE0Y2YyYTIzOWE0NWIyMjA4MGFkYi5zZXRDb250ZW50KGh0bWxfMzNmZTkwMWQ1ZTU1NGJkZmJkNTI1ZTlhOWU3MDQyOTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTVlN2E3ZWI3YjQzNGMxMGIxY2VlNmYzNDMyNmMyYzIuYmluZFBvcHVwKHBvcHVwXzZmNDg4Mjc2NmQ4YTRjZjJhMjM5YTQ1YjIyMDgwYWRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Y2ZmMGQyZmZlYmU0NWZkYjJlOTAzYWVjYjE1ZGI2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk1MjU1OCwgLTc2LjkxNDUxNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQ2ZWVjYjUyNzRiNGI5NjlmOWNlOTBhYjYxYjQ4NTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWJjY2ViZjYzNjQ3NDgyM2E5NjM5YTVjNzZiZDc1NzkgPSAkKGA8ZGl2IGlkPSJodG1sXzViY2NlYmY2MzY0NzQ4MjNhOTYzOWE1Yzc2YmQ3NTc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UZW1wbGV0b24gRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkNmVlY2I1Mjc0YjRiOTY5ZjljZTkwYWI2MWI0ODU4LnNldENvbnRlbnQoaHRtbF81YmNjZWJmNjM2NDc0ODIzYTk2MzlhNWM3NmJkNzU3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83Y2ZmMGQyZmZlYmU0NWZkYjJlOTAzYWVjYjE1ZGI2OS5iaW5kUG9wdXAocG9wdXBfZWQ2ZWVjYjUyNzRiNGI5NjlmOWNlOTBhYjYxYjQ4NTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1M2E2N2UxNzczZDRhNjFiZWE0OWM1YTZlYThlNjY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODA2Nzg1LCAtNzYuOTU4MjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjNGJiNTcyMDE1YjQ0MDNiZmZlZWNhNDEyYjNmZmZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3N2I3MWIwZjIxMDRmMGM5ZDRmY2NiNGNlZmVhMGUyID0gJChgPGRpdiBpZD0iaHRtbF8zNzdiNzFiMGYyMTA0ZjBjOWQ0ZmNjYjRjZWZlYTBlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHJpbml0eSBUZXJyYWNlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzRiYjU3MjAxNWI0NDAzYmZmZWVjYTQxMmIzZmZmYS5zZXRDb250ZW50KGh0bWxfMzc3YjcxYjBmMjEwNGYwYzlkNGZjY2I0Y2VmZWEwZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzUzYTY3ZTE3NzNkNGE2MWJlYTQ5YzVhNmVhOGU2NjguYmluZFBvcHVwKHBvcHVwXzFjNGJiNTcyMDE1YjQ0MDNiZmZlZWNhNDEyYjNmZmZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYTI1ZGI3ODU3NTA0YjVhOTFkMThmMzc5OThhNmRmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk2NDkwMjQyLCAtNzYuODY0NDA1NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNjZDQ3Mzk5YTc4NDI3NThiYmJlYWJhMWMxNTA2ZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTc3NzA2NTA5ZjgzNGY4YTkxYTNhYjI0NGI5MzMwOTggPSAkKGA8ZGl2IGlkPSJodG1sX2E3NzcwNjUwOWY4MzRmOGE5MWEzYWIyNDRiOTMzMDk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYmVuZXplciBXZSBDYXJlIFdlIFNoYXJlIENvbW11bml0eTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjNjZDQ3Mzk5YTc4NDI3NThiYmJlYWJhMWMxNTA2ZGEuc2V0Q29udGVudChodG1sX2E3NzcwNjUwOWY4MzRmOGE5MWEzYWIyNDRiOTMzMDk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JhMjVkYjc4NTc1MDRiNWE5MWQxOGYzNzk5OGE2ZGYzLmJpbmRQb3B1cChwb3B1cF8yM2NkNDczOTlhNzg0Mjc1OGJiYmVhYmExYzE1MDZkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODdmZjg2YmVjYTU0NDViNmJhMjhjZWI1ZTM0M2Y2MWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44OTMwOTUsIC03Ni45MDIyMjgwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOWI5MDRjODFlNGE0NTU5YWFlOWY1ZGEwNzhlZGY2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZjAxN2Q5ZGY2ZWE0NjQzODA1MjVlMGJlMWE1MmU5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWYwMTdkOWRmNmVhNDY0MzgwNTI1ZTBiZTFhNTJlOTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vdW50IFZpY3RvcnkgRm9vZCBCYXNrZXQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5YjkwNGM4MWU0YTQ1NTlhYWU5ZjVkYTA3OGVkZjZhLnNldENvbnRlbnQoaHRtbF9lZjAxN2Q5ZGY2ZWE0NjQzODA1MjVlMGJlMWE1MmU5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84N2ZmODZiZWNhNTQ0NWI2YmEyOGNlYjVlMzQzZjYxZi5iaW5kUG9wdXAocG9wdXBfYjliOTA0YzgxZTRhNDU1OWFhZTlmNWRhMDc4ZWRmNmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1NWUxN2RmMjE5MTRlYjJhNmM2N2QyMmYyZTNiYmZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODg0ODI5OSwgLTc2LjkxMzI3MTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzNTU2MTllYzM4ZDQ2NTJiMDc0YjUwOTFlZTJkOWE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5NGVlZTI4ZGY4ZjQzODlhOWQyYjdhNzliMjc0MjVjID0gJChgPGRpdiBpZD0iaHRtbF81OTRlZWUyOGRmOGY0Mzg5YTlkMmI3YTc5YjI3NDI1YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGVhdmVuJ3MgSGVscGVycyBNaW5pc3RyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjM1NTYxOWVjMzhkNDY1MmIwNzRiNTA5MWVlMmQ5YTkuc2V0Q29udGVudChodG1sXzU5NGVlZTI4ZGY4ZjQzODlhOWQyYjdhNzliMjc0MjVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc1NWUxN2RmMjE5MTRlYjJhNmM2N2QyMmYyZTNiYmZiLmJpbmRQb3B1cChwb3B1cF9mMzU1NjE5ZWMzOGQ0NjUyYjA3NGI1MDkxZWUyZDlhOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzViODMyZWE0OTYyNGI5OGFlOWJmM2YxYmM0MzA2ZTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44ODQ4NDQxMywgLTc2LjkxMjU3MDE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3MTBlMGZmM2RhODRlOTk5ZTdhMDhiYjBhZGRiN2ZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5MzE2ZjdlZGU0YzRhY2Y5OWJmZGY1ZTE2M2NkYmFkID0gJChgPGRpdiBpZD0iaHRtbF81OTMxNmY3ZWRlNGM0YWNmOTliZmRmNWUxNjNjZGJhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFjaCBPbmUsIEZlZWQgT25lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNzEwZTBmZjNkYTg0ZTk5OWU3YTA4YmIwYWRkYjdmZi5zZXRDb250ZW50KGh0bWxfNTkzMTZmN2VkZTRjNGFjZjk5YmZkZjVlMTYzY2RiYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzViODMyZWE0OTYyNGI5OGFlOWJmM2YxYmM0MzA2ZTUuYmluZFBvcHVwKHBvcHVwX2U3MTBlMGZmM2RhODRlOTk5ZTdhMDhiYjBhZGRiN2ZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MmJhYWIzOTJlZjc0ODlmOTQ1ZjdlNDMyNTEwNzNjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg4NDg0NDEzLCAtNzYuOTEyNTcwMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGFhYjc2MDdhNjc3NDM3ODhjMTA4ODExZjE3NjMzYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGVjMjgxYjVkMGQxNDQ0MzkxNjlhN2NhNzVlZWQxYTggPSAkKGA8ZGl2IGlkPSJodG1sXzRlYzI4MWI1ZDBkMTQ0NDM5MTY5YTdjYTc1ZWVkMWE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaXN0YXMgVW5pdGVkPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YWFiNzYwN2E2Nzc0Mzc4OGMxMDg4MTFmMTc2MzNiMS5zZXRDb250ZW50KGh0bWxfNGVjMjgxYjVkMGQxNDQ0MzkxNjlhN2NhNzVlZWQxYTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjJiYWFiMzkyZWY3NDg5Zjk0NWY3ZTQzMjUxMDczY2UuYmluZFBvcHVwKHBvcHVwXzRhYWI3NjA3YTY3NzQzNzg4YzEwODgxMWYxNzYzM2IxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTFiZGY3MWVmNjQ0YWQyYTU0MmFkOTM1NjBlNTE0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk2MjYxMTI3LCAtNzYuOTg0ODc0MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjM4ZTY2Y2Q0OGNiNGQxMmE4MDNjZTJmNTdhOGJlMTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzAxOWUwYmI1NGY5NGYwN2I1MjM0OWYxNzUwN2UzZjEgPSAkKGA8ZGl2IGlkPSJodG1sX2MwMTllMGJiNTRmOTRmMDdiNTIzNDlmMTc1MDdlM2YxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Sb2xsaW5nY3Jlc3QgQ29tbW9uczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjM4ZTY2Y2Q0OGNiNGQxMmE4MDNjZTJmNTdhOGJlMTAuc2V0Q29udGVudChodG1sX2MwMTllMGJiNTRmOTRmMDdiNTIzNDlmMTc1MDdlM2YxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M1MWJkZjcxZWY2NDRhZDJhNTQyYWQ5MzU2MGU1MTRkLmJpbmRQb3B1cChwb3B1cF82MzhlNjZjZDQ4Y2I0ZDEyYTgwM2NlMmY1N2E4YmUxMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGVhNmUwYzU0ODYzNGE5MGE0OWIyMTcxNTExMmZlNmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMDYwNzE5OTk5OTk5OTYsIC03Ni45MDI4MjY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YxMjgwNmRkZGM1NzQ0NmViYzFlMGE3OTE5MTgxNjBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3YTE0ZjYwYTFjYTQ2ZDZhODI3YTU4YzYwMDk4ZjVlID0gJChgPGRpdiBpZD0iaHRtbF8wN2ExNGY2MGExY2E0NmQ2YTgyN2E1OGM2MDA5OGY1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2l0eSBvZiBHcmVlbmJlbHQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YxMjgwNmRkZGM1NzQ0NmViYzFlMGE3OTE5MTgxNjBlLnNldENvbnRlbnQoaHRtbF8wN2ExNGY2MGExY2E0NmQ2YTgyN2E1OGM2MDA5OGY1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZWE2ZTBjNTQ4NjM0YTkwYTQ5YjIxNzE1MTEyZmU2ZC5iaW5kUG9wdXAocG9wdXBfZjEyODA2ZGRkYzU3NDQ2ZWJjMWUwYTc5MTkxODE2MGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2ZDNkZDQ3ZWE0MzQ2MTZhM2Q4YTk2MjE2NWNkOTdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTY0MTA0OTk5OTk5OTk2LCAtNzYuOTg3MTY5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTQ4YjdmN2Q5NDBiNGZjMmE0Y2EzMjM3YTYzNDYzODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTQyZjU2YWZhOWQ0NGYyN2E5ODBhMTY3ZGExZjViMzIgPSAkKGA8ZGl2IGlkPSJodG1sX2U0MmY1NmFmYTlkNDRmMjdhOTgwYTE2N2RhMWY1YjMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WaWN0b3J5IENyZXN0IFNlbmlvciBBcGFydG1lbnRzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNDhiN2Y3ZDk0MGI0ZmMyYTRjYTMyMzdhNjM0NjM4Ni5zZXRDb250ZW50KGh0bWxfZTQyZjU2YWZhOWQ0NGYyN2E5ODBhMTY3ZGExZjViMzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjZkM2RkNDdlYTQzNDYxNmEzZDhhOTYyMTY1Y2Q5N2UuYmluZFBvcHVwKHBvcHVwX2E0OGI3ZjdkOTQwYjRmYzJhNGNhMzIzN2E2MzQ2Mzg2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YjUzZWNmNzc3NzA0NjlkYjYwYmJhNmNhOGViZjU4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk2NDg5NywgLTc2Ljk4NDczMTAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwYzgzYTg0NjA3ZjRkMmRiZWYyZjYyNzUxMzJmNDgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjN2U0MzIzYjQyODQxYmViNDgxZmMzNjMwYTJmOTNlID0gJChgPGRpdiBpZD0iaHRtbF9jYzdlNDMyM2I0Mjg0MWJlYjQ4MWZjMzYzMGEyZjkzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9sbGluZyBDcmVzdC1DaGlsbHVtIENvbW11bml0eSBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwYzgzYTg0NjA3ZjRkMmRiZWYyZjYyNzUxMzJmNDgwLnNldENvbnRlbnQoaHRtbF9jYzdlNDMyM2I0Mjg0MWJlYjQ4MWZjMzYzMGEyZjkzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YjUzZWNmNzc3NzA0NjlkYjYwYmJhNmNhOGViZjU4ZC5iaW5kUG9wdXAocG9wdXBfNTBjODNhODQ2MDdmNGQyZGJlZjJmNjI3NTEzMmY0ODApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1MTU5MWU2ZWM5ZjRlMDBiZjc1NjkxNGFlZmJlMDU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODc5MzU4ODEsIC03Ni43MzA1MTgwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNzVmODE5ZTg4NWM0ZTJhOWViNjFmOThlNTJmNWFmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNzZmYjA3OGJiNDY0NTZkOWFiYjdiY2VkM2MyNzU1ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjc2ZmIwNzhiYjQ2NDU2ZDlhYmI3YmNlZDNjMjc1NWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVwb24gVGhpcyBSb2NrIENocmlzdGlhbiBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3NWY4MTllODg1YzRlMmE5ZWI2MWY5OGU1MmY1YWYxLnNldENvbnRlbnQoaHRtbF8yNzZmYjA3OGJiNDY0NTZkOWFiYjdiY2VkM2MyNzU1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNTE1OTFlNmVjOWY0ZTAwYmY3NTY5MTRhZWZiZTA1NC5iaW5kUG9wdXAocG9wdXBfMzc1ZjgxOWU4ODVjNGUyYTllYjYxZjk4ZTUyZjVhZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkZTY1M2Y3YWMzZDRiYzJhYmQ4NWYyZGQ1NTBiMWIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTY3MjgyLCAtNzYuODgxNDYwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMTFlZTFmNDVlNTU0YmJiODQ4ZTJmYTY1MjhkZDdmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNjM0ODI3MTFhOGM0OTRlODE2NGFiMDQyODlkOWFjZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzYzNDgyNzExYThjNDk0ZTgxNjRhYjA0Mjg5ZDlhY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZhaXRoIEJhc2VkIENvbGxhYm9yYXRpdmUgT3V0cmVhY2ggR3JvdXA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxMWVlMWY0NWU1NTRiYmI4NDhlMmZhNjUyOGRkN2ZiLnNldENvbnRlbnQoaHRtbF8zNjM0ODI3MTFhOGM0OTRlODE2NGFiMDQyODlkOWFjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZGU2NTNmN2FjM2Q0YmMyYWJkODVmMmRkNTUwYjFiMy5iaW5kUG9wdXAocG9wdXBfMjExZWUxZjQ1ZTU1NGJiYjg0OGUyZmE2NTI4ZGQ3ZmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3ZTZiZDZmNmI2NDQwNDJhMzk0YWM1MDBlY2JmOTNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTY3MjgyLCAtNzYuODgxNDYwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMTUzOTVmNmJiMTM0ZjQ4ODY5MjQwNmY4NDA0ODY2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTExM2IyMWJlOTk0NjMzYmRmM2VhNTk0OWRiYjYxYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTkxMTNiMjFiZTk5NDYzM2JkZjNlYTU5NDlkYmI2MWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoYXJsZXMgQ2Fycm9sbCBNaWRkbGUgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTUzOTVmNmJiMTM0ZjQ4ODY5MjQwNmY4NDA0ODY2NC5zZXRDb250ZW50KGh0bWxfZTkxMTNiMjFiZTk5NDYzM2JkZjNlYTU5NDlkYmI2MWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDdlNmJkNmY2YjY0NDA0MmEzOTRhYzUwMGVjYmY5M2IuYmluZFBvcHVwKHBvcHVwXzAxNTM5NWY2YmIxMzRmNDg4NjkyNDA2Zjg0MDQ4NjY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMzUyYWQ4MjRjODU0NjM1YmJjMmRhZGFjMWJmMjg5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg4NjE4NDAzLCAtNzYuOTAzMzMwNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2ZmMjM1MmJiNTA4NGRmYzg1OWQ2MzQyOGUzNTFmNGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2ZlNGQwYWYzNmIxNGM1ZmFjYzZjYjgwYzEwZTcwYzkgPSAkKGA8ZGl2IGlkPSJodG1sX2NmZTRkMGFmMzZiMTRjNWZhY2M2Y2I4MGMxMGU3MGM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uIG9mIExvdmUgQ2hhcml0aWVzLCBJbmMuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZmYyMzUyYmI1MDg0ZGZjODU5ZDYzNDI4ZTM1MWY0ZC5zZXRDb250ZW50KGh0bWxfY2ZlNGQwYWYzNmIxNGM1ZmFjYzZjYjgwYzEwZTcwYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzM1MmFkODI0Yzg1NDYzNWJiYzJkYWRhYzFiZjI4OWIuYmluZFBvcHVwKHBvcHVwXzdmZjIzNTJiYjUwODRkZmM4NTlkNjM0MjhlMzUxZjRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNjc0NDU5M2I2OGU0M2E2YjQzNjU2NTI0M2ZmMjNmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk2NTA4NiwgLTc2LjkxMDg5MDUwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxY2Q3NmU4OTI0YzQ2NjZhMzNkYWVhZTJiYmJmMzYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliZDA1ZDVhMGMxMDQ0ODhiMWE0MjEzNDhlNDkxY2Y0ID0gJChgPGRpdiBpZD0iaHRtbF85YmQwNWQ1YTBjMTA0NDg4YjFhNDIxMzQ4ZTQ5MWNmNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lsbGlhbSBXaXJ0IE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxY2Q3NmU4OTI0YzQ2NjZhMzNkYWVhZTJiYmJmMzYzLnNldENvbnRlbnQoaHRtbF85YmQwNWQ1YTBjMTA0NDg4YjFhNDIxMzQ4ZTQ5MWNmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNjc0NDU5M2I2OGU0M2E2YjQzNjU2NTI0M2ZmMjNmNy5iaW5kUG9wdXAocG9wdXBfMDFjZDc2ZTg5MjRjNDY2NmEzM2RhZWFlMmJiYmYzNjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4OGNjZTExODFkODRkNjg5YzNhOWY5MjM3MjJiYTkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTY0NzYyLCAtNzYuOTUxNzkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEwYjVjM2FkMjQyODRmYjY4ZTM3ZDc5ZDVhMzcyMDIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1ZTJlZGY0YzViMDQzZTBiMTBiZWM3NzVjOWE4NjJhID0gJChgPGRpdiBpZD0iaHRtbF82NWUyZWRmNGM1YjA0M2UwYjEwYmVjNzc1YzlhODYyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29tbXVuaXR5IE1pbmlzdHJ5IG9mIFBHIENvdW50eTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTBiNWMzYWQyNDI4NGZiNjhlMzdkNzlkNWEzNzIwMjIuc2V0Q29udGVudChodG1sXzY1ZTJlZGY0YzViMDQzZTBiMTBiZWM3NzVjOWE4NjJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q4OGNjZTExODFkODRkNjg5YzNhOWY5MjM3MjJiYTkyLmJpbmRQb3B1cChwb3B1cF8xMGI1YzNhZDI0Mjg0ZmI2OGUzN2Q3OWQ1YTM3MjAyMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmQ5YTgxODFjNTZkNDE2ZjliMWQ5YTA3M2YyMGU2OTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NjAzNjEsIC03Ni45MTE3MDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1MzEyYzgyYjIyNTQwZTg5MDEyMDliY2JiMTc1YWU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkZTBjMDZiMGEwMzQ0ZTFhOGEzMmM0NDIxYWY3YzA4ID0gJChgPGRpdiBpZD0iaHRtbF82ZGUwYzA2YjBhMDM0NGUxYThhMzJjNDQyMWFmN2MwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U293aW5nIEVtcG93ZXJtZW50ICYgRWNvbm9taWMgRGV2ZWxvcG1lbnQsIEluYy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1MzEyYzgyYjIyNTQwZTg5MDEyMDliY2JiMTc1YWU2LnNldENvbnRlbnQoaHRtbF82ZGUwYzA2YjBhMDM0NGUxYThhMzJjNDQyMWFmN2MwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZDlhODE4MWM1NmQ0MTZmOWIxZDlhMDczZjIwZTY5Mi5iaW5kUG9wdXAocG9wdXBfYTUzMTJjODJiMjI1NDBlODkwMTIwOWJjYmIxNzVhZTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzNTVhOGQ0ODBlNjQxN2RiOWQ3MjljYzQyNDI2NGI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTY2MDU4MDAwMDAwMDA0LCAtNzYuOTg2MTU3NDk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q0MTRjOGQ5ZGM1NGFjM2E3YzVlYjMwMWNmNmU5MDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWJkNWY0MjU5NmRjNDUwNGFlMjljYWIzMmRhMzM3YmEgPSAkKGA8ZGl2IGlkPSJodG1sXzliZDVmNDI1OTZkYzQ1MDRhZTI5Y2FiMzJkYTMzN2JhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NZXRyb3BvbGl0YW4gU0RBIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Q0MTRjOGQ5ZGM1NGFjM2E3YzVlYjMwMWNmNmU5MDEuc2V0Q29udGVudChodG1sXzliZDVmNDI1OTZkYzQ1MDRhZTI5Y2FiMzJkYTMzN2JhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzNTVhOGQ0ODBlNjQxN2RiOWQ3MjljYzQyNDI2NGI2LmJpbmRQb3B1cChwb3B1cF83ZDQxNGM4ZDlkYzU0YWMzYTdjNWViMzAxY2Y2ZTkwMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzE2Y2IzNzExNmQyNDYxZjk0ZTMyNmM0ZjdmNjc3MjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NjQ4MzQsIC03Ni45MTc5OTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNjNGM4OGYwNzBmNzRlODk5ZWU4ZjVlMWNjYjhiODc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0ODhmZWEzYWFkNjQ2NDRiMjZlYTNhMmRkZjMxM2M4ID0gJChgPGRpdiBpZD0iaHRtbF9hNDg4ZmVhM2FhZDY0NjQ0YjI2ZWEzYTJkZGYzMTNjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UHJhaXNlIEhvdXNpbmcgTmV0d29yaywgSW5jLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2M0Yzg4ZjA3MGY3NGU4OTllZThmNWUxY2NiOGI4NzQuc2V0Q29udGVudChodG1sX2E0ODhmZWEzYWFkNjQ2NDRiMjZlYTNhMmRkZjMxM2M4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MxNmNiMzcxMTZkMjQ2MWY5NGUzMjZjNGY3ZjY3NzI0LmJpbmRQb3B1cChwb3B1cF8zYzRjODhmMDcwZjc0ZTg5OWVlOGY1ZTFjY2I4Yjg3NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzQ2YWRjYWNjNTBjNDkwZjk0OGJkYzhjYTU2NmJmM2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44MDExODcsIC03Ni45ODYyNTIwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGJjZTg1MzNiMTg0MDRiOWVhZmYzODIwMTA1NDZhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMGIzOGE1NWNiNzA0NzI5YjVhOWRiNDA5ZTVkNDhmZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDBiMzhhNTVjYjcwNDcyOWI1YTlkYjQwOWU1ZDQ4ZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5laWdoYm9ycyBBZ2FpbnN0IFBvdmVydHk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y4YmNlODUzM2IxODQwNGI5ZWFmZjM4MjAxMDU0NmE0LnNldENvbnRlbnQoaHRtbF8wMGIzOGE1NWNiNzA0NzI5YjVhOWRiNDA5ZTVkNDhmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNDZhZGNhY2M1MGM0OTBmOTQ4YmRjOGNhNTY2YmYzZS5iaW5kUG9wdXAocG9wdXBfZjhiY2U4NTMzYjE4NDA0YjllYWZmMzgyMDEwNTQ2YTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxZDdkZmM2MDk2MzQ3ZTJhOGU2M2M1Y2NiMmQwZTM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTY4MDExLCAtNzYuOTcwNzM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4NzZlYWI0OGJjODQxYTJiNzk0ODM5NzcyYjlmOGVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxNWQ1YzQyYjFkMDRkOWNiYTUwM2JlYmUxNmVkYmE3ID0gJChgPGRpdiBpZD0iaHRtbF84MTVkNWM0MmIxZDA0ZDljYmE1MDNiZWJlMTZlZGJhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWdhcGUgQXNzaXN0ZWQgTGl2aW5nPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zODc2ZWFiNDhiYzg0MWEyYjc5NDgzOTc3MmI5ZjhlYS5zZXRDb250ZW50KGh0bWxfODE1ZDVjNDJiMWQwNGQ5Y2JhNTAzYmViZTE2ZWRiYTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDFkN2RmYzYwOTYzNDdlMmE4ZTYzYzVjY2IyZDBlMzkuYmluZFBvcHVwKHBvcHVwXzM4NzZlYWI0OGJjODQxYTJiNzk0ODM5NzcyYjlmOGVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZjVkOTM4ZmY4NmM0Njk0YjE4ZDY0YWVkNGQ4YTMwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjgwMTc5OSwgLTc2Ljk4NDYyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTgwMDg1ZjlhNTk0NTFkYThjNjQ5NDFjZjlmMTViNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDhmM2NjOTBiOWI0Njg1YTFlNWJmYzM3OWY5NWMzYyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTA4ZjNjYzkwYjliNDY4NWExZTViZmMzNzlmOTVjM2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1ycy4gUGhpbGlwcGluZXMgSG9tZSBmb3IgU2VuaW9yIENpdGl6ZW5zPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTgwMDg1ZjlhNTk0NTFkYThjNjQ5NDFjZjlmMTViNC5zZXRDb250ZW50KGh0bWxfYTA4ZjNjYzkwYjliNDY4NWExZTViZmMzNzlmOTVjM2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmY1ZDkzOGZmODZjNDY5NGIxOGQ2NGFlZDRkOGEzMDEuYmluZFBvcHVwKHBvcHVwX2I1ODAwODVmOWE1OTQ1MWRhOGM2NDk0MWNmOWYxNWI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMTM5NDE4YWE5NWQ0NTg1YWZlYWNkYTYwMzUxMmI0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk4MDM1OSwgLTc2Ljc1NzI4NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTE2MGQ4NWExNDJhNDA2MDhiZWM2M2I0ODllODExMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmZmZjg5YTc5MGExNGI2NmJkZDkyZTc5MTUwM2U1NjkgPSAkKGA8ZGl2IGlkPSJodG1sXzZmZmY4OWE3OTBhMTRiNjZiZGQ5MmU3OTE1MDNlNTY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5aaW9uIFByYWlzZSBUYWJlcm5hY2xlIEx1dGhlcmFuIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTE2MGQ4NWExNDJhNDA2MDhiZWM2M2I0ODllODExMjQuc2V0Q29udGVudChodG1sXzZmZmY4OWE3OTBhMTRiNjZiZGQ5MmU3OTE1MDNlNTY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMxMzk0MThhYTk1ZDQ1ODVhZmVhY2RhNjAzNTEyYjRkLmJpbmRQb3B1cChwb3B1cF9hMTYwZDg1YTE0MmE0MDYwOGJlYzYzYjQ4OWU4MTEyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjQ2ZDczMzIxNmQ3NGI0ZDllYzlhNzcxZjg0NThmOGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NDA2NjE0NywgLTc2Ljg5NDgxMTMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5YmFiYzkwYjc1YjRhOTJhNGIxMmU1N2Q0MjUxODBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjYmNkZDA0NDhjNDQ4OGE4ZDhiMTY1MWEzMTkyZWQ0ID0gJChgPGRpdiBpZD0iaHRtbF84Y2JjZGQwNDQ4YzQ0ODhhOGQ4YjE2NTFhMzE5MmVkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGlmZSBCdWlsZGVyczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTliYWJjOTBiNzViNGE5MmE0YjEyZTU3ZDQyNTE4MGIuc2V0Q29udGVudChodG1sXzhjYmNkZDA0NDhjNDQ4OGE4ZDhiMTY1MWEzMTkyZWQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I0NmQ3MzMyMTZkNzRiNGQ5ZWM5YTc3MWY4NDU4ZjhiLmJpbmRQb3B1cChwb3B1cF9hOWJhYmM5MGI3NWI0YTkyYTRiMTJlNTdkNDI1MTgwYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGUxNzAzNjlhYWFmNDlhOGE0ZjcyZGE1YjdmMDQwM2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NjEwNTUsIC03Ni44OTI0MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNThjZTFkNjdiNjFmNDU4OGEwMWEyY2EyZmIyODZmYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBjZWQ2MzE1OTE0NGJjYjljYmQzODdjMTIzYzIwYjEgPSAkKGA8ZGl2IGlkPSJodG1sX2UwY2VkNjMxNTkxNDRiY2I5Y2JkMzg3YzEyM2MyMGIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Xb29kbGFuZCBTcHJpbmdzIEFwYXJ0bWVudDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNThjZTFkNjdiNjFmNDU4OGEwMWEyY2EyZmIyODZmYzQuc2V0Q29udGVudChodG1sX2UwY2VkNjMxNTkxNDRiY2I5Y2JkMzg3YzEyM2MyMGIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlMTcwMzY5YWFhZjQ5YThhNGY3MmRhNWI3ZjA0MDNiLmJpbmRQb3B1cChwb3B1cF81OGNlMWQ2N2I2MWY0NTg4YTAxYTJjYTJmYjI4NmZjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWRiNjkzMTk1MWI1NGQ3NTkxNzI5NTRhZTkzNzI4ZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43OTg1NTk1MiwgLTc2Ljk4MjA4NzM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlNzM5NmQ2YTM1ODRmNzE5OGNmNWY3YzU5NjhiMTRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5OWRiZTJlMDBiNjQ4ZDY4OTk3NDE4ZjIzYmYzN2U1ID0gJChgPGRpdiBpZD0iaHRtbF80OTlkYmUyZTAwYjY0OGQ2ODk5NzQxOGYyM2JmMzdlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIFBhdWwgVU1DPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZTczOTZkNmEzNTg0ZjcxOThjZjVmN2M1OTY4YjE0ZC5zZXRDb250ZW50KGh0bWxfNDk5ZGJlMmUwMGI2NDhkNjg5OTc0MThmMjNiZjM3ZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWRiNjkzMTk1MWI1NGQ3NTkxNzI5NTRhZTkzNzI4ZjAuYmluZFBvcHVwKHBvcHVwX2VlNzM5NmQ2YTM1ODRmNzE5OGNmNWY3YzU5NjhiMTRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OTNiMGYwZTJhMjY0M2UzODlhNGQzMTQyMmQ2ZjM3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg1MTg2Nzc1LCAtNzYuODkxNDYzNjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTAxNTVlZTJlODc1NGE4N2IwYWZmNjgxYjI5MmQ0NzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDM5OGJmYjk5MDVkNGI4MmJkZTk4NDVmMTQyYTNiNzkgPSAkKGA8ZGl2IGlkPSJodG1sX2QzOThiZmI5OTA1ZDRiODJiZGU5ODQ1ZjE0MmEzYjc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NdC4gQ2FsdmFyeSBDYXRob2xpYyBDaHVyY2gsIExhZGllcyBvZiBDaGFyaXR5IEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDE1NWVlMmU4NzU0YTg3YjBhZmY2ODFiMjkyZDQ3Ni5zZXRDb250ZW50KGh0bWxfZDM5OGJmYjk5MDVkNGI4MmJkZTk4NDVmMTQyYTNiNzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTkzYjBmMGUyYTI2NDNlMzg5YTRkMzE0MjJkNmYzNzQuYmluZFBvcHVwKHBvcHVwX2UwMTU1ZWUyZTg3NTRhODdiMGFmZjY4MWIyOTJkNDc2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OTk0YjE2ODExZTM0NTBkODAyZDA5NmYwNDFhNTY1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljc5NjI1NSwgLTc2Ljk3OTMxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNjk4NjJmNGRhZmM0ZTkwYTU4ZmQ5NjgyNTQxYWZiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMmE4ZmI1YjQxZWU0Y2YwOTgyNjE2ZWE2ODdhZmE2OSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTJhOGZiNWI0MWVlNGNmMDk4MjYxNmVhNjg3YWZhNjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZpc2lvbiBvZiBOYXRpb25zPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNjk4NjJmNGRhZmM0ZTkwYTU4ZmQ5NjgyNTQxYWZiMi5zZXRDb250ZW50KGh0bWxfYTJhOGZiNWI0MWVlNGNmMDk4MjYxNmVhNjg3YWZhNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTk5NGIxNjgxMWUzNDUwZDgwMmQwOTZmMDQxYTU2NWIuYmluZFBvcHVwKHBvcHVwX2Y2OTg2MmY0ZGFmYzRlOTBhNThmZDk2ODI1NDFhZmIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjkxNmU5M2Y0Mzk0ZTVhYjNmNzU0YjI0ZGUxOGEzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg2ODQ3MSwgLTc2Ljg5MDQ0MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjY2YjE5YWY2ZGI1NDA4Zjg0NDBmYThiZTRhNTI4NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTJiZTM3ODBkNmRjNDJkMDgxYzJmNDBiMjgzMTUxZWUgPSAkKGA8ZGl2IGlkPSJodG1sXzkyYmUzNzgwZDZkYzQyZDA4MWMyZjQwYjI4MzE1MWVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LcmVheW9sYSBLaWRzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNjZiMTlhZjZkYjU0MDhmODQ0MGZhOGJlNGE1Mjg0YS5zZXRDb250ZW50KGh0bWxfOTJiZTM3ODBkNmRjNDJkMDgxYzJmNDBiMjgzMTUxZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDY5MTZlOTNmNDM5NGU1YWIzZjc1NGIyNGRlMThhM2MuYmluZFBvcHVwKHBvcHVwX2I2NmIxOWFmNmRiNTQwOGY4NDQwZmE4YmU0YTUyODRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNTVlNzZmNzM5YmU0MzRmYTMwN2Q0Y2ZkNzBhMWIyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg2ODQ3MSwgLTc2Ljg5MDQ0MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGI3NTUxN2QzZjliNDNiZTg5Y2M4OTQ4MjZhODE3NzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDc3ZDdiNjQ0MGM4NGJkZDkxOWM4ZTczMTJjZDA5M2YgPSAkKGA8ZGl2IGlkPSJodG1sXzQ3N2Q3YjY0NDBjODRiZGQ5MTljOGU3MzEyY2QwOTNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYWxrZXIgTWlsbCBDb21tdW5pdHkgRGV2ZWxvcG1lbnQgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjc1NTE3ZDNmOWI0M2JlODljYzg5NDgyNmE4MTc3Ni5zZXRDb250ZW50KGh0bWxfNDc3ZDdiNjQ0MGM4NGJkZDkxOWM4ZTczMTJjZDA5M2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjU1ZTc2ZjczOWJlNDM0ZmEzMDdkNGNmZDcwYTFiMjUuYmluZFBvcHVwKHBvcHVwX2RiNzU1MTdkM2Y5YjQzYmU4OWNjODk0ODI2YTgxNzc2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOTE4NDY4OGY0M2Q0Zjg3OTk5NTA0MDkwNGVhNTY0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg2OTQ4OCwgLTc2Ljg5MDg1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTJkY2Q0YWNkNWY0MjFiYmNkZDMwM2M0NDAxYmM5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYmQzNDM2Njk0NmE0ZjA3OTc1OWNjMTc4MmI4MDYyMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMmJkMzQzNjY5NDZhNGYwNzk3NTljYzE3ODJiODA2MjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZhaXRoIERlbGl2ZXJhbmNlIFRlbXBsZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2EyZGNkNGFjZDVmNDIxYmJjZGQzMDNjNDQwMWJjOWUuc2V0Q29udGVudChodG1sXzJiZDM0MzY2OTQ2YTRmMDc5NzU5Y2MxNzgyYjgwNjIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM5MTg0Njg4ZjQzZDRmODc5OTk1MDQwOTA0ZWE1NjRjLmJpbmRQb3B1cChwb3B1cF83YTJkY2Q0YWNkNWY0MjFiYmNkZDMwM2M0NDAxYmM5ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmMzNzc1N2FhMzVjNDc0YmIxMTM4MjIzOTBjMmEyOGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MDA5MTU5OTk5OTk5OTUsIC03Ni45MDM1MTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1ZDY5Nzc1NmNjYzQwZGJhMDhlM2UwZDE0ZTVjMzY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxOTA4YTI4MDE4NzQxNjZhMGEwZmI0NmQ2ODFlNjEwID0gJChgPGRpdiBpZD0iaHRtbF80MTkwOGEyODAxODc0MTY2YTBhMGZiNDZkNjgxZTYxMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGxlYXNhbnQgSG9tZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1ZDY5Nzc1NmNjYzQwZGJhMDhlM2UwZDE0ZTVjMzY0LnNldENvbnRlbnQoaHRtbF80MTkwOGEyODAxODc0MTY2YTBhMGZiNDZkNjgxZTYxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YzM3NzU3YWEzNWM0NzRiYjExMzgyMjM5MGMyYTI4YS5iaW5kUG9wdXAocG9wdXBfODVkNjk3NzU2Y2NjNDBkYmEwOGUzZTBkMTRlNWMzNjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzNzdkMmIwMDhkYjQwMWM5MTI5NGYzMGQ3NzcyZDM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTU3NjQzLCAtNzYuODk4MTU1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYzEyM2FkNDQ0MWQ0ZWYyYTdjY2U0NjBiMmQzNDBmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTQzMDM0Y2ZmMDI0MTg5OWUzYzU0NThhNDE1NDU5NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWU0MzAzNGNmZjAyNDE4OTllM2M1NDU4YTQxNTQ1OTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlYWNvbiBIZWlnaHRzIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBjMTIzYWQ0NDQxZDRlZjJhN2NjZTQ2MGIyZDM0MGZmLnNldENvbnRlbnQoaHRtbF8xZTQzMDM0Y2ZmMDI0MTg5OWUzYzU0NThhNDE1NDU5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMzc3ZDJiMDA4ZGI0MDFjOTEyOTRmMzBkNzc3MmQzOS5iaW5kUG9wdXAocG9wdXBfMGMxMjNhZDQ0NDFkNGVmMmE3Y2NlNDYwYjJkMzQwZmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmMjg5MTU1MWM1YzQ5YmVhZDdhNzdkNGI4YTQwODE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTc3MDA4NzUsIC03Ni45OTIzMzEwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODNlMzczYjA2YjE0YTlkYmYxYTFlN2E5MDFhYjE0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMTM5NmEzMzNlMjc0YjljODgyOWM3ZDhjZTIwOTkyYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTEzOTZhMzMzZTI3NGI5Yzg4MjljN2Q4Y2UyMDk5MmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVkdWNhcmUgU3VwcG9ydCBTZXJ2aWNlczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjgzZTM3M2IwNmIxNGE5ZGJmMWExZTdhOTAxYWIxNGEuc2V0Q29udGVudChodG1sX2UxMzk2YTMzM2UyNzRiOWM4ODI5YzdkOGNlMjA5OTJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFmMjg5MTU1MWM1YzQ5YmVhZDdhNzdkNGI4YTQwODE2LmJpbmRQb3B1cChwb3B1cF82ODNlMzczYjA2YjE0YTlkYmYxYTFlN2E5MDFhYjE0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM0NzgxYzA5M2Q3NDM5NmIyMThiMGNhYWUxYTE3ZWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NzUwODc3NywgLTc3LjAxMDQ0ODQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlODQ3NWIyMjE3ODQ3NDc4ZWNkMDhjNDVlZDIwNGI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhMWYwMmYyNGNhOTQ3NjQ4MjllYmIwMzMzZDJmMDlkID0gJChgPGRpdiBpZD0iaHRtbF9mYTFmMDJmMjRjYTk0NzY0ODI5ZWJiMDMzM2QyZjA5ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9udGdvbWVyeSBDb3VudHkgQnJvd24gQmFnIFByb2dyYW0gLS0gV2FyZWhvdXNlIFRyYW5zZmVyczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGU4NDc1YjIyMTc4NDc0NzhlY2QwOGM0NWVkMjA0YjYuc2V0Q29udGVudChodG1sX2ZhMWYwMmYyNGNhOTQ3NjQ4MjllYmIwMzMzZDJmMDlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzczNDc4MWMwOTNkNzQzOTZiMjE4YjBjYWFlMWExN2VmLmJpbmRQb3B1cChwb3B1cF9kZTg0NzViMjIxNzg0NzQ3OGVjZDA4YzQ1ZWQyMDRiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTFkMTQ3N2Q5ZDdjNGYyMDg1NjAyYWE1YmI2OTJmNTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NzUwODc3NywgLTc3LjAxMDQ0ODQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzMDVkZTg3MTQ0NTQyYmZhMDJlMzk4MDJjZTYyOTQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0YTBkMThiNmYzNjQzM2ZiNDFkN2FjNzUwYzFkMjEyID0gJChgPGRpdiBpZD0iaHRtbF83NGEwZDE4YjZmMzY0MzNmYjQxZDdhYzc1MGMxZDIxMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmljdG9yeSBUb3dlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTMwNWRlODcxNDQ1NDJiZmEwMmUzOTgwMmNlNjI5NDIuc2V0Q29udGVudChodG1sXzc0YTBkMThiNmYzNjQzM2ZiNDFkN2FjNzUwYzFkMjEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkxZDE0NzdkOWQ3YzRmMjA4NTYwMmFhNWJiNjkyZjU4LmJpbmRQb3B1cChwb3B1cF9lMzA1ZGU4NzE0NDU0MmJmYTAyZTM5ODAyY2U2Mjk0MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjc3ZjA0ODlkMDlmNDcwYWJmNmI1NTQ0MWUwNjQwZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMDkxMjYwNCwgLTc2Ljk4NDA2NTIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmYTIyMWNhM2RiOTQzMWQ5NWIwMzM1NzhmOTE4ZGY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjMzE2NGJmNThjYTQxYTlhODQxNTE2ZjliM2I1NGY1ID0gJChgPGRpdiBpZD0iaHRtbF83YzMxNjRiZjU4Y2E0MWE5YTg0MTUxNmY5YjNiNTRmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Sm9Bbm4gTGVMZWNrIEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZmEyMjFjYTNkYjk0MzFkOTViMDMzNTc4ZjkxOGRmNC5zZXRDb250ZW50KGh0bWxfN2MzMTY0YmY1OGNhNDFhOWE4NDE1MTZmOWIzYjU0ZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjc3ZjA0ODlkMDlmNDcwYWJmNmI1NTQ0MWUwNjQwZDMuYmluZFBvcHVwKHBvcHVwXzhmYTIyMWNhM2RiOTQzMWQ5NWIwMzM1NzhmOTE4ZGY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYTJiOGU0YzBjYTE0ZWYzOWE5ZTZiZmVjMTk3ZWVkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAwODQ4NTczLCAtNzYuOTg0MTM5MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDQzYjQzZmI1NWU3NDM4ZGJjNDc4ZWEzNjAzOWRhNmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODNlNThmYjcyNzllNGI2OTk5MjE2YzExNzgyOWMxYTggPSAkKGA8ZGl2IGlkPSJodG1sXzgzZTU4ZmI3Mjc5ZTRiNjk5OTIxNmMxMTc4MjljMWE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WaWN0b3J5IE9ha3M8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0M2I0M2ZiNTVlNzQzOGRiYzQ3OGVhMzYwMzlkYTZlLnNldENvbnRlbnQoaHRtbF84M2U1OGZiNzI3OWU0YjY5OTkyMTZjMTE3ODI5YzFhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYTJiOGU0YzBjYTE0ZWYzOWE5ZTZiZmVjMTk3ZWVkNy5iaW5kUG9wdXAocG9wdXBfMDQzYjQzZmI1NWU3NDM4ZGJjNDc4ZWEzNjAzOWRhNmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxZWJiMDc5YzNmYzQ0OTA4YWJmNmVkOThhMDZmYmEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODU5MDIxMDAwMDAwMDA2LCAtNzYuODgwODkzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODlhZGMyMzQ0NmI0MjFjYjZkMTg4ZGE1NWRiNGZkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjA5NWZmNTNiN2U0MGY1YjFlN2ZlNjdjZDhhMzgwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNWYwOTVmZjUzYjdlNDBmNWIxZTdmZTY3Y2Q4YTM4MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZpcnN0IEJhcHRpc3QgQ2h1cmNoIG9mIERpc3RyaWN0IEhlaWdodHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4OWFkYzIzNDQ2YjQyMWNiNmQxODhkYTU1ZGI0ZmRkLnNldENvbnRlbnQoaHRtbF81ZjA5NWZmNTNiN2U0MGY1YjFlN2ZlNjdjZDhhMzgwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMWViYjA3OWMzZmM0NDkwOGFiZjZlZDk4YTA2ZmJhMy5iaW5kUG9wdXAocG9wdXBfMTg5YWRjMjM0NDZiNDIxY2I2ZDE4OGRhNTVkYjRmZGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhYTUxODU1NGE2YTQ1ODZhMjQ3NWYxNGNmNWE3MGZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNzg4ODEyLCAtNzYuODQwNTUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzNGY5NTkyYzVhYTQyZmM4NmYwMWE3YzJhMTVlNzcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjYjg4MWUzODIxODRjN2ZhOWQwMDdlNDhjZjVhNTk5ID0gJChgPGRpdiBpZD0iaHRtbF9lY2I4ODFlMzgyMTg0YzdmYTlkMDA3ZTQ4Y2Y1YTU5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWNEb3VnYWwgSW50ZXJuYXRpb25hbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzM0Zjk1OTJjNWFhNDJmYzg2ZjAxYTdjMmExNWU3NzAuc2V0Q29udGVudChodG1sX2VjYjg4MWUzODIxODRjN2ZhOWQwMDdlNDhjZjVhNTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhhYTUxODU1NGE2YTQ1ODZhMjQ3NWYxNGNmNWE3MGZjLmJpbmRQb3B1cChwb3B1cF8zMzRmOTU5MmM1YWE0MmZjODZmMDFhN2MyYTE1ZTc3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzU1ZGU5NTY3OTBlNDExNmJiZGVmMDRmNTQwMDc0NzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NjE0OTUsIC03Ni44ODU4NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWJiMjhjMWUwMDRiNGFiMThhYmM5MmYwODgyNDI5ZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTVhNzM0MDI3MzdlNGRlOGE5OGU5MWU4ZThiOTcyMzUgPSAkKGA8ZGl2IGlkPSJodG1sXzE1YTczNDAyNzM3ZTRkZThhOThlOTFlOGU4Yjk3MjM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db21tdW5pdHkgQmlibGUgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViYjI4YzFlMDA0YjRhYjE4YWJjOTJmMDg4MjQyOWU0LnNldENvbnRlbnQoaHRtbF8xNWE3MzQwMjczN2U0ZGU4YTk4ZTkxZThlOGI5NzIzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNTVkZTk1Njc5MGU0MTE2YmJkZWYwNGY1NDAwNzQ3NS5iaW5kUG9wdXAocG9wdXBfNWJiMjhjMWUwMDRiNGFiMThhYmM5MmYwODgyNDI5ZTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3YWM4NWE4OWU2NjQwZjg4NDNmMDNjY2MyMjNlZDViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTg0MjEzMjQsIC03Ni45ODg1MTY0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWY5MTM5YmU3OGQ0NTY2YjU4YmFmOTBjNDFhNTVkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MmQ2MTYxYWFlNTE0MmRlOTRmODgwZTBiNjY0OWUwMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzJkNjE2MWFhZTUxNDJkZTk0Zjg4MGUwYjY2NDllMDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBIYW1wc2hpcmUgU3BhbmlzaCBTREE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlZjkxMzliZTc4ZDQ1NjZiNThiYWY5MGM0MWE1NWQ1LnNldENvbnRlbnQoaHRtbF83MmQ2MTYxYWFlNTE0MmRlOTRmODgwZTBiNjY0OWUwMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82N2FjODVhODllNjY0MGY4ODQzZjAzY2NjMjIzZWQ1Yi5iaW5kUG9wdXAocG9wdXBfY2VmOTEzOWJlNzhkNDU2NmI1OGJhZjkwYzQxYTU1ZDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiNmVlNzRkZjllZjRkMTc4NzgzMTE0NmVhOGU5Yjc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTQ4MTk0MTEsIC03Ni44ODU2NjE0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZDA0NTkzY2ZjYTM0ZjNlYWU3NTBmNmMxNTIxMGJmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTRiNWNkMmQ5NTQ0N2MxODQ3MGQ3NDBiMWVkMTA2MCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWE0YjVjZDJkOTU0NDdjMTg0NzBkNzQwYjFlZDEwNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhbWIgb2YgR29kPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZDA0NTkzY2ZjYTM0ZjNlYWU3NTBmNmMxNTIxMGJmNy5zZXRDb250ZW50KGh0bWxfOWE0YjVjZDJkOTU0NDdjMTg0NzBkNzQwYjFlZDEwNjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGI2ZWU3NGRmOWVmNGQxNzg3ODMxMTQ2ZWE4ZTliNzguYmluZFBvcHVwKHBvcHVwXzlkMDQ1OTNjZmNhMzRmM2VhZTc1MGY2YzE1MjEwYmY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDczMjgwZmQ5NDA0Yzg5OWVmMjdmYTc2YjU4MzIwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk4Mjc5Nzk5OTk5OTk5NSwgLTc2Ljk1NDA1NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQwYjI1ZDg4ZTZlNGRlOWE1MjA4ODlhOTg2MDAxNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjg0OTZhNDc1NDU3NGViZThkNzE0ZWViYTljYTZhNGEgPSAkKGA8ZGl2IGlkPSJodG1sXzY4NDk2YTQ3NTQ1NzRlYmU4ZDcxNGVlYmE5Y2E2YTRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gTWFyayBUaGUgRXZhbmdlbGlzdCBDYXRob2xpYyBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0MGIyNWQ4OGU2ZTRkZTlhNTIwODg5YTk4NjAwMTc2LnNldENvbnRlbnQoaHRtbF82ODQ5NmE0NzU0NTc0ZWJlOGQ3MTRlZWJhOWNhNmE0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDczMjgwZmQ5NDA0Yzg5OWVmMjdmYTc2YjU4MzIwMS5iaW5kUG9wdXAocG9wdXBfMzQwYjI1ZDg4ZTZlNGRlOWE1MjA4ODlhOTg2MDAxNzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmNzljNTgxODA5MTRkMWRhMjdhZjQzNTQzZTIyZmFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTAyNjE3LCAtNzYuODc3NzYxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYjA0YmNmZDc2MzY0Y2FmODYxODQ2Y2YzYjc3ZDFhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MThjMjRiOTg2N2E0ZmMzYTU0MDc5YzM4ZjUwNzJmNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTE4YzI0Yjk4NjdhNGZjM2E1NDA3OWMzOGY1MDcyZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkphY2sgTWVyY3ksIEluYy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FiMDRiY2ZkNzYzNjRjYWY4NjE4NDZjZjNiNzdkMWFkLnNldENvbnRlbnQoaHRtbF81MThjMjRiOTg2N2E0ZmMzYTU0MDc5YzM4ZjUwNzJmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZjc5YzU4MTgwOTE0ZDFkYTI3YWY0MzU0M2UyMmZhZS5iaW5kUG9wdXAocG9wdXBfYWIwNGJjZmQ3NjM2NGNhZjg2MTg0NmNmM2I3N2QxYWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA4ZWY4ZjMxNDQwYTQ3ZTM4YzlmNTE3YjlmODMxZmVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTkzNDYzLCAtNzYuODIwMTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2NjJlZTdiNjYxNjQxYjY4ZDk0OGYxYjhiNTNmYjI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhMWExOTQxYjQ1OTQxMGNhOTQwMTJiYTE1N2Y4MmIxID0gJChgPGRpdiBpZD0iaHRtbF8xYTFhMTk0MWI0NTk0MTBjYTk0MDEyYmExNTdmODJiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q0FDIEJldGhlbCBGZWxsb3dzaGlwIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzY2MmVlN2I2NjE2NDFiNjhkOTQ4ZjFiOGI1M2ZiMjQuc2V0Q29udGVudChodG1sXzFhMWExOTQxYjQ1OTQxMGNhOTQwMTJiYTE1N2Y4MmIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA4ZWY4ZjMxNDQwYTQ3ZTM4YzlmNTE3YjlmODMxZmVlLmJpbmRQb3B1cChwb3B1cF9jNjYyZWU3YjY2MTY0MWI2OGQ5NDhmMWI4YjUzZmIyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDQ1ZmQ5NzViMzkwNGUxYmJmZjgwZjIxNDY3NjlhNzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NDg4ODYsIC03Ni44ODU2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmFjNGZlNTliMTg1NDA1ZGE2ZTQzOGI3NjM5OWMwNTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzA4YmVmNTQ4MzlkNDRjNmEyM2JiOTAxNWIxMDdkZWMgPSAkKGA8ZGl2IGlkPSJodG1sX2MwOGJlZjU0ODM5ZDQ0YzZhMjNiYjkwMTViMTA3ZGVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYmVuZXplciBDaHVyY2ggb2YgR29kPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YWM0ZmU1OWIxODU0MDVkYTZlNDM4Yjc2Mzk5YzA1MC5zZXRDb250ZW50KGh0bWxfYzA4YmVmNTQ4MzlkNDRjNmEyM2JiOTAxNWIxMDdkZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDQ1ZmQ5NzViMzkwNGUxYmJmZjgwZjIxNDY3NjlhNzAuYmluZFBvcHVwKHBvcHVwXzZhYzRmZTU5YjE4NTQwNWRhNmU0MzhiNzYzOTljMDUwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YThkZGE0ZjcxMjU0NjdlYjI0ZGIzODJmNzk5YjI4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk4MzYyNTI1LCAtNzcuMDIwMjQ4NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzYzNWRhMjNkYWRjNGNmYTkzNGFjMDdjMWMyYjRjYjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODFlNDJlYjhkYzZhNGY3MDk2ZDE3YzFhMWEzYWQ2YjAgPSAkKGA8ZGl2IGlkPSJodG1sXzgxZTQyZWI4ZGM2YTRmNzA5NmQxN2MxYTFhM2FkNmIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb250Z29tZXJ5IENvbGxlZ2UgLSBUYWtvbWEgUGFyazwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzYzNWRhMjNkYWRjNGNmYTkzNGFjMDdjMWMyYjRjYjMuc2V0Q29udGVudChodG1sXzgxZTQyZWI4ZGM2YTRmNzA5NmQxN2MxYTFhM2FkNmIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZhOGRkYTRmNzEyNTQ2N2ViMjRkYjM4MmY3OTliMjg0LmJpbmRQb3B1cChwb3B1cF83NjM1ZGEyM2RhZGM0Y2ZhOTM0YWMwN2MxYzJiNGNiMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmJiOGUxOTkzMjg3NDExNmExOGFhZTY0ZjNjNGFjYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43MDEwNzEsIC03Ni44NzQ1NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTU1YTFmNDY5YzhmNDZlMjllZWUyOGEyMjA4ZTlmYmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGEzNjU0ODRlZmQxNGMyOTk5N2I3YTcyYzNmNGRkZTEgPSAkKGA8ZGl2IGlkPSJodG1sX2RhMzY1NDg0ZWZkMTRjMjk5OTdiN2E3MmMzZjRkZGUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXcgTmF0aW9ucyBXb3JzaGlwIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1NWExZjQ2OWM4ZjQ2ZTI5ZWVlMjhhMjIwOGU5ZmJlLnNldENvbnRlbnQoaHRtbF9kYTM2NTQ4NGVmZDE0YzI5OTk3YjdhNzJjM2Y0ZGRlMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYmI4ZTE5OTMyODc0MTE2YTE4YWFlNjRmM2M0YWNhMC5iaW5kUG9wdXAocG9wdXBfYTU1YTFmNDY5YzhmNDZlMjllZWUyOGEyMjA4ZTlmYmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkNzg3ZDUwNjdkYzQ0M2Y5OTVhYzE1YTk2MzRiYWQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTg3MTA3NjIsIC03Ny4wOTYwMjQ5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzk3MzgzNjIzOGE0YmQ4OWU2MGVhNjA4ZWM0NWM3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zN2FlYjc2OWJjMDI0NTVhYmFiMGFiNjZiZjBkN2JkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzdhZWI3NjliYzAyNDU1YWJhYjBhYjY2YmYwZDdiZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJldGhlc2RhIENhcmVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzk3MzgzNjIzOGE0YmQ4OWU2MGVhNjA4ZWM0NWM3ZS5zZXRDb250ZW50KGh0bWxfMzdhZWI3NjliYzAyNDU1YWJhYjBhYjY2YmYwZDdiZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2Q3ODdkNTA2N2RjNDQzZjk5NWFjMTVhOTYzNGJhZDguYmluZFBvcHVwKHBvcHVwX2UzOTczODM2MjM4YTRiZDg5ZTYwZWE2MDhlYzQ1YzdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMDE3ZjliMmNhMGQ0Njc5YjVlZTlkMTFhOTcwZGViMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk4MDgwOSwgLTc2Ljg3MTAyOTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjEwZmVkNjVmNzQxNDA0NWJlZWI5MjY4MGNlNTcwZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTAxOGRhYjY4ZThlNGE1OWE3ZmQyYzI0NTEzNTFlNTggPSAkKGA8ZGl2IGlkPSJodG1sXzkwMThkYWI2OGU4ZTRhNTlhN2ZkMmMyNDUxMzUxZTU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgU2FtYXJpdGFuIFdheTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjEwZmVkNjVmNzQxNDA0NWJlZWI5MjY4MGNlNTcwZTAuc2V0Q29udGVudChodG1sXzkwMThkYWI2OGU4ZTRhNTlhN2ZkMmMyNDUxMzUxZTU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QwMTdmOWIyY2EwZDQ2NzliNWVlOWQxMWE5NzBkZWIwLmJpbmRQb3B1cChwb3B1cF8yMTBmZWQ2NWY3NDE0MDQ1YmVlYjkyNjgwY2U1NzBlMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjRhY2Y2ZDg0OGQ4NDFhZDhjYzg2YTkxNTVmYzM0N2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MTg2ODkyLCAtNzYuODcxNTg4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMGE0ODY2YjZmOTk0MTk0OGNiYjUwYmEwODZmZWU4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjJlZTYwMjc5ZDE0ZGVjYjg5NmJkNmUyMDZlZGIzMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTYyZWU2MDI3OWQxNGRlY2I4OTZiZDZlMjA2ZWRiMzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZpY3RvcnkgSG91c2Ugb2YgUGFsbWVyIFBhcms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwYTQ4NjZiNmY5OTQxOTQ4Y2JiNTBiYTA4NmZlZTgwLnNldENvbnRlbnQoaHRtbF8xNjJlZTYwMjc5ZDE0ZGVjYjg5NmJkNmUyMDZlZGIzMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NGFjZjZkODQ4ZDg0MWFkOGNjODZhOTE1NWZjMzQ3Yy5iaW5kUG9wdXAocG9wdXBfMzBhNDg2NmI2Zjk5NDE5NDhjYmI1MGJhMDg2ZmVlODApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiMWIyNjIyODI5ODQ4Y2RiNDdjYjdjMzkzMjhkZGM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTEyNzY2NTksIC03Ni44NzE1NDI0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MWY3YWQwOWFiOGE0OTc0ODkxZTljMWJlYzBmYjQyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNWViZDZkMTJiNTg0NGM5YTJmNjVkOTU2ZTFhMDA2ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjVlYmQ2ZDEyYjU4NDRjOWEyZjY1ZDk1NmUxYTAwNmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbGxpYW0gUGFjYSBFbGVtZW50YXJ5IFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDFmN2FkMDlhYjhhNDk3NDg5MWU5YzFiZWMwZmI0MmEuc2V0Q29udGVudChodG1sX2I1ZWJkNmQxMmI1ODQ0YzlhMmY2NWQ5NTZlMWEwMDZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiMWIyNjIyODI5ODQ4Y2RiNDdjYjdjMzkzMjhkZGM1LmJpbmRQb3B1cChwb3B1cF80MWY3YWQwOWFiOGE0OTc0ODkxZTljMWJlYzBmYjQyYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmY0MWYzZDcxYTU3NDUxZjhlZWEzY2I0MTQ4Mzc4MDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NDIzMjA1LCAtNzYuODcwODIzODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTJmNjJmZDkwM2EyNDI0YmE3MTI0Y2E1N2I5MDkzODcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDZhMmM3NzUyNWIzNDYxOGJkMDk4MTI0ZTlmY2U1Y2IgPSAkKGA8ZGl2IGlkPSJodG1sXzQ2YTJjNzc1MjViMzQ2MThiZDA5ODEyNGU5ZmNlNWNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BZ2FwZSBPdXRyZWFjaCBNaW5pc3RyaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MmY2MmZkOTAzYTI0MjRiYTcxMjRjYTU3YjkwOTM4Ny5zZXRDb250ZW50KGh0bWxfNDZhMmM3NzUyNWIzNDYxOGJkMDk4MTI0ZTlmY2U1Y2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmY0MWYzZDcxYTU3NDUxZjhlZWEzY2I0MTQ4Mzc4MDYuYmluZFBvcHVwKHBvcHVwXzUyZjYyZmQ5MDNhMjQyNGJhNzEyNGNhNTdiOTA5Mzg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNDQ1NjVjOWQ1NjA0YzZmOWQzY2RkZjExYzRmMDEwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg0NzE4MDA1LCAtNzYuODcyMDI0ODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2YyNzdhODNhNDAwNDE4YTg1ZGRiYzIwYzJhZWFlMzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGQ4YzQ1OGE1ZGQyNGFmM2IzMzM2ZTdmMjg1NWFhNWQgPSAkKGA8ZGl2IGlkPSJodG1sXzBkOGM0NThhNWRkMjRhZjNiMzMzNmU3ZjI4NTVhYTVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ObyBMaW1pdHMgT3V0cmVhY2ggTWluaXN0cmllczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2YyNzdhODNhNDAwNDE4YTg1ZGRiYzIwYzJhZWFlMzcuc2V0Q29udGVudChodG1sXzBkOGM0NThhNWRkMjRhZjNiMzMzNmU3ZjI4NTVhYTVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE0NDU2NWM5ZDU2MDRjNmY5ZDNjZGRmMTFjNGYwMTA3LmJpbmRQb3B1cChwb3B1cF83ZjI3N2E4M2E0MDA0MThhODVkZGJjMjBjMmFlYWUzNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDY4ZWJiNTEyODJmNDkyMmI0ZmM0YmIwMGY0MGZlODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44ODkxMjgyMiwgLTc2Ljg3MTY2MDMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyNmRlY2VmM2U1MDQzYTI4MDhiNjE5YzE5NGI1MDM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyMTMyMjBhYWJlNjRlZmRhNGNiM2Y1ZTA1NDY5MzBlID0gJChgPGRpdiBpZD0iaHRtbF9hMjEzMjIwYWFiZTY0ZWZkYTRjYjNmNWUwNTQ2OTMwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGl0dGxlIERhdmlkIEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMjZkZWNlZjNlNTA0M2EyODA4YjYxOWMxOTRiNTAzOS5zZXRDb250ZW50KGh0bWxfYTIxMzIyMGFhYmU2NGVmZGE0Y2IzZjVlMDU0NjkzMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDY4ZWJiNTEyODJmNDkyMmI0ZmM0YmIwMGY0MGZlODUuYmluZFBvcHVwKHBvcHVwX2EyNmRlY2VmM2U1MDQzYTI4MDhiNjE5YzE5NGI1MDM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTdhYWViODFiZDI0OThlYjY3ODU4ZjU3NTJhNDU1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg0NzE1MzExLCAtNzYuODcxNjQ1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzI2MWJhOWFlOTJjNDUxODhmNzEzMWY3MjRjNzVmNDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTg1ODVmMTU5MTIyNDY3Mzk3YzI1OWZmNDU0YjA1MWIgPSAkKGA8ZGl2IGlkPSJodG1sX2E4NTg1ZjE1OTEyMjQ2NzM5N2MyNTlmZjQ1NGIwNTFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaXR5IG9mIERhdmlkIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyNjFiYTlhZTkyYzQ1MTg4ZjcxMzFmNzI0Yzc1ZjQwLnNldENvbnRlbnQoaHRtbF9hODU4NWYxNTkxMjI0NjczOTdjMjU5ZmY0NTRiMDUxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NTdhYWViODFiZDI0OThlYjY3ODU4ZjU3NTJhNDU1Mi5iaW5kUG9wdXAocG9wdXBfYzI2MWJhOWFlOTJjNDUxODhmNzEzMWY3MjRjNzVmNDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzYzcyYjA0ZGViMDQ5NjRiZGYwNDI4ZmNmMTZmYWEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDgwOTc5LCAtNzYuODY4MjIxNDk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmIxZmFkOWIyZmE1NGZmNTgxZmY4MmIxYzY2MWZlZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWZmYzFkOTFkNmIzNDM1Mzg0MDMyYTFkNzhmYWMwMGMgPSAkKGA8ZGl2IGlkPSJodG1sXzVmZmMxZDkxZDZiMzQzNTM4NDAzMmExZDc4ZmFjMDBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYXVyZWwgTGFrZXMgQXBhcnRtZW50czwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmIxZmFkOWIyZmE1NGZmNTgxZmY4MmIxYzY2MWZlZDYuc2V0Q29udGVudChodG1sXzVmZmMxZDkxZDZiMzQzNTM4NDAzMmExZDc4ZmFjMDBjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IzYzcyYjA0ZGViMDQ5NjRiZGYwNDI4ZmNmMTZmYWEzLmJpbmRQb3B1cChwb3B1cF82YjFmYWQ5YjJmYTU0ZmY1ODFmZjgyYjFjNjYxZmVkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWU2YjFmYTJmMzdkNGZjYTgxMWI5OTE0ZTBmM2IzOTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NDYzNDksIC03Ni44Njg1MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTM3MDkzN2I5NjA0NDEyYWIwNTZjZGY2ZTUxZTIxY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWQyNWExYmNmNTY4NGY1Njg3OGVkMjNjY2NjZTgzNTUgPSAkKGA8ZGl2IGlkPSJodG1sXzlkMjVhMWJjZjU2ODRmNTY4NzhlZDIzY2NjY2U4MzU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GYWl0aCBVbml0ZWQgTWluaXN0cmllcyBPdXRyZWFjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTM3MDkzN2I5NjA0NDEyYWIwNTZjZGY2ZTUxZTIxY2Euc2V0Q29udGVudChodG1sXzlkMjVhMWJjZjU2ODRmNTY4NzhlZDIzY2NjY2U4MzU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlNmIxZmEyZjM3ZDRmY2E4MTFiOTkxNGUwZjNiMzk1LmJpbmRQb3B1cChwb3B1cF8xMzcwOTM3Yjk2MDQ0MTJhYjA1NmNkZjZlNTFlMjFjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmNlYzYxZDcwOTIwNGQwYzkzNGQ0NmQ4N2Q0MjJmMGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45MjE1MDQ3MSwgLTc2Ljg2OTg5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTJkOGI5Yjc3MThlNGY1YThiODM1YWFkZjRmZTEzMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMThlNmE1MTMwYjdhNDBkMzk3NWMxODY4ODA3MjliYjcgPSAkKGA8ZGl2IGlkPSJodG1sXzE4ZTZhNTEzMGI3YTQwZDM5NzVjMTg2ODgwNzI5YmI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FeGNlbCBBY2FkZW15PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MmQ4YjliNzcxOGU0ZjVhOGI4MzVhYWRmNGZlMTMxMi5zZXRDb250ZW50KGh0bWxfMThlNmE1MTMwYjdhNDBkMzk3NWMxODY4ODA3MjliYjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmNlYzYxZDcwOTIwNGQwYzkzNGQ0NmQ4N2Q0MjJmMGYuYmluZFBvcHVwKHBvcHVwXzUyZDhiOWI3NzE4ZTRmNWE4YjgzNWFhZGY0ZmUxMzEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZjJkNjA1OGZjNWM0ZDEyOGQ3NDgxYzE2MGRlOWQ5NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjE2OTc2Nzk1LCAtNzcuMTYxNzA4NjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWZhM2Y5N2Y0NTE1NDU2YjlkNjE1Y2ExNjRlY2M5OWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDc2YzBmNTdmNGIzNDhiMmJlZDBiMTYxNzA3YWE5YmQgPSAkKGA8ZGl2IGlkPSJodG1sXzQ3NmMwZjU3ZjRiMzQ4YjJiZWQwYjE2MTcwN2FhOWJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYWluYm93IE91dHJlYWNoIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmYTNmOTdmNDUxNTQ1NmI5ZDYxNWNhMTY0ZWNjOTlhLnNldENvbnRlbnQoaHRtbF80NzZjMGY1N2Y0YjM0OGIyYmVkMGIxNjE3MDdhYTliZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZjJkNjA1OGZjNWM0ZDEyOGQ3NDgxYzE2MGRlOWQ5NS5iaW5kUG9wdXAocG9wdXBfNWZhM2Y5N2Y0NTE1NDU2YjlkNjE1Y2ExNjRlY2M5OWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmNTNkY2JjOWRjMzQ4YTFiZWJiY2NhOGUwYzQ2OWI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODMzNDYxLCAtNzYuODY2NzU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwNGIzZTViNTU5MDQwOWJhMWRjNWM3NmM1ZTgwMTI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0ZDljZTMzMzRlMzQ0ZmQ4ODFjZGJiM2NlOTJiYTM5ID0gJChgPGRpdiBpZD0iaHRtbF81NGQ5Y2UzMzM0ZTM0NGZkODgxY2RiYjNjZTkyYmEzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlYXQgQ29taXNzaW9uIENoYW5nZSBvZiBMaWZlIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwNGIzZTViNTU5MDQwOWJhMWRjNWM3NmM1ZTgwMTI5LnNldENvbnRlbnQoaHRtbF81NGQ5Y2UzMzM0ZTM0NGZkODgxY2RiYjNjZTkyYmEzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZjUzZGNiYzlkYzM0OGExYmViYmNjYThlMGM0NjliOC5iaW5kUG9wdXAocG9wdXBfYzA0YjNlNWI1NTkwNDA5YmExZGM1Yzc2YzVlODAxMjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjM2RmY2JlNDAwZDQyZDRiOTdjMzIxNDVlNjg1ZWQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODQ4NDg5NTUsIC03Ni44Njc5MjcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiYzViMmQwZDNiMTQ0YWQ4MDhiNWQzZmFiOTc4YjM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1YjEzNGNjZWIwOTQ5N2FiYTlhMmY4MjFkYjZhNmJhID0gJChgPGRpdiBpZD0iaHRtbF85NWIxMzRjY2ViMDk0OTdhYmE5YTJmODIxZGI2YTZiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SmVzdXMgQ2hyaXN0IE1pbmlzdHJpZXMgSW50ZXJuYXRpb25hbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2JjNWIyZDBkM2IxNDRhZDgwOGI1ZDNmYWI5NzhiMzcuc2V0Q29udGVudChodG1sXzk1YjEzNGNjZWIwOTQ5N2FiYTlhMmY4MjFkYjZhNmJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRjM2RmY2JlNDAwZDQyZDRiOTdjMzIxNDVlNjg1ZWQxLmJpbmRQb3B1cChwb3B1cF9jYmM1YjJkMGQzYjE0NGFkODA4YjVkM2ZhYjk3OGIzNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWUzMWVjNDY5ODFjNDllMDhmOWVlOTMyODVhZGU5ZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMzE0MzYzMiwgLTc3LjAyMjE1NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmQ1OTk2ZWY4OTAzNDkxMzgxMTc1MzZkOWJmZTI1NjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTk0ZmI3ZDI2Njg4NDc2NDlmMDBkZGNkN2E5MDhiZDQgPSAkKGA8ZGl2IGlkPSJodG1sX2U5NGZiN2QyNjY4ODQ3NjQ5ZjAwZGRjZDdhOTA4YmQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MdXRoZXIgUmljZSBOZWlnaGJvcmhvb2QgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZDU5OTZlZjg5MDM0OTEzODExNzUzNmQ5YmZlMjU2NC5zZXRDb250ZW50KGh0bWxfZTk0ZmI3ZDI2Njg4NDc2NDlmMDBkZGNkN2E5MDhiZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWUzMWVjNDY5ODFjNDllMDhmOWVlOTMyODVhZGU5ZjUuYmluZFBvcHVwKHBvcHVwX2ZkNTk5NmVmODkwMzQ5MTM4MTE3NTM2ZDliZmUyNTY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTU3MWIxOTgxMjE0ODE4OTZmZGQxYTBhYmE4OGNiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkwMDU5ODM1LCAtNzYuODUzMjIzOTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjlhZmYzYTJjZDc4NDYxODgyMzZhZmNlYWM0YzU3ZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjkwYTMzOWMwZDZiNDQ3NWJiYzIwOWFiMjFkM2Y1OWQgPSAkKGA8ZGl2IGlkPSJodG1sXzY5MGEzMzljMGQ2YjQ0NzViYmMyMDlhYjIxZDNmNTlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QcmluY2UgR2VvcmdlJ3MgQ291bnR5IERlcGFydG1lbnQgb2YgU29jaWFsIFNlcnZpY2VzIFRFRkFQPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OWFmZjNhMmNkNzg0NjE4ODIzNmFmY2VhYzRjNTdmZS5zZXRDb250ZW50KGh0bWxfNjkwYTMzOWMwZDZiNDQ3NWJiYzIwOWFiMjFkM2Y1OWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODk1NzFiMTk4MTIxNDgxODk2ZmRkMWEwYWJhODhjYjQuYmluZFBvcHVwKHBvcHVwXzY5YWZmM2EyY2Q3ODQ2MTg4MjM2YWZjZWFjNGM1N2ZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ODFhOWUzOTQyYzI0ZWE5OWZiNDI2ZDVlZmZkNWU5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk5MDM2NTM5LCAtNzcuMDI2Njg3ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGMzYmU1Nzg2OWY2NDQ5NDlkNzdiMWZjN2YyZjgyZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQ5NTFhZjE3MTg5NDIyNDhjZDJhNjlmNDAzMDU3ZmUgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0OTUxYWYxNzE4OTQyMjQ4Y2QyYTY5ZjQwMzA1N2ZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaGVwaGVyZCdzIFRhYmxlIC0gUHJvZ3Jlc3MgUGxhY2UgQnVpbGRpbmc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjM2JlNTc4NjlmNjQ0OTQ5ZDc3YjFmYzdmMmY4MmYzLnNldENvbnRlbnQoaHRtbF9kNDk1MWFmMTcxODk0MjI0OGNkMmE2OWY0MDMwNTdmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ODFhOWUzOTQyYzI0ZWE5OWZiNDI2ZDVlZmZkNWU5OC5iaW5kUG9wdXAocG9wdXBfOGMzYmU1Nzg2OWY2NDQ5NDlkNzdiMWZjN2YyZjgyZjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViY2NkNGIyNWNhMjQ4NjI4MDQxZTc4Y2YyZDM2ZmYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTU2MDY4MjcsIC03Ny4yMTEyMDMxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZGUzNDg0MzlmODA0ZTU5OTQxM2E2YWJmYTY4ODBkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTZjMTdhNjBkOTk0YzBjOTFiNmFkZjZjMGRlNDIwMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTU2YzE3YTYwZDk5NGMwYzkxYjZhZGY2YzBkZTQyMDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vbnRnb21lcnkgQ291bnR5IE11c2xpbSBGb3VuZGF0aW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZGUzNDg0MzlmODA0ZTU5OTQxM2E2YWJmYTY4ODBkOC5zZXRDb250ZW50KGh0bWxfYTU2YzE3YTYwZDk5NGMwYzkxYjZhZGY2YzBkZTQyMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWJjY2Q0YjI1Y2EyNDg2MjgwNDFlNzhjZjJkMzZmZjIuYmluZFBvcHVwKHBvcHVwXzVkZTM0ODQzOWY4MDRlNTk5NDEzYTZhYmZhNjg4MGQ4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85M2RmYmJjZGVhOTM0MzU5YjcxN2ZlMmJiN2NkZGZjOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkwMjE1OCwgLTc2LjkwNTc2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZGZmNDY0NjNiNTE0ZGM5YjkyMTE5NGQ5ZThhYzM4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzYxODcyZGIwMGE0NTIzYTVlY2JkNDk1OWY2NjBlNiA9ICQoYDxkaXYgaWQ9Imh0bWxfY2M2MTg3MmRiMDBhNDUyM2E1ZWNiZDQ5NTlmNjYwZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvcmludGggQmFwdGlzdCBDaHVyY2ggT3V0cmVhY2ggUHJvZ3JhbTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmRmZjQ2NDYzYjUxNGRjOWI5MjExOTRkOWU4YWMzOGMuc2V0Q29udGVudChodG1sX2NjNjE4NzJkYjAwYTQ1MjNhNWVjYmQ0OTU5ZjY2MGU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzZGZiYmNkZWE5MzQzNTliNzE3ZmUyYmI3Y2RkZmM5LmJpbmRQb3B1cChwb3B1cF9iZGZmNDY0NjNiNTE0ZGM5YjkyMTE5NGQ5ZThhYzM4YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjNjNTVjNDkzY2IzNDU4MTgxMWM0MDkzNzVmNjg4YzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NjU2MTcsIC03Ni45OTMzODkwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMmQ4ZDI2ZWJlNTY0NTMyODNhNjcyMDZmNGI3NjAyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZjc1ODRlYmM4ZTA0YjA3ODljZWM3OWZjYTcyNTQyZCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2Y3NTg0ZWJjOGUwNGIwNzg5Y2VjNzlmY2E3MjU0MmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRlbmRlciBMb3ZlICYgQ2FyZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzJkOGQyNmViZTU2NDUzMjgzYTY3MjA2ZjRiNzYwMjIuc2V0Q29udGVudChodG1sX2NmNzU4NGViYzhlMDRiMDc4OWNlYzc5ZmNhNzI1NDJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzYzU1YzQ5M2NiMzQ1ODE4MTFjNDA5Mzc1ZjY4OGM5LmJpbmRQb3B1cChwb3B1cF8zMmQ4ZDI2ZWJlNTY0NTMyODNhNjcyMDZmNGI3NjAyMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmVkNDYxMjM0MDgxNGE4Zjk3NWZjMTg0NzU1ODMxZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45OTU3MTMxNiwgLTc3LjAyMzczNzk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyMDdlOTg3MjQ4MzQwNjc5OTg2N2Q5NDcwNjgyNzgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3MzNlYWRhYmY4ZjRmOGQ5NGY3NzlhNmVjMmIxZTA1ID0gJChgPGRpdiBpZD0iaHRtbF85NzMzZWFkYWJmOGY0ZjhkOTRmNzc5YTZlYzJiMWUwNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rmlyc3QgQmFwdGlzdCBDaHVyY2ggb2YgU2lsdmVyIFNwcmluZyBGb29kIENsb3NldDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjIwN2U5ODcyNDgzNDA2Nzk5ODY3ZDk0NzA2ODI3ODEuc2V0Q29udGVudChodG1sXzk3MzNlYWRhYmY4ZjRmOGQ5NGY3NzlhNmVjMmIxZTA1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlZDQ2MTIzNDA4MTRhOGY5NzVmYzE4NDc1NTgzMWQwLmJpbmRQb3B1cChwb3B1cF82MjA3ZTk4NzI0ODM0MDY3OTk4NjdkOTQ3MDY4Mjc4MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTc1MGRhOWZlNjcwNGQ4ZmI0NDI2NDE5ZjY1ZmY2OWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43NzQzNTgsIC03Ny4wMTM5NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGFiNWZjYmFkOWQyNDJkMWFhMzZhOTZmMWIyMmE2ZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWZkZDdhMWM0NDRlNGNkZWFmNTI0NzA4NTM2YWQxMjcgPSAkKGA8ZGl2IGlkPSJodG1sXzlmZGQ3YTFjNDQ0ZTRjZGVhZjUyNDcwODUzNmFkMTI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gb3J0IEZvb3RlIEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYWI1ZmNiYWQ5ZDI0MmQxYWEzNmE5NmYxYjIyYTZkYy5zZXRDb250ZW50KGh0bWxfOWZkZDdhMWM0NDRlNGNkZWFmNTI0NzA4NTM2YWQxMjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTc1MGRhOWZlNjcwNGQ4ZmI0NDI2NDE5ZjY1ZmY2OWIuYmluZFBvcHVwKHBvcHVwXzBhYjVmY2JhZDlkMjQyZDFhYTM2YTk2ZjFiMjJhNmRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZDQyNDVlNzc1ZTA0ZjczOTgwM2Y0OWU1YTZkMTk5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk3OTI3ODg3LCAtNzYuODYyNjc0MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGRlODFiNjc4NTBhNDc5Nzg1MGNhYjY0OTNiODE2N2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWFkYWFjNGVkMjdkNDEzNDljMTRhN2U2MmIzYzY4ZmQgPSAkKGA8ZGl2IGlkPSJodG1sXzlhZGFhYzRlZDI3ZDQxMzQ5YzE0YTdlNjJiM2M2OGZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgVmVzc2VsIG9mIEdyYWNlIEV2YW5nZWxpY2FsIENodXJjaCBvZiBMYW5oYW08L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkZTgxYjY3ODUwYTQ3OTc4NTBjYWI2NDkzYjgxNjdlLnNldENvbnRlbnQoaHRtbF85YWRhYWM0ZWQyN2Q0MTM0OWMxNGE3ZTYyYjNjNjhmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZDQyNDVlNzc1ZTA0ZjczOTgwM2Y0OWU1YTZkMTk5My5iaW5kUG9wdXAocG9wdXBfZGRlODFiNjc4NTBhNDc5Nzg1MGNhYjY0OTNiODE2N2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkM2M4YTU1YWUwNzQ3MDNhOWU2ZTQ2MGFmNTEwN2M2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODMzNTE1MDAwMDAwMDA2LCAtNzYuODYyNzQwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODVlMDcyNTZlNzQ0MGY2YWU3NWFmNzU0ZGM0OTk2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTQxYjA2NjYxNGU0M2IwYmI5MzY1ZDU4ZDk5ZTA0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzU0MWIwNjY2MTRlNDNiMGJiOTM2NWQ1OGQ5OWUwNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBQyBCZXRoZWwgRmVsbG93c2hpcCBDaHVyY2gtIFVwcGVyIE1hcmxib3JvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODVlMDcyNTZlNzQ0MGY2YWU3NWFmNzU0ZGM0OTk2NC5zZXRDb250ZW50KGh0bWxfMzU0MWIwNjY2MTRlNDNiMGJiOTM2NWQ1OGQ5OWUwNDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmQzYzhhNTVhZTA3NDcwM2E5ZTZlNDYwYWY1MTA3YzYuYmluZFBvcHVwKHBvcHVwXzY4NWUwNzI1NmU3NDQwZjZhZTc1YWY3NTRkYzQ5OTY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OGQ5NmY4MGE5NzM0MGIwYTNiZTdlYWVhMzg1YmM4NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk0MDI5MDUyLCAtNzYuODYyMTg4NDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2QwZTk1MmY5YmNhNDEzN2FlYTI5ZGEzOGQ5MGQ5ZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWVlNzIxZDBlMThjNDQzZmFkZjk0YTk2NTdlMmNjZDEgPSAkKGA8ZGl2IGlkPSJodG1sX2VlZTcyMWQwZTE4YzQ0M2ZhZGY5NGE5NjU3ZTJjY2QxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GYWl0aCBDbGluaWMgQ2h1cmNoIEludGVybmF0aW9uYWw8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkMGU5NTJmOWJjYTQxMzdhZWEyOWRhMzhkOTBkOWQzLnNldENvbnRlbnQoaHRtbF9lZWU3MjFkMGUxOGM0NDNmYWRmOTRhOTY1N2UyY2NkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84OGQ5NmY4MGE5NzM0MGIwYTNiZTdlYWVhMzg1YmM4NS5iaW5kUG9wdXAocG9wdXBfY2QwZTk1MmY5YmNhNDEzN2FlYTI5ZGEzOGQ5MGQ5ZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczNDQ5NDk4NDQ5ODRlNjE5ZWJhMGFkMmI4ZjllMTI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTk5NDc1LCAtNzYuOTgyNDQ5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZmZlNDMxMjM3Yjg0ODA0ODc3YTI4ZTA2NzczMGEyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNTQ3M2IwZTQzMDY0NThjOTg3ZTQxMjgxOTRlOGRkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDU0NzNiMGU0MzA2NDU4Yzk4N2U0MTI4MTk0ZThkZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBNaWNoYWVsIGFuZCBBbGwgQW5nZWxzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZmZlNDMxMjM3Yjg0ODA0ODc3YTI4ZTA2NzczMGEyMC5zZXRDb250ZW50KGh0bWxfZDU0NzNiMGU0MzA2NDU4Yzk4N2U0MTI4MTk0ZThkZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzM0NDk0OTg0NDk4NGU2MTllYmEwYWQyYjhmOWUxMjkuYmluZFBvcHVwKHBvcHVwX2JmZmU0MzEyMzdiODQ4MDQ4NzdhMjhlMDY3NzMwYTIwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NTI5ZTYwZjc1YWU0YzA4YWM3ZDFjZjM4NzU5ZTY1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA4ODUyMSwgLTc2Ljg1MjM0NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzg2ZTYwMTUyMTc1NGY4YzhkM2E0Yjk5YTc5NjU5ZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTNkOWRhYWM4OTg2NDFkNjg3MWRlNzI5ZTFiOGNmNmQgPSAkKGA8ZGl2IGlkPSJodG1sX2UzZDlkYWFjODk4NjQxZDY4NzFkZTcyOWUxYjhjZjZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Hb3NwZWwgQXNzZW1ibHkgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODZlNjAxNTIxNzU0ZjhjOGQzYTRiOTlhNzk2NTlkMS5zZXRDb250ZW50KGh0bWxfZTNkOWRhYWM4OTg2NDFkNjg3MWRlNzI5ZTFiOGNmNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTUyOWU2MGY3NWFlNGMwOGFjN2QxY2YzODc1OWU2NWUuYmluZFBvcHVwKHBvcHVwXzc4NmU2MDE1MjE3NTRmOGM4ZDNhNGI5OWE3OTY1OWQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNGJjMmM2Njg3YzE0YTY3YTU2M2U5MWRlNzE2ZmFmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg3NDg4OCwgLTc2Ljg1Mzc2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNzdhMDMwZmJkMTk0MmY0OWQ4ZTMxOTUxY2QwYjZjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YjUxZGFlNzExZWY0ODZhOWJmYzMyZWIyOWIxNjZhZSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWI1MWRhZTcxMWVmNDg2YTliZmMzMmViMjliMTY2YWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbnNoaXAgV2hlYXRsZXkgRWFybHkgQ2hpbGRob29kIExlYXJuaW5nIENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDc3YTAzMGZiZDE5NDJmNDlkOGUzMTk1MWNkMGI2Yzkuc2V0Q29udGVudChodG1sXzliNTFkYWU3MTFlZjQ4NmE5YmZjMzJlYjI5YjE2NmFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M0YmMyYzY2ODdjMTRhNjdhNTYzZTkxZGU3MTZmYWZmLmJpbmRQb3B1cChwb3B1cF8wNzdhMDMwZmJkMTk0MmY0OWQ4ZTMxOTUxY2QwYjZjOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzk3ZTQ3MzE2NmVhNGU0OThiMGJkNTdmY2M4MWEwM2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44Njg4MzM1MywgLTc2Ljg1MjY5NTU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZlMTFkYjE5ZTEzNTQwYThiMjZhYmZkZDliOTZmZWZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjNWRhODhlNzQzZTRiYWM4MGRkMzYzNGJjNDBiYjY2ID0gJChgPGRpdiBpZD0iaHRtbF80YzVkYTg4ZTc0M2U0YmFjODBkZDM2MzRiYzQwYmI2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2luc2hpcCBXaGVhdGxleSBFYXJseSBDaGlsZGhvb2QgTGVhcm5pbmcgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTExZGIxOWUxMzU0MGE4YjI2YWJmZGQ5Yjk2ZmVmZC5zZXRDb250ZW50KGh0bWxfNGM1ZGE4OGU3NDNlNGJhYzgwZGQzNjM0YmM0MGJiNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzk3ZTQ3MzE2NmVhNGU0OThiMGJkNTdmY2M4MWEwM2YuYmluZFBvcHVwKHBvcHVwX2ZlMTFkYjE5ZTEzNTQwYThiMjZhYmZkZDliOTZmZWZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZWEwZTAyZDRkNDY0YmVlOTJjNjM2OGUyZTc1YzI3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkzNDkwMjYzLCAtNzYuODU4MDI2NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWY0NTc0ZWE0OGI5NDU1ZDhjZjM4ZjVjYTY1OTFmM2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDJiN2ZkMDUwYmQyNDViNjkzMzlmNThiNzYzMGY2MjMgPSAkKGA8ZGl2IGlkPSJodG1sXzAyYjdmZDA1MGJkMjQ1YjY5MzM5ZjU4Yjc2MzBmNjIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaXR5IG9mIFByYWlzZSBGYW1pbHkgTWluaXN0cmllczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWY0NTc0ZWE0OGI5NDU1ZDhjZjM4ZjVjYTY1OTFmM2Iuc2V0Q29udGVudChodG1sXzAyYjdmZDA1MGJkMjQ1YjY5MzM5ZjU4Yjc2MzBmNjIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NlYTBlMDJkNGQ0NjRiZWU5MmM2MzY4ZTJlNzVjMjcwLmJpbmRQb3B1cChwb3B1cF9lZjQ1NzRlYTQ4Yjk0NTVkOGNmMzhmNWNhNjU5MWYzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTRiNzhmOWJjYWRhNGY1ZWFkYTQ4YTcwMTY4MWMwNmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45OTk3NDM0OCwgLTc2Ljk5Mzk1MzExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkZTZiY2U0Y2U2ODRkMGI5N2U1OTNiMjczY2I5OWM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwMmNmMjEwOWMyMDQ5ZWI5YzI3ZDM3YWEyNWNmMjkzID0gJChgPGRpdiBpZD0iaHRtbF8zMDJjZjIxMDljMjA0OWViOWMyN2QzN2FhMjVjZjI5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xpZnRvbiBQYXJrIEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZGU2YmNlNGNlNjg0ZDBiOTdlNTkzYjI3M2NiOTljNy5zZXRDb250ZW50KGh0bWxfMzAyY2YyMTA5YzIwNDllYjljMjdkMzdhYTI1Y2YyOTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTRiNzhmOWJjYWRhNGY1ZWFkYTQ4YTcwMTY4MWMwNmUuYmluZFBvcHVwKHBvcHVwX2JkZTZiY2U0Y2U2ODRkMGI5N2U1OTNiMjczY2I5OWM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZTAzM2FhODUyNWQ0YmMwYWJhMzc3NDgyZDA1YjhhZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk5OTc0MzQ4LCAtNzYuOTkzOTUzMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDEyZjNiMGJiMzU3NDU5OTgwZmE4MTE1MzM4OWVjNzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmVlMmRlN2RkMjFkNGQxZmFjYWJkN2Y4NDA0MDMyM2YgPSAkKGA8ZGl2IGlkPSJodG1sXzZlZTJkZTdkZDIxZDRkMWZhY2FiZDdmODQwNDAzMjNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGVlciwgSW5jLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDEyZjNiMGJiMzU3NDU5OTgwZmE4MTE1MzM4OWVjNzcuc2V0Q29udGVudChodG1sXzZlZTJkZTdkZDIxZDRkMWZhY2FiZDdmODQwNDAzMjNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZlMDMzYWE4NTI1ZDRiYzBhYmEzNzc0ODJkMDViOGFmLmJpbmRQb3B1cChwb3B1cF9kMTJmM2IwYmIzNTc0NTk5ODBmYTgxMTUzMzg5ZWM3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDI0OGM0YzgxMjFhNDNhMzgwMmJlNTRlYzFjMmRlYWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMDAwNjA3MiwgLTc2Ljk3Mzg4Nzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2MDM0YzQ3NTMxZDQ0NDhhYWU2ZDg5YjY4ZjU2YjYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1YTc1Y2U2YjlmNDRjNTA5M2FkMTY2NzdlYzNjY2FiID0gJChgPGRpdiBpZD0iaHRtbF8wNWE3NWNlNmI5ZjQ0YzUwOTNhZDE2Njc3ZWMzY2NhYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWRlbHBoaSBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNjAzNGM0NzUzMWQ0NDQ4YWFlNmQ4OWI2OGY1NmI2Mi5zZXRDb250ZW50KGh0bWxfMDVhNzVjZTZiOWY0NGM1MDkzYWQxNjY3N2VjM2NjYWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDI0OGM0YzgxMjFhNDNhMzgwMmJlNTRlYzFjMmRlYWUuYmluZFBvcHVwKHBvcHVwXzI2MDM0YzQ3NTMxZDQ0NDhhYWU2ZDg5YjY4ZjU2YjYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZjEwMjUxMjgxMDc0Zjg3OTc2YzI1NzgyMWYxZGU5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg4MTkyNiwgLTc2Ljg1MTk4MTAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhNDI1MjBjODkwMzQxMTRhYjk1OWI5Y2M0N2MzMmRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1YmE5NGQ3ZDM1YTQ4YzA5YWEwZDBjMzA5MTliZjFjID0gJChgPGRpdiBpZD0iaHRtbF85NWJhOTRkN2QzNWE0OGMwOWFhMGQwYzMwOTE5YmYxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2luZ2RvbSBWaXNpb24gTWluaXN0cmllczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2E0MjUyMGM4OTAzNDExNGFiOTU5YjljYzQ3YzMyZGQuc2V0Q29udGVudChodG1sXzk1YmE5NGQ3ZDM1YTQ4YzA5YWEwZDBjMzA5MTliZjFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFmMTAyNTEyODEwNzRmODc5NzZjMjU3ODIxZjFkZTkyLmJpbmRQb3B1cChwb3B1cF8zYTQyNTIwYzg5MDM0MTE0YWI5NTliOWNjNDdjMzJkZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTIzNzE0OWZmMGQ4NDMzM2I0ZmIyYTg2YjIyOGRiZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMDE2NjE2MSwgLTc2Ljk3MjM1MTcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk4ZjM1Mzc5YzcyNjQ5ZDQ4NTE4MGJmOWQ5YmQ3ZjQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0ZjFlOTE2ZTY3MjQyYmY5ZDg2MGY2MTNiNGVlYTg1ID0gJChgPGRpdiBpZD0iaHRtbF9jNGYxZTkxNmU2NzI0MmJmOWQ4NjBmNjEzYjRlZWE4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29vbCBTcHJpbmcgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4ZjM1Mzc5YzcyNjQ5ZDQ4NTE4MGJmOWQ5YmQ3ZjQ0LnNldENvbnRlbnQoaHRtbF9jNGYxZTkxNmU2NzI0MmJmOWQ4NjBmNjEzYjRlZWE4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMjM3MTQ5ZmYwZDg0MzMzYjRmYjJhODZiMjI4ZGJmMC5iaW5kUG9wdXAocG9wdXBfOThmMzUzNzljNzI2NDlkNDg1MTgwYmY5ZDliZDdmNDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EzMWY2NjlkYjMxYjQ2ZjZiYWY0ZTY1NDk0YTkzMmU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTQzMTAwOTcsIC03Ny4yMDI0MzcxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hN2NhYTUzMDAwZTQ0MmVmYTZmODM1YTgzMzNmYmQyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZTdhYzNlZTg0MTU0MzNhYjY2YWRiNGE1NmRmMjExYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMmU3YWMzZWU4NDE1NDMzYWI2NmFkYjRhNTZkZjIxMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9ha3MgYXQgT2xkZSBUb3duZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTdjYWE1MzAwMGU0NDJlZmE2ZjgzNWE4MzMzZmJkMjcuc2V0Q29udGVudChodG1sXzJlN2FjM2VlODQxNTQzM2FiNjZhZGI0YTU2ZGYyMTFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EzMWY2NjlkYjMxYjQ2ZjZiYWY0ZTY1NDk0YTkzMmU3LmJpbmRQb3B1cChwb3B1cF9hN2NhYTUzMDAwZTQ0MmVmYTZmODM1YTgzMzNmYmQyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTRhM2I4NTZjYTdlNDkyYzhkMDE3ZTVkYTMwNjdiNjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wODMyODQzNywgLTc3LjE0ODk0NzcwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlNGRkOTc0NjEzYTQ3NDA4NjRkNzIxMmZjZDRkODczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlNWViOTAxMmE0MzQ3NTNhNGI5YzU1M2NjMmYyOTExID0gJChgPGRpdiBpZD0iaHRtbF82ZTVlYjkwMTJhNDM0NzUzYTRiOWM1NTNjYzJmMjkxMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9ja3ZpbGxlIFRvd24gQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZTRkZDk3NDYxM2E0NzQwODY0ZDcyMTJmY2Q0ZDg3My5zZXRDb250ZW50KGh0bWxfNmU1ZWI5MDEyYTQzNDc1M2E0YjljNTUzY2MyZjI5MTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTRhM2I4NTZjYTdlNDkyYzhkMDE3ZTVkYTMwNjdiNjEuYmluZFBvcHVwKHBvcHVwXzBlNGRkOTc0NjEzYTQ3NDA4NjRkNzIxMmZjZDRkODczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NzFlNDY5N2I0OTg0MDM0OTk2ZWQyNmYyMDRhZmU4OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA3OTA3MSwgLTc2Ljg0NDA4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZTUyNzJhYWE3YzI0ZmZjYmFiYzZiNzdiZmVjMWEzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNmYwYjZlNWNhZGU0NWFkOTkyOWYwYzhlZWViZTgyMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDZmMGI2ZTVjYWRlNDVhZDk5MjlmMGM4ZWVlYmU4MjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhcmsgVmlldyBhdCBMYXVyZWwgMTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmU1MjcyYWFhN2MyNGZmY2JhYmM2Yjc3YmZlYzFhMzUuc2V0Q29udGVudChodG1sX2Q2ZjBiNmU1Y2FkZTQ1YWQ5OTI5ZjBjOGVlZWJlODIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc3MWU0Njk3YjQ5ODQwMzQ5OTZlZDI2ZjIwNGFmZTg5LmJpbmRQb3B1cChwb3B1cF9mZTUyNzJhYWE3YzI0ZmZjYmFiYzZiNzdiZmVjMWEzNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjM2N2Y4MmRlYWFjNDhiYmFmZTgwNDEzYjg3YmUzZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43NjYxMzIsIC03Ni44Mjg3NTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwNzM3ZjdlOTAzNzRhOWE4NTE1MTczZTgzYjViZjI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkNWRhMTg1M2QyZTQ3ZDc5MzlmOGRkODA1NjExMThjID0gJChgPGRpdiBpZD0iaHRtbF8yZDVkYTE4NTNkMmU0N2Q3OTM5ZjhkZDgwNTYxMTE4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29ybmVyc3RvbmUgUGVhY2VmdWwgQmlibGUgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwNzM3ZjdlOTAzNzRhOWE4NTE1MTczZTgzYjViZjI3LnNldENvbnRlbnQoaHRtbF8yZDVkYTE4NTNkMmU0N2Q3OTM5ZjhkZDgwNTYxMTE4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MzY3ZjgyZGVhYWM0OGJiYWZlODA0MTNiODdiZTNmYy5iaW5kUG9wdXAocG9wdXBfNTA3MzdmN2U5MDM3NGE5YTg1MTUxNzNlODNiNWJmMjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxNmJlZTUwMmQyNjQ5YzRhN2ZkYmU4NDdiZWM1Njg3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTQ4MjExLCAtNzYuODQ5MjQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmM2M4OTAyYTllNjRkZTQ5MWU1ODI0MTU0NTIxOTYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzNTRjNjNlZjQ5MzRmYTc4YWEzNjAwOWQ2OWJkOTE2ID0gJChgPGRpdiBpZD0iaHRtbF8zMzU0YzYzZWY0OTM0ZmE3OGFhMzYwMDlkNjliZDkxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29tcGFzc2lvbmF0ZSBFbnRlcnByaXNlcywgSW5jLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGYzYzg5MDJhOWU2NGRlNDkxZTU4MjQxNTQ1MjE5NjEuc2V0Q29udGVudChodG1sXzMzNTRjNjNlZjQ5MzRmYTc4YWEzNjAwOWQ2OWJkOTE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxNmJlZTUwMmQyNjQ5YzRhN2ZkYmU4NDdiZWM1Njg3LmJpbmRQb3B1cChwb3B1cF8wZjNjODkwMmE5ZTY0ZGU0OTFlNTgyNDE1NDUyMTk2MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWE5Nzc0MjA2YTliNGFiYWJlYmYwNWYyMGFjNjYzOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NzcyMzcsIC03Ni44OTQ0Mjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEzODFkNjY0MGIwOTQyM2M4YTg2ZDE0MDEzZWRiOGI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4NDBiYzU4NjQ1NzQ3ZDliNWE4MTk1YzFlZWU1MTY2ID0gJChgPGRpdiBpZD0iaHRtbF81ODQwYmM1ODY0NTc0N2Q5YjVhODE5NWMxZWVlNTE2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R2V0aHNlbWFuZSBVbml0ZWQgTWV0aG9kaXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTM4MWQ2NjQwYjA5NDIzYzhhODZkMTQwMTNlZGI4YjQuc2V0Q29udGVudChodG1sXzU4NDBiYzU4NjQ1NzQ3ZDliNWE4MTk1YzFlZWU1MTY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFhOTc3NDIwNmE5YjRhYmFiZWJmMDVmMjBhYzY2Mzk3LmJpbmRQb3B1cChwb3B1cF8xMzgxZDY2NDBiMDk0MjNjOGE4NmQxNDAxM2VkYjhiNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDc4MWYxOTZjNjU3NGVmYmI5ZTJhZmFmNzY3ZmY4NTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMjczNDEzNiwgLTc2Ljk5MDg4NjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IzM2RmODk0ZTYxYTQ4OWRiYmMwNGJkMjk2MWZiODc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3Mjk3ZmJkMTcyZjRmYjJiNmY5NWUyMzFmZjE3MDBlID0gJChgPGRpdiBpZD0iaHRtbF80NzI5N2ZiZDE3MmY0ZmIyYjZmOTVlMjMxZmYxNzAwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2V5IE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzM2RmODk0ZTYxYTQ4OWRiYmMwNGJkMjk2MWZiODc0LnNldENvbnRlbnQoaHRtbF80NzI5N2ZiZDE3MmY0ZmIyYjZmOTVlMjMxZmYxNzAwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNzgxZjE5NmM2NTc0ZWZiYjllMmFmYWY3NjdmZjg1My5iaW5kUG9wdXAocG9wdXBfYjMzZGY4OTRlNjFhNDg5ZGJiYzA0YmQyOTYxZmI4NzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmMmJiODU4NzcxMTRhNjM5ODU0ZDExMzBhZjY2MDU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTY0NDgzLCAtNzYuODUzMDc0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTIxZTI4ODgwMzE0ODU5OTBkYmM3MmZkMjRjNWFhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTU2ZmFjMmUwNWM0M2EwYjM2NTFiMGQ2NjI2ZjYyYSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2E1NmZhYzJlMDVjNDNhMGIzNjUxYjBkNjYyNmY2MmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBQyBXb3NlbSBMYW5oYW08L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhMjFlMjg4ODAzMTQ4NTk5MGRiYzcyZmQyNGM1YWFmLnNldENvbnRlbnQoaHRtbF9jYTU2ZmFjMmUwNWM0M2EwYjM2NTFiMGQ2NjI2ZjYyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZjJiYjg1ODc3MTE0YTYzOTg1NGQxMTMwYWY2NjA1Ni5iaW5kUG9wdXAocG9wdXBfZWEyMWUyODg4MDMxNDg1OTkwZGJjNzJmZDI0YzVhYWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmNzhjNTZkZGNlZjQ4MmFhMmY5YjY2YjlmY2NhZDBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDA3MjQyLCAtNzYuOTMwMjQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZiYjI4MTkyMDZjZTQ1ZjNiMDQ5Y2NkNjZjNWIxZmE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExZDM3NjJhM2Q0MzRhYzRhNzNkYmViOTY5Y2RhOTg3ID0gJChgPGRpdiBpZD0iaHRtbF8xMWQzNzYyYTNkNDM0YWM0YTczZGJlYjk2OWNkYTk4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WmlvbiBDaXR5IENoYXBlbCBGb3IgQWxsIE5hdGlvbnM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiYjI4MTkyMDZjZTQ1ZjNiMDQ5Y2NkNjZjNWIxZmE5LnNldENvbnRlbnQoaHRtbF8xMWQzNzYyYTNkNDM0YWM0YTczZGJlYjk2OWNkYTk4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Zjc4YzU2ZGRjZWY0ODJhYTJmOWI2NmI5ZmNjYWQwZi5iaW5kUG9wdXAocG9wdXBfNmJiMjgxOTIwNmNlNDVmM2IwNDljY2Q2NmM1YjFmYTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxN2U3ODVjN2VmMTQ0NTliZWFlN2VkNzIwZDFkYmY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTE3Nzg1Mjk5OTk5OTk0LCAtNzcuMTkyMDQ2OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzk1MWVkYzdkODFmNGMxZWEwOTE1MGJkNTM5ZjI3N2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmM2ZDFmMDA2NGM4NDg1M2FhYzE3MmQ0NDg1MTEzYTQgPSAkKGA8ZGl2IGlkPSJodG1sX2JjNmQxZjAwNjRjODQ4NTNhYWMxNzJkNDQ4NTExM2E0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NQU5OQSBGb29kIENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzk1MWVkYzdkODFmNGMxZWEwOTE1MGJkNTM5ZjI3N2Muc2V0Q29udGVudChodG1sX2JjNmQxZjAwNjRjODQ4NTNhYWMxNzJkNDQ4NTExM2E0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgxN2U3ODVjN2VmMTQ0NTliZWFlN2VkNzIwZDFkYmY4LmJpbmRQb3B1cChwb3B1cF83OTUxZWRjN2Q4MWY0YzFlYTA5MTUwYmQ1MzlmMjc3YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzdkM2YyMzU3OWEwNDYzYTk0ZTJkM2FmMTFkNDQ3OGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wMDg0MDg0MywgLTc3LjE3NDA2ODI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkZWU1ODc0ZDI2ODRmNjY5OGE2YmM2MTc4ZTYzZjFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExMjNjMGNlMjM0YTQ2YTJiYjFhMWUyZGNhY2FmYWY5ID0gJChgPGRpdiBpZD0iaHRtbF8xMTIzYzBjZTIzNGE0NmEyYmIxYTFlMmRjYWNhZmFmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFzdG9yYWwgU3VwcG9ydCBTZXJ2aWNlczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWRlZTU4NzRkMjY4NGY2Njk4YTZiYzYxNzhlNjNmMWYuc2V0Q29udGVudChodG1sXzExMjNjMGNlMjM0YTQ2YTJiYjFhMWUyZGNhY2FmYWY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc3ZDNmMjM1NzlhMDQ2M2E5NGUyZDNhZjExZDQ0NzhjLmJpbmRQb3B1cChwb3B1cF8xZGVlNTg3NGQyNjg0ZjY2OThhNmJjNjE3OGU2M2YxZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjc5OTg2NTVkMjkyNGNlM2JlOTAwNzI2YjU5OWVlNzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NjUyNDc5OTk5OTk5OTUsIC03Ni44NDA5MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTkxZjljODJlNWJiNDQwMjgyY2JkMDE5MDNkM2FhZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGVhYzE2NmEwN2QzNDNjNGIyYTU3OTNhMDEwMzliZWIgPSAkKGA8ZGl2IGlkPSJodG1sXzhlYWMxNjZhMDdkMzQzYzRiMmE1NzkzYTAxMDM5YmViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGlzIEdlbmVyYXRpb24gTWluaXN0cmllczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTkxZjljODJlNWJiNDQwMjgyY2JkMDE5MDNkM2FhZjcuc2V0Q29udGVudChodG1sXzhlYWMxNjZhMDdkMzQzYzRiMmE1NzkzYTAxMDM5YmViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY3OTk4NjU1ZDI5MjRjZTNiZTkwMDcyNmI1OTllZTc3LmJpbmRQb3B1cChwb3B1cF9hOTFmOWM4MmU1YmI0NDAyODJjYmQwMTkwM2QzYWFmNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGE5MDI1Njg4NmMyNGRmYjg3ZGE5YTIzMGM3NTNhNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NjUyNDc5OTk5OTk5OTUsIC03Ni44NDA5MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzgyMTVlYzZiODk0NDcyMmIxODBiODc0MDJmYThjZmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzUxOTU3M2VjMmEzNDg5NWIwMTBhYzM2ZjljNjliNGYgPSAkKGA8ZGl2IGlkPSJodG1sXzM1MTk1NzNlYzJhMzQ4OTViMDEwYWMzNmY5YzY5YjRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Bcmsgb2YgR3JhY2UgTWlzc2lvbiwgSW5jPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODIxNWVjNmI4OTQ0NzIyYjE4MGI4NzQwMmZhOGNmZi5zZXRDb250ZW50KGh0bWxfMzUxOTU3M2VjMmEzNDg5NWIwMTBhYzM2ZjljNjliNGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGE5MDI1Njg4NmMyNGRmYjg3ZGE5YTIzMGM3NTNhNjYuYmluZFBvcHVwKHBvcHVwXzc4MjE1ZWM2Yjg5NDQ3MjJiMTgwYjg3NDAyZmE4Y2ZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjUxNTY4OTY5OTc0YmU1OWZkNDRhODQzY2RmMWFkZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk2NTI0Nzk5OTk5OTk5NSwgLTc2Ljg0MDkzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTRmMTdlNTE0MzQ0MWRkYmY0N2ZlZTRmY2JmNmFhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOTNlMDkyMDUyMmI0ZDk3ODlhOWE2MDBjYTA2ZDVhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDkzZTA5MjA1MjJiNGQ5Nzg5YTlhNjAwY2EwNmQ1YTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRpdmluZSBDb25uZWN0aW9uIEZhaXRoIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxNGYxN2U1MTQzNDQxZGRiZjQ3ZmVlNGZjYmY2YWEwLnNldENvbnRlbnQoaHRtbF8wOTNlMDkyMDUyMmI0ZDk3ODlhOWE2MDBjYTA2ZDVhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYjUxNTY4OTY5OTc0YmU1OWZkNDRhODQzY2RmMWFkZS5iaW5kUG9wdXAocG9wdXBfYjE0ZjE3ZTUxNDM0NDFkZGJmNDdmZWU0ZmNiZjZhYTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4NDk5NDg4YmE2ODQxNDA4ZWRmZWUyMTZiODNhOTFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDg5MTcxNTEsIC03Ny4xNTQyNTQwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MTk1OTcwNGFjM2U0MWE0YWFhZDg2M2U2NGVlMTI3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNGFlM2M4ZjA1ZGQ0NTBkOWI5M2M4ZTM5M2E2NWM3MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTRhZTNjOGYwNWRkNDUwZDliOTNjOGUzOTNhNjVjNzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhlcml0YWdlIEhvdXNlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MTk1OTcwNGFjM2U0MWE0YWFhZDg2M2U2NGVlMTI3My5zZXRDb250ZW50KGh0bWxfMTRhZTNjOGYwNWRkNDUwZDliOTNjOGUzOTNhNjVjNzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjg0OTk0ODhiYTY4NDE0MDhlZGZlZTIxNmI4M2E5MWEuYmluZFBvcHVwKHBvcHVwXzUxOTU5NzA0YWMzZTQxYTRhYWFkODYzZTY0ZWUxMjczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjAwMjQzYTAwNjQ0NjlkYmEyMzQ4NDNmOGExNDVkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljc1OTAyMTk5OTk5OTk5NSwgLTc2LjkxNjU2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGIxMTZiZTkyMzNlNDExZjgyZDg4Y2IyMmJiNWRiYjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjYxY2FkNDQwMjY0NDgyOWI0ZWQxZjBhYzlmODNkZjYgPSAkKGA8ZGl2IGlkPSJodG1sX2I2MWNhZDQ0MDI2NDQ4MjliNGVkMWYwYWM5ZjgzZGY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVhdGVyIFJlZnVnZSBNaW5pc3RyaWVzIEluYzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGIxMTZiZTkyMzNlNDExZjgyZDg4Y2IyMmJiNWRiYjYuc2V0Q29udGVudChodG1sX2I2MWNhZDQ0MDI2NDQ4MjliNGVkMWYwYWM5ZjgzZGY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y2MDAyNDNhMDA2NDQ2OWRiYTIzNDg0M2Y4YTE0NWRmLmJpbmRQb3B1cChwb3B1cF9kYjExNmJlOTIzM2U0MTFmODJkODhjYjIyYmI1ZGJiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjFhM2Q3MjI4N2Y4NDUwYjkzYTlmNmQwYTZjMGRjZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43NTk5NTgwMDAwMDAwMDUsIC03Ni45MTc4NTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjOGQ1YThlZjJhOTRhOTU5YmUzYTJlNmU1NDA5MDQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxM2NjNjlhOTkxMTQ2NmE5Y2E3YWI0YTkyYjMxYTNkID0gJChgPGRpdiBpZD0iaHRtbF9lMTNjYzY5YTk5MTE0NjZhOWNhN2FiNGE5MmIzMWEzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rmlyc3QgTmV3IEhvcml6b24gQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJjOGQ1YThlZjJhOTRhOTU5YmUzYTJlNmU1NDA5MDQ5LnNldENvbnRlbnQoaHRtbF9lMTNjYzY5YTk5MTE0NjZhOWNhN2FiNGE5MmIzMWEzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMWEzZDcyMjg3Zjg0NTBiOTNhOWY2ZDBhNmMwZGNlYi5iaW5kUG9wdXAocG9wdXBfMmM4ZDVhOGVmMmE5NGE5NTliZTNhMmU2ZTU0MDkwNDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcyYTFkYTU0MjdmYjRlZTRiNjRlODY0MDMwNTU4NDY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDkyNTIzMTYsIC03Ny4xOTc5ODcyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NDhiNmM3YTZkMTI0MDZlOWY3MjIzYmRmZjJhODVkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kODE3YTZiMTkzM2Y0ZTE0OTBjNzVmNTZhNGVlZDMxYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDgxN2E2YjE5MzNmNGUxNDkwYzc1ZjU2YTRlZWQzMWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaXZlcnNpdHkgb2YgU2hhZHkgR3JvdmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0OGI2YzdhNmQxMjQwNmU5ZjcyMjNiZGZmMmE4NWQ1LnNldENvbnRlbnQoaHRtbF9kODE3YTZiMTkzM2Y0ZTE0OTBjNzVmNTZhNGVlZDMxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MmExZGE1NDI3ZmI0ZWU0YjY0ZTg2NDAzMDU1ODQ2NC5iaW5kUG9wdXAocG9wdXBfNjQ4YjZjN2E2ZDEyNDA2ZTlmNzIyM2JkZmYyYTg1ZDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1NDJiMjg0Yzk0ZDQyOWZhNDBiMWNkNGFlYjdlMjE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDEyNjQyLCAtNzYuOTIyMzI5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzRiY2JlNjk2MGQ0ODdkOGY3YTNiMDI2YTBjM2E4YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODhmMTZiN2VjOTA0OWVhOTIzM2M5M2I3NjE4OTZkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTg4ZjE2YjdlYzkwNDllYTkyMzNjOTNiNzYxODk2ZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbGxlZ2UgUGFyayBDaHVyY2ggb2YgdGhlIE5hemFyZW5lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzRiY2JlNjk2MGQ0ODdkOGY3YTNiMDI2YTBjM2E4YS5zZXRDb250ZW50KGh0bWxfMTg4ZjE2YjdlYzkwNDllYTkyMzNjOTNiNzYxODk2ZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTU0MmIyODRjOTRkNDI5ZmE0MGIxY2Q0YWViN2UyMTUuYmluZFBvcHVwKHBvcHVwXzNjNGJjYmU2OTYwZDQ4N2Q4ZjdhM2IwMjZhMGMzYThhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZmUwOTU1ODQ1MDI0N2MyYmIyMWFmNDMzNDI1MjgyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljc1NTgxOCwgLTc3LjAwMDgwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzcwNjk1MjU0NzM0ZDE2YjE2ZTg0YmZjN2RhMzMzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMjNmNWFmNDgwOGM0NDI0YWQwNTU1YjhjODg5NmUwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTIzZjVhZjQ4MDhjNDQyNGFkMDU1NWI4Yzg4OTZlMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZvcnQgV2FzaGluZ3RvbiBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzc3MDY5NTI1NDczNGQxNmIxNmU4NGJmYzdkYTMzM2Yuc2V0Q29udGVudChodG1sXzEyM2Y1YWY0ODA4YzQ0MjRhZDA1NTViOGM4ODk2ZTAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmZTA5NTU4NDUwMjQ3YzJiYjIxYWY0MzM0MjUyODI0LmJpbmRQb3B1cChwb3B1cF9jNzcwNjk1MjU0NzM0ZDE2YjE2ZTg0YmZjN2RhMzMzZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDBjN2NjZTQ2Njc0NDY2YmFjZjg0NmYyMTczNmJkNzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43NTQ5ODEsIC03Ny4wMTU0NjE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4NTdhZDQ1NWJiMTQ1ZjBhYWQ1NTBlMjhmZjFmYzYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiNDg5MjY4M2RkMzRjMGZhYzNkMDczMDE4YjhhNWM1ID0gJChgPGRpdiBpZD0iaHRtbF9mYjQ4OTI2ODNkZDM0YzBmYWMzZDA3MzAxOGI4YTVjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VXBsaWZ0IEluZGl2aWR1YWxzIGluIENocmlzdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDg1N2FkNDU1YmIxNDVmMGFhZDU1MGUyOGZmMWZjNjIuc2V0Q29udGVudChodG1sX2ZiNDg5MjY4M2RkMzRjMGZhYzNkMDczMDE4YjhhNWM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwYzdjY2U0NjY3NDQ2NmJhY2Y4NDZmMjE3MzZiZDc5LmJpbmRQb3B1cChwb3B1cF80ODU3YWQ0NTViYjE0NWYwYWFkNTUwZTI4ZmYxZmM2MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzAzNzgzMDM4N2YxNDE4N2I5NjU5ZGI3Yzk4YzBhZGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43NTM4NzM5OTk5OTk5OTYsIC03Ni45MjI0MDE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E3MDQxMTgyMTY2YjQxYTRhYzJhMWI5N2VmYzE2YThlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4YWIwYmViNGZhZDQ1ZjNhN2QzMDkwNDNhN2ExZTZlID0gJChgPGRpdiBpZD0iaHRtbF9iOGFiMGJlYjRmYWQ0NWYzYTdkMzA5MDQzYTdhMWU2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW91bnQgRW5ub24gQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3MDQxMTgyMTY2YjQxYTRhYzJhMWI5N2VmYzE2YThlLnNldENvbnRlbnQoaHRtbF9iOGFiMGJlYjRmYWQ0NWYzYTdkMzA5MDQzYTdhMWU2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MDM3ODMwMzg3ZjE0MTg3Yjk2NTlkYjdjOThjMGFkZS5iaW5kUG9wdXAocG9wdXBfYTcwNDExODIxNjZiNDFhNGFjMmExYjk3ZWZjMTZhOGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhOTg1YzcxNDZjYjRmOGY5MThmMjU3OGIxMmNmMDk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTg5NjAyMDAwMDAwMDA1LCAtNzYuODM3ODEwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOGRmNTUyNjAzZGE0OTQxODU3OWE1MDNiNDQxNzYyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZDlhODEzY2FiOWY0OGFhOGI4NDdkNzU4YTMxNjQxOCA9ICQoYDxkaXYgaWQ9Imh0bWxfYmQ5YTgxM2NhYjlmNDhhYThiODQ3ZDc1OGEzMTY0MTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkR1dmFsIEhpZ2ggU2Nob29sIDgyNTEtRk08L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4ZGY1NTI2MDNkYTQ5NDE4NTc5YTUwM2I0NDE3NjI0LnNldENvbnRlbnQoaHRtbF9iZDlhODEzY2FiOWY0OGFhOGI4NDdkNzU4YTMxNjQxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYTk4NWM3MTQ2Y2I0ZjhmOTE4ZjI1NzhiMTJjZjA5NC5iaW5kUG9wdXAocG9wdXBfYzhkZjU1MjYwM2RhNDk0MTg1NzlhNTAzYjQ0MTc2MjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNhYmY2MzM1ZmU3YTQ4OTM5ZWExMGU5MmI3YzRiZmMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDE2NTg0LCAtNzYuOTIwMDM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyMWIwN2IwYzBmMzRjMjY5YWMwNGU5NTA4OWVjOWMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5MmFmNzI0YjRiNDRmYTQ5ZTQ3ZDMzYWZlMDBhOGM4ID0gJChgPGRpdiBpZD0iaHRtbF9kOTJhZjcyNGI0YjQ0ZmE0OWU0N2QzM2FmZTAwYThjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RG9vciBDaHJpc3RpYW4gRmVsbG93c2hpcCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyMWIwN2IwYzBmMzRjMjY5YWMwNGU5NTA4OWVjOWMxLnNldENvbnRlbnQoaHRtbF9kOTJhZjcyNGI0YjQ0ZmE0OWU0N2QzM2FmZTAwYThjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYWJmNjMzNWZlN2E0ODkzOWVhMTBlOTJiN2M0YmZjMS5iaW5kUG9wdXAocG9wdXBfOTIxYjA3YjBjMGYzNGMyNjlhYzA0ZTk1MDg5ZWM5YzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4Y2RmMmE5YTc3NDRkNzNiMWY4Mjk5MjljYTY3NzI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODIzMjA5OTk5OTk5OTk2LCAtNzYuOTQ4MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWUwNzBjMDJiMzEyNGZmY2FkZjU0YWRiYTkzNGMwOWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTQxZGYzYWZmMTc4NDVlMDg2MWUyMzU3NzBkOTRjYjAgPSAkKGA8ZGl2IGlkPSJodG1sXzE0MWRmM2FmZjE3ODQ1ZTA4NjFlMjM1NzcwZDk0Y2IwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PeG9uIEhpbGwgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlMDcwYzAyYjMxMjRmZmNhZGY1NGFkYmE5MzRjMDlhLnNldENvbnRlbnQoaHRtbF8xNDFkZjNhZmYxNzg0NWUwODYxZTIzNTc3MGQ5NGNiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OGNkZjJhOWE3NzQ0ZDczYjFmODI5OTI5Y2E2NzcyNi5iaW5kUG9wdXAocG9wdXBfZWUwNzBjMDJiMzEyNGZmY2FkZjU0YWRiYTkzNGMwOWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjMjE0MjU3NDI3NTQ4ZDJhZTdiY2ZmOTdkZDBlOWZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjM4NjEyNjMsIC03OC43NjAwNTc0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Yzc5YzBkOGFjZjU0NWUwYjU5OGQ1ZjE2Njk1MTI4MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81N2M2N2QzMzZkN2U0YTMzYWVlMTc1Mzk2YWUzNmNhMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTdjNjdkMzM2ZDdlNGEzM2FlZTE3NTM5NmFlMzZjYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNlY29uZCBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM3OWMwZDhhY2Y1NDVlMGI1OThkNWYxNjY5NTEyODIuc2V0Q29udGVudChodG1sXzU3YzY3ZDMzNmQ3ZTRhMzNhZWUxNzUzOTZhZTM2Y2EyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjMjE0MjU3NDI3NTQ4ZDJhZTdiY2ZmOTdkZDBlOWZjLmJpbmRQb3B1cChwb3B1cF85Yzc5YzBkOGFjZjU0NWUwYjU5OGQ1ZjE2Njk1MTI4MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2UyMzM1OTU5OWJmNGE1MjgyYmI2NzJmODIyMWY2MDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45ODIwMzYxNiwgLTc2LjU2NjE1NTY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzZjJmNzVkNDhjNDRjZWQ4ZmFmZjAyYTJiZDI3YWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhM2Q1YTkxZWM2YzRhOGRiNWZmOWY4MDBjNDczOGM2ID0gJChgPGRpdiBpZD0iaHRtbF84YTNkNWE5MWVjNmM0YThkYjVmZjlmODAwYzQ3MzhjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW5uZSBBcnVuZGVsIENvdW50eSBEZXBhcnRtZW50IG9mIEhlYWx0aDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzNmMmY3NWQ0OGM0NGNlZDhmYWZmMDJhMmJkMjdhYzIuc2V0Q29udGVudChodG1sXzhhM2Q1YTkxZWM2YzRhOGRiNWZmOWY4MDBjNDczOGM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NlMjMzNTk1OTliZjRhNTI4MmJiNjcyZjgyMjFmNjA3LmJpbmRQb3B1cChwb3B1cF8zM2YyZjc1ZDQ4YzQ0Y2VkOGZhZmYwMmEyYmQyN2FjMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWY4ZTNiMTFkOWI3NDQyYmE4OTQ2MjU3OGIwMDU2ZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41NzU1MzYwNywgLTc2Ljk5NDQ4Mjc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1NzFlODA2Y2IyMzQ3ODM4NjkyYmI4ZmIzODhhMmNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlMDQ4ZDA3ZTVkODRmZTY5OWU4NjhlYzg5ZThkOTExID0gJChgPGRpdiBpZD0iaHRtbF9iZTA0OGQwN2U1ZDg0ZmU2OTllODY4ZWM4OWU4ZDkxMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2Fycm9sbCBDb3VudHkgRm9vZCBTdW5kYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1NzFlODA2Y2IyMzQ3ODM4NjkyYmI4ZmIzODhhMmNkLnNldENvbnRlbnQoaHRtbF9iZTA0OGQwN2U1ZDg0ZmU2OTllODY4ZWM4OWU4ZDkxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZjhlM2IxMWQ5Yjc0NDJiYTg5NDYyNTc4YjAwNTZkYi5iaW5kUG9wdXAocG9wdXBfMjU3MWU4MDZjYjIzNDc4Mzg2OTJiYjhmYjM4OGEyY2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0MTJjM2I5MGU0MjRmZjU4NTRjZDcwMzg5ZTFlOGU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjIxMzI2NjEsIC03Ny40MTI0MTU5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTg1Y2MzNmQxMDQ0MzNhOWI5MjgyZjlkN2IxZmMyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hY2JjMTkxMTlmMzQ0Mzc0OWI2OGQzNWViN2QwMzE3YyA9ICQoYDxkaXYgaWQ9Imh0bWxfYWNiYzE5MTE5ZjM0NDM3NDliNjhkMzVlYjdkMDMxN2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRodXJtb250IEZvb2QgQmFuazwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGU4NWNjMzZkMTA0NDMzYTliOTI4MmY5ZDdiMWZjMjUuc2V0Q29udGVudChodG1sX2FjYmMxOTExOWYzNDQzNzQ5YjY4ZDM1ZWI3ZDAzMTdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0MTJjM2I5MGU0MjRmZjU4NTRjZDcwMzg5ZTFlOGU3LmJpbmRQb3B1cChwb3B1cF84ZTg1Y2MzNmQxMDQ0MzNhOWI5MjgyZjlkN2IxZmMyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzcxODIwNzk2M2FlNGE3ODg1ZjgyMjVmNDE4NTRiOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45ODQwNDYxOCwgLTc2LjUzMzUyOTA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjODA5NWE0ODMxODQ4MmI5MjEwOTQ2OTU3YWUxZjg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4NDc1MWZkN2ZmZTQyNWE5YzJhOWVkZDU3MGU2NWZkID0gJChgPGRpdiBpZD0iaHRtbF9mODQ3NTFmZDdmZmU0MjVhOWMyYTllZGQ1NzBlNjVmZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGlnaHQgSG91c2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjODA5NWE0ODMxODQ4MmI5MjEwOTQ2OTU3YWUxZjg5LnNldENvbnRlbnQoaHRtbF9mODQ3NTFmZDdmZmU0MjVhOWMyYTllZGQ1NzBlNjVmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNzE4MjA3OTYzYWU0YTc4ODVmODIyNWY0MTg1NGI5OS5iaW5kUG9wdXAocG9wdXBfNmM4MDk1YTQ4MzE4NDgyYjkyMTA5NDY5NTdhZTFmODkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JjMjUxZDcxODFjNDQ2ZTRiNDdkMGQ3YmJhNDgwYjc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjUxODUzMTIsIC03OC43NjIwNjc0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYzRmMjdkMDY1YjY0NTYzOTVmNGJlMzM3MWIyYmViYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNjYwMDE4MmJjYWU0YzQxYTJiZjNhMmE2YjY4MjFkMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjY2MDAxODJiY2FlNGM0MWEyYmYzYTJhNmI2ODIxZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkN1bWJlcmxhbmQgQXJtczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGM0ZjI3ZDA2NWI2NDU2Mzk1ZjRiZTMzNzFiMmJlYmIuc2V0Q29udGVudChodG1sX2Y2NjAwMTgyYmNhZTRjNDFhMmJmM2EyYTZiNjgyMWQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JjMjUxZDcxODFjNDQ2ZTRiNDdkMGQ3YmJhNDgwYjc5LmJpbmRQb3B1cChwb3B1cF8wYzRmMjdkMDY1YjY0NTYzOTVmNGJlMzM3MWIyYmViYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzFlYjJiOTEyN2FkNDVkMTg4ZmRhYzlhZDBjNmY5N2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40MjU3MTI1MywgLTc2Ljc3NjM0OTA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0MDlmMmViMGY0MjQyNmU4NDE1ZmQ1ZDIwMmRiY2ExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhMzEyZmVhMTQxMDQ5ODFhMTExNjk1NTY4NDYxYzkzID0gJChgPGRpdiBpZD0iaHRtbF8zYTMxMmZlYTE0MTA0OTgxYTExMTY5NTU2ODQ2MWM5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RldmVuc29uIFVuaXZlcnNpdHk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0MDlmMmViMGY0MjQyNmU4NDE1ZmQ1ZDIwMmRiY2ExLnNldENvbnRlbnQoaHRtbF8zYTMxMmZlYTE0MTA0OTgxYTExMTY5NTU2ODQ2MWM5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMWViMmI5MTI3YWQ0NWQxODhmZGFjOWFkMGM2Zjk3Yi5iaW5kUG9wdXAocG9wdXBfMzQwOWYyZWIwZjQyNDI2ZTg0MTVmZDVkMjAyZGJjYTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ2NmZiZTg2MmMzZTQxM2FiMDQ1NjNhYWVkM2ZlMmRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjg3MjA0NTcsIC03Ni42MTQ5ODU3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOTE5ODM5YTA4Yzc0NjEzYWRlM2NlNjE5M2UxY2Q4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYzk4YzhiODY2ZTM0OGQxOTA0Yzc4YzY2MTcwNzFmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2M5OGM4Yjg2NmUzNDhkMTkwNGM3OGM2NjE3MDcxZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjItMS0xIE1EQFVXQ008L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5MTk4MzlhMDhjNzQ2MTNhZGUzY2U2MTkzZTFjZDhjLnNldENvbnRlbnQoaHRtbF8zYzk4YzhiODY2ZTM0OGQxOTA0Yzc4YzY2MTcwNzFmMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NjZmYmU4NjJjM2U0MTNhYjA0NTYzYWFlZDNmZTJkZS5iaW5kUG9wdXAocG9wdXBfMjkxOTgzOWEwOGM3NDYxM2FkZTNjZTYxOTNlMWNkOGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyMjRmMjczZTYyNTQ2NzFhMDNlYmE3Y2MwODI4YjM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDQ1MzcxODQsIC03Ni42MjA2NTg3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNDY2NjU0YzE3ZGY0ZTk4YTM3MDA4ZDYxMjNhNWZjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOTEzYmI3N2E3NTk0MGI4YTQwMWNjN2ZkNzI1NWIwMSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjkxM2JiNzdhNzU5NDBiOGE0MDFjYzdmZDcyNTViMDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZGWVMgTWluaXN0cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0NjY2NTRjMTdkZjRlOThhMzcwMDhkNjEyM2E1ZmM1LnNldENvbnRlbnQoaHRtbF9iOTEzYmI3N2E3NTk0MGI4YTQwMWNjN2ZkNzI1NWIwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMjI0ZjI3M2U2MjU0NjcxYTAzZWJhN2NjMDgyOGIzNy5iaW5kUG9wdXAocG9wdXBfZTQ2NjY1NGMxN2RmNGU5OGEzNzAwOGQ2MTIzYTVmYzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFhYTRjNGRhYjQ1MzQ2YzU5MzFlNDA1NjhlYTczZGQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNzg3MDMyNDcsIC03Ni4yMjU0NzMwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lN2NiZjA0OWZlMDM0OTczOGRkMzY3ODg3OGE1NDhkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MTQ5NTdlMWQyYmU0ZWFiYjBmNTZjNzc5MTQzZGUzYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjE0OTU3ZTFkMmJlNGVhYmIwZjU2Yzc3OTE0M2RlM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBNaWNoYWVscyBBZHVsdCAmIFlvdXRoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lN2NiZjA0OWZlMDM0OTczOGRkMzY3ODg3OGE1NDhkOS5zZXRDb250ZW50KGh0bWxfNjE0OTU3ZTFkMmJlNGVhYmIwZjU2Yzc3OTE0M2RlM2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWFhNGM0ZGFiNDUzNDZjNTkzMWU0MDU2OGVhNzNkZDMuYmluZFBvcHVwKHBvcHVwX2U3Y2JmMDQ5ZmUwMzQ5NzM4ZGQzNjc4ODc4YTU0OGQ5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ODY0NGY4YWI3NmM0YzhhYWU2OGU0M2NjNzliNGIwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwNTMzNDUzLCAtNzYuNjE3MTYyMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjI1ZDI1MGE1NWJlNGIxM2E2Njc2NGQ0YmRmMzZmOWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzFkZTYwNTE0NjQxNGE0OWFjNjc1NjBlMjA4ZmM5OTMgPSAkKGA8ZGl2IGlkPSJodG1sXzMxZGU2MDUxNDY0MTRhNDlhYzY3NTYwZTIwOGZjOTkzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Vbml2ZXJzaXR5IG9mIEJhbHRpbW9yZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjI1ZDI1MGE1NWJlNGIxM2E2Njc2NGQ0YmRmMzZmOWMuc2V0Q29udGVudChodG1sXzMxZGU2MDUxNDY0MTRhNDlhYzY3NTYwZTIwOGZjOTkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY4NjQ0ZjhhYjc2YzRjOGFhZTY4ZTQzY2M3OWI0YjA0LmJpbmRQb3B1cChwb3B1cF82MjVkMjUwYTU1YmU0YjEzYTY2NzY0ZDRiZGYzNmY5YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNiNjhhN2NlNDRmNDU2Y2JkMzlmNWRkZjZiOWNmZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42NTEyMzE3NywgLTc3LjE3MDI3NTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjMmVhYTYyZmFlZDRmNWU5NDdiYWYzZjIxNjMyZTk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjNjdjYmQyZTBiMjQwNmJiNGE5NDlmYjA3ZWVlZDk4ID0gJChgPGRpdiBpZD0iaHRtbF9mYzY3Y2JkMmUwYjI0MDZiYjRhOTQ5ZmIwN2VlZWQ5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGFuZXl0b3duIEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYzJlYWE2MmZhZWQ0ZjVlOTQ3YmFmM2YyMTYzMmU5OS5zZXRDb250ZW50KGh0bWxfZmM2N2NiZDJlMGIyNDA2YmI0YTk0OWZiMDdlZWVkOTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDNiNjhhN2NlNDRmNDU2Y2JkMzlmNWRkZjZiOWNmZmYuYmluZFBvcHVwKHBvcHVwX2ZjMmVhYTYyZmFlZDRmNWU5NDdiYWYzZjIxNjMyZTk5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDM0YjRlMTU5NmM0NTk3ODg3YmQ5YmIyMGE4OTI4MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI4MzEyODg5LCAtNzYuNjc2NjE4MjAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZThiNTA4MDIwMGZjNDllZGFiMmVhMDU0NmExNTYxMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTg3MmNlMGE1NjBhNDJkM2JmMDQ1ZDYyYmZkMmViYTMgPSAkKGA8ZGl2IGlkPSJodG1sXzk4NzJjZTBhNTYwYTQyZDNiZjA0NWQ2MmJmZDJlYmEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qcm9qZWN0IFBMQVNFIEVtZXJnZW5jeSBTaGVsdGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOGI1MDgwMjAwZmM0OWVkYWIyZWEwNTQ2YTE1NjExNC5zZXRDb250ZW50KGh0bWxfOTg3MmNlMGE1NjBhNDJkM2JmMDQ1ZDYyYmZkMmViYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDAzNGI0ZTE1OTZjNDU5Nzg4N2JkOWJiMjBhODkyODMuYmluZFBvcHVwKHBvcHVwX2U4YjUwODAyMDBmYzQ5ZWRhYjJlYTA1NDZhMTU2MTE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjA2Y2FlZmE0NTM0ZDg3YTgyMGEwNzg3ZDVjNDljZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5ODg3Mjc0LCAtNzYuNjI2NDU0NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTVhM2Q3ODAwZGU5NDA0YThhNWZmMzRhODA3OWRkM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjQyYWRjMjI5ZjhmNDExM2E0MzE1Y2M1ZGE2ZTdkYjIgPSAkKGA8ZGl2IGlkPSJodG1sXzY0MmFkYzIyOWY4ZjQxMTNhNDMxNWNjNWRhNmU3ZGIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IaXN0b3JpYyBTYW11ZWwgQ29sZXJpZGdlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNWEzZDc4MDBkZTk0MDRhOGE1ZmYzNGE4MDc5ZGQzZi5zZXRDb250ZW50KGh0bWxfNjQyYWRjMjI5ZjhmNDExM2E0MzE1Y2M1ZGE2ZTdkYjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzYwNmNhZWZhNDUzNGQ4N2E4MjBhMDc4N2Q1YzQ5Y2YuYmluZFBvcHVwKHBvcHVwX2U1YTNkNzgwMGRlOTQwNGE4YTVmZjM0YTgwNzlkZDNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNTYyYjE3NzY5Yzg0M2Q0OTVmN2I4MWRkOTcxNDRlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQxMTcwOTQ1LCAtNzcuNDExMjI5MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTg5ZGYyNDQyZGMzNDE4MWIzMGY2MWJlNTcxN2NhNzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzczMGIxMjk0MmM3NGVhYTllNmNjNTg2NmU0MTkzZGUgPSAkKGA8ZGl2IGlkPSJodG1sX2M3MzBiMTI5NDJjNzRlYWE5ZTZjYzU4NjZlNDE5M2RlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmVkZXJpY2sgQ29tbSBBY3Rpb24gQWdlbmN5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hODlkZjI0NDJkYzM0MTgxYjMwZjYxYmU1NzE3Y2E3NC5zZXRDb250ZW50KGh0bWxfYzczMGIxMjk0MmM3NGVhYTllNmNjNTg2NmU0MTkzZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDU2MmIxNzc2OWM4NDNkNDk1ZjdiODFkZDk3MTQ0ZWIuYmluZFBvcHVwKHBvcHVwX2E4OWRmMjQ0MmRjMzQxODFiMzBmNjFiZTU3MTdjYTc0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOTg2MWQ4NzdlMzI0MDZkOGRlZGYxNmIwYmI2MTdjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI3NjQ0OTE4LCAtNzYuNzM5NTE3NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDVjYjNlMDdkNTYxNDM4Yjk2MjdkNzg5OTI4YzU0NzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjNjOGM3ODJhMjE1NGQ2OWIzYmM2YzYxMzcxZWMwNjkgPSAkKGA8ZGl2IGlkPSJodG1sX2YzYzhjNzgyYTIxNTRkNjliM2JjNmM2MTM3MWVjMDY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQW1hemluZyBHcmFjZSBDaHVyY2ggSW50bC48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1Y2IzZTA3ZDU2MTQzOGI5NjI3ZDc4OTkyOGM1NDcyLnNldENvbnRlbnQoaHRtbF9mM2M4Yzc4MmEyMTU0ZDY5YjNiYzZjNjEzNzFlYzA2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOTg2MWQ4NzdlMzI0MDZkOGRlZGYxNmIwYmI2MTdjZS5iaW5kUG9wdXAocG9wdXBfNDVjYjNlMDdkNTYxNDM4Yjk2MjdkNzg5OTI4YzU0NzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1ZmIwYWI5NjRkMTQzNzU5NjNhNTZkMDg1NTM5YjNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNTU5ODMyNzUsIC03Ni4wNzM1MzcyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMjE5MTdmMzY3MDk0ZDljYmY5ZDNmYTA1NjFmNDRjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMjJmOGJiZmU1ODA0ZWY3YjhhODQxYTRiZDIyNWFiNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzIyZjhiYmZlNTgwNGVmN2I4YTg0MWE0YmQyMjVhYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlbG1hcnZhIENvbW11bml0eSBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EyMTkxN2YzNjcwOTRkOWNiZjlkM2ZhMDU2MWY0NGMzLnNldENvbnRlbnQoaHRtbF9jMjJmOGJiZmU1ODA0ZWY3YjhhODQxYTRiZDIyNWFiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNWZiMGFiOTY0ZDE0Mzc1OTYzYTU2ZDA4NTUzOWIzZC5iaW5kUG9wdXAocG9wdXBfYTIxOTE3ZjM2NzA5NGQ5Y2JmOWQzZmEwNTYxZjQ0YzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0ODdjNzBkMTczMTQwNTNiNjIzNDhmNDZkN2VjYjA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjk0MDUzMjksIC03Ni40NTQzMDk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OGY4MjBiMDZmOTg0NTJlYjlkZDZiYmIwNjk5Yzk1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGVhZTY0M2UzOTc0YmU2YmJkY2NjNWRhYzk4OWJhMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjRlYWU2NDNlMzk3NGJlNmJiZGNjYzVkYWM5ODliYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlZXAgQ3JlZWsgTWlkZGxlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OGY4MjBiMDZmOTg0NTJlYjlkZDZiYmIwNjk5Yzk1My5zZXRDb250ZW50KGh0bWxfNjRlYWU2NDNlMzk3NGJlNmJiZGNjYzVkYWM5ODliYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzQ4N2M3MGQxNzMxNDA1M2I2MjM0OGY0NmQ3ZWNiMDUuYmluZFBvcHVwKHBvcHVwXzg4ZjgyMGIwNmY5ODQ1MmViOWRkNmJiYjA2OTljOTUzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YzI1NDY3NjhiZWU0N2Y0OTM4MGEzMmFhZmQ5YjY3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5NjExMzk2LCAtNzYuNjE1NTk1ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDFjN2NiNjA0NTNjNDUxN2FhMDJkYTZjZmQ1NWQ4YjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzBhOWU4ZTQ1YTk3NDkzZTkwODZmZWZiOGMyZTYzNDkgPSAkKGA8ZGl2IGlkPSJodG1sX2MwYTllOGU0NWE5NzQ5M2U5MDg2ZmVmYjhjMmU2MzQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0bWluc3RlciBIb3VzaW5nIEFwYXJ0bWVudHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxYzdjYjYwNDUzYzQ1MTdhYTAyZGE2Y2ZkNTVkOGIyLnNldENvbnRlbnQoaHRtbF9jMGE5ZThlNDVhOTc0OTNlOTA4NmZlZmI4YzJlNjM0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YzI1NDY3NjhiZWU0N2Y0OTM4MGEzMmFhZmQ5YjY3Mi5iaW5kUG9wdXAocG9wdXBfMDFjN2NiNjA0NTNjNDUxN2FhMDJkYTZjZmQ1NWQ4YjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1NDBhMzRiZjhmYzQyZmJiNDhkNTkyZDA2NmY0MmEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTg5NDM1MjcsIC03Ny42NTc4ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMzU5NWI4NTcxYTg0MWY1YTc5NmQxYjY5YTJmN2VkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZjVmMzM1ZjVmMGU0YzRmYjk4MzA0MzljMmI0M2ZhMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMGY1ZjMzNWY1ZjBlNGM0ZmI5ODMwNDM5YzJiNDNmYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNodXJjaCBvZiBDaHJpc3Q8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNTk1Yjg1NzFhODQxZjVhNzk2ZDFiNjlhMmY3ZWQzLnNldENvbnRlbnQoaHRtbF8wZjVmMzM1ZjVmMGU0YzRmYjk4MzA0MzljMmI0M2ZhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NTQwYTM0YmY4ZmM0MmZiYjQ4ZDU5MmQwNjZmNDJhMy5iaW5kUG9wdXAocG9wdXBfMDM1OTViODU3MWE4NDFmNWE3OTZkMWI2OWEyZjdlZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y1ZTAxMmQxZWQzMjQ4NjdiYzE2ZmQ2YzkwNGZjYzQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzQ1NzU4MTcsIC03NS4yMTg1Njc2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjYyYjdjNjZkNjQ0ODZjODk5YmJjYWYwZjY5ZTk2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMGIxMDBkNzMyOWM0MWM3OGE4ZjYzOWNlOTMzN2IwZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDBiMTAwZDczMjljNDFjNzhhOGY2MzljZTkzMzdiMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNoYXJpbmcgVGhlIEhhcnZlc3Q8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyNjJiN2M2NmQ2NDQ4NmM4OTliYmNhZjBmNjllOTYyLnNldENvbnRlbnQoaHRtbF8wMGIxMDBkNzMyOWM0MWM3OGE4ZjYzOWNlOTMzN2IwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNWUwMTJkMWVkMzI0ODY3YmMxNmZkNmM5MDRmY2M0Ny5iaW5kUG9wdXAocG9wdXBfNTI2MmI3YzY2ZDY0NDg2Yzg5OWJiY2FmMGY2OWU5NjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExMzQzZGYzYjRlYzRhZDU5NGE2NGUwZWRkNzdkMTIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzQ1NzU4MTcsIC03NS4yMTg1Njc2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hM2Y4YzIyNWQzM2U0ODg4ODZmN2VmNjViNjIzNDFhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82Mzc4NDE4NDVlZmQ0ZmI3OTczNTVmMWUyZDEwYzZiNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjM3ODQxODQ1ZWZkNGZiNzk3MzU1ZjFlMmQxMGM2YjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJ1Y2tpbmdoYW0gRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTNmOGMyMjVkMzNlNDg4ODg2ZjdlZjY1YjYyMzQxYTIuc2V0Q29udGVudChodG1sXzYzNzg0MTg0NWVmZDRmYjc5NzM1NWYxZTJkMTBjNmI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExMzQzZGYzYjRlYzRhZDU5NGE2NGUwZWRkNzdkMTIyLmJpbmRQb3B1cChwb3B1cF9hM2Y4YzIyNWQzM2U0ODg4ODZmN2VmNjViNjIzNDFhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzJhMmIzYWUxZjE2NDk1OWJhYTEwOWE3YWMyNjdiY2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43OTE4NjkyNiwgLTc2LjA2NjI4NTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1NzNkMWRkYzYyNDRiMGNiMThiMzdmMjlmOTRlMmUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNlNGJkMjkwZTcxOTQ4YjM5MTJiZWE1ZDQ4NmNlNmI2ID0gJChgPGRpdiBpZD0iaHRtbF8zZTRiZDI5MGU3MTk0OGIzOTEyYmVhNWQ0ODZjZTZiNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFzdG9uIENodXJjaCBvZiBHb2Q8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1NzNkMWRkYzYyNDRiMGNiMThiMzdmMjlmOTRlMmUxLnNldENvbnRlbnQoaHRtbF8zZTRiZDI5MGU3MTk0OGIzOTEyYmVhNWQ0ODZjZTZiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MmEyYjNhZTFmMTY0OTU5YmFhMTA5YTdhYzI2N2JjYy5iaW5kUG9wdXAocG9wdXBfNTU3M2QxZGRjNjI0NGIwY2IxOGIzN2YyOWY5NGUyZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwNWM5MTM0ZjNhYTQ2ZjQ5Yzk2ZDgxOTNkMTRiMTQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDU0MjY5NzUsIC03Ni41MTU5MTU0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTExYzUyZjcyOWQ0N2JhYTEzZWJiMzNjMjY2MmQ3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NzgzMzUzMDA3ZGU0OWYzOThlOGFlNmFiMmQzNmQ2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjc4MzM1MzAwN2RlNDlmMzk4ZThhZTZhYjJkMzZkNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFubmUgQXJ1bmRlbCBDb21tdW5pdHkgQ29sbGVnZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjUxMWM1MmY3MjlkNDdiYWExM2ViYjMzYzI2NjJkN2Euc2V0Q29udGVudChodG1sXzY3ODMzNTMwMDdkZTQ5ZjM5OGU4YWU2YWIyZDM2ZDZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkwNWM5MTM0ZjNhYTQ2ZjQ5Yzk2ZDgxOTNkMTRiMTQxLmJpbmRQb3B1cChwb3B1cF9iNTExYzUyZjcyOWQ0N2JhYTEzZWJiMzNjMjY2MmQ3YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDA2N2IxNjliMTk1NGJlNThlZDIyNGIzNWJiNTNmZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMTc0MTQzNiwgLTc3LjYxMTU4Njk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IwN2Y5ZGUxZjQyYjRjZjFhNzU1M2QzNmJiZTdlZjJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0MjQyYjZkZTg1MjQ3YzU5ZTIyM2I4N2ExMzY4MmVjID0gJChgPGRpdiBpZD0iaHRtbF8xNDI0MmI2ZGU4NTI0N2M1OWUyMjNiODdhMTM2ODJlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJ1bnN3aWNrIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMDdmOWRlMWY0MmI0Y2YxYTc1NTNkMzZiYmU3ZWYyZS5zZXRDb250ZW50KGh0bWxfMTQyNDJiNmRlODUyNDdjNTllMjIzYjg3YTEzNjgyZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDA2N2IxNjliMTk1NGJlNThlZDIyNGIzNWJiNTNmZTcuYmluZFBvcHVwKHBvcHVwX2IwN2Y5ZGUxZjQyYjRjZjFhNzU1M2QzNmJiZTdlZjJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hM2YzZjM1MWE2MWI0MjM3YTg4YTQ5MzMxMTE2MmQ2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY1Mzg4ODY2LCAtNzguOTM0MTk1NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODY1MzVkNzdhMzdiNDQzMTkzMDNmNTIxMzE3MTIwMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2YzZjBjM2I3YjQ0NDFjMjg3ZjE3ZjJlZDRkZTk4ZGYgPSAkKGA8ZGl2IGlkPSJodG1sXzdmM2YwYzNiN2I0NDQxYzI4N2YxN2YyZWQ0ZGU5OGRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gcm9zdGJ1cmcgSG91c2luZyBBdXRob3JpdHk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2NTM1ZDc3YTM3YjQ0MzE5MzAzZjUyMTMxNzEyMDMyLnNldENvbnRlbnQoaHRtbF83ZjNmMGMzYjdiNDQ0MWMyODdmMTdmMmVkNGRlOThkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hM2YzZjM1MWE2MWI0MjM3YTg4YTQ5MzMxMTE2MmQ2MS5iaW5kUG9wdXAocG9wdXBfODY1MzVkNzdhMzdiNDQzMTkzMDNmNTIxMzE3MTIwMzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhNjA0NDczNTZkYjQyZTI5ZmMzNDA3YzRmNzUyMDI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjQyMzQxMjYsIC03Ny43MjU1Mzk1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNzdmMmQ5MzI4ODc0NjE3YmM4ODI5YTkwYjU0MjkzMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOGI4MDRmMTcwMmY0NTM5ODNkM2U2ZjBiNGJjNWI1ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjhiODA0ZjE3MDJmNDUzOTgzZDNlNmYwYjRiYzViNWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBKb2huJ3MgRXBpc2NvcGFsIENodXJjaC1DQUZFPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNzdmMmQ5MzI4ODc0NjE3YmM4ODI5YTkwYjU0MjkzMy5zZXRDb250ZW50KGh0bWxfMjhiODA0ZjE3MDJmNDUzOTgzZDNlNmYwYjRiYzViNWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmE2MDQ0NzM1NmRiNDJlMjlmYzM0MDdjNGY3NTIwMjkuYmluZFBvcHVwKHBvcHVwX2Q3N2YyZDkzMjg4NzQ2MTdiYzg4MjlhOTBiNTQyOTMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZjMwZjI5YTkyYzA0ZTZmOTlmYWExZDc4YTNmNGMzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5MDY1MDAyLCAtNzYuNjAyMjA1NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDRlM2Q0NGJjNmIxNDI1YTg1MDAzNzY2Y2RhODdhMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjg3ODQ5ZDdiMjk4NGVlNWJhNmRjMTQyZTQzNGFmZjUgPSAkKGA8ZGl2IGlkPSJodG1sXzI4Nzg0OWQ3YjI5ODRlZTViYTZkYzE0MmU0MzRhZmY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IZWxwaW5nIFVwIE1pc3Npb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ0ZTNkNDRiYzZiMTQyNWE4NTAwMzc2NmNkYTg3YTE2LnNldENvbnRlbnQoaHRtbF8yODc4NDlkN2IyOTg0ZWU1YmE2ZGMxNDJlNDM0YWZmNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZjMwZjI5YTkyYzA0ZTZmOTlmYWExZDc4YTNmNGMzZi5iaW5kUG9wdXAocG9wdXBfNDRlM2Q0NGJjNmIxNDI1YTg1MDAzNzY2Y2RhODdhMTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVmN2U3NzZlMTUzYzQ2ZGI5ZTZiOWIwODg3YTUwODhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDI5ODE4MzQsIC03Ny40MTI4MDc3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMzBkMTk4NGQ3OWQ0NjU3YTU0ZTdkNThiODU3ZDc2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTI5YmI1ODk1NGM0Y2NmODNhYWU4OTZmMTAxNWM2ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfODEyOWJiNTg5NTRjNGNjZjgzYWFlODk2ZjEwMTVjNmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoIEZyZWRlcmljayBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMzBkMTk4NGQ3OWQ0NjU3YTU0ZTdkNThiODU3ZDc2Ny5zZXRDb250ZW50KGh0bWxfODEyOWJiNTg5NTRjNGNjZjgzYWFlODk2ZjEwMTVjNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWY3ZTc3NmUxNTNjNDZkYjllNmI5YjA4ODdhNTA4OGQuYmluZFBvcHVwKHBvcHVwX2QzMGQxOTg0ZDc5ZDQ2NTdhNTRlN2Q1OGI4NTdkNzY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zM2IzZDUwNzdjN2U0NGQ1OGM5YzFkNjhmYzZkNjE2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwMjg3OTMxLCAtNzYuNjA0OTI1MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjFkZDliZWE3Y2RmNDU0MWEwZWViYTUwODIwODE1NjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGNiOTMzNTA4NmYwNDIyMmJlMWQ1NjVhMzk5MTM0MWEgPSAkKGA8ZGl2IGlkPSJodG1sX2RjYjkzMzUwODZmMDQyMjJiZTFkNTY1YTM5OTEzNDFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Kb2huc3RvbiBTcXVhcmUgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjFkZDliZWE3Y2RmNDU0MWEwZWViYTUwODIwODE1NjMuc2V0Q29udGVudChodG1sX2RjYjkzMzUwODZmMDQyMjJiZTFkNTY1YTM5OTEzNDFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzYjNkNTA3N2M3ZTQ0ZDU4YzljMWQ2OGZjNmQ2MTZhLmJpbmRQb3B1cChwb3B1cF82MWRkOWJlYTdjZGY0NTQxYTBlZWJhNTA4MjA4MTU2MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzQ1YWFlZjYyMzNiNDE3MmI0MWI4MTFmNjFlY2NjMGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTE0OTMwMiwgLTc2LjYwNjAzMzU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhY2IwNzVjNjE2YjQ0ODZhMjQ2YzRlZjY3MTQzZDg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E2YzhlYmIyM2UzZDQwMGM5YTZiMDk1ZTlmMzk1MmIzID0gJChgPGRpdiBpZD0iaHRtbF9hNmM4ZWJiMjNlM2Q0MDBjOWE2YjA5NWU5ZjM5NTJiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIFZpbmNlbnQgRW1lcmdlbmN5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYWNiMDc1YzYxNmI0NDg2YTI0NmM0ZWY2NzE0M2Q4OS5zZXRDb250ZW50KGh0bWxfYTZjOGViYjIzZTNkNDAwYzlhNmIwOTVlOWYzOTUyYjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzQ1YWFlZjYyMzNiNDE3MmI0MWI4MTFmNjFlY2NjMGYuYmluZFBvcHVwKHBvcHVwX2ZhY2IwNzVjNjE2YjQ0ODZhMjQ2YzRlZjY3MTQzZDg5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTc3M2QyNWJhMjU0ZTllYjYxNjg5YjMwNzIyNTYwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjQxMzI4MjI1LCAtNzUuMDU4MDc0MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmRkZTY2YmQ4MGYyNDA5OTkyYjJhNzljZTg4YTVmMGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDEyNzA3MzYyZTVjNDcxYTgxMmQ3ZThhMWM0MjUzZWMgPSAkKGA8ZGl2IGlkPSJodG1sXzAxMjcwNzM2MmU1YzQ3MWE4MTJkN2U4YTFjNDI1M2VjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gUGV0ZXIncyBMdXRoZXJhbiBDaHVyY2ggT3BlbiBLZXR0bGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkZGU2NmJkODBmMjQwOTk5MmIyYTc5Y2U4OGE1ZjBhLnNldENvbnRlbnQoaHRtbF8wMTI3MDczNjJlNWM0NzFhODEyZDdlOGExYzQyNTNlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MTc3M2QyNWJhMjU0ZTllYjYxNjg5YjMwNzIyNTYwMC5iaW5kUG9wdXAocG9wdXBfNmRkZTY2YmQ4MGYyNDA5OTkyYjJhNzljZTg4YTVmMGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2YWI3ZTU4MDExMjQ0MGVhZTUyOTc0MTYwYTljYzkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzExODI5NTcsIC03Ni42MDA5OTA1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmFhMmNmNjcyNDk0NjYyYjJiZjgwMDk0NmE4NDk0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZGM0Zjc4YjgwY2U0OWQxOTViMDE5NDVmMzAzMmI4NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmRjNGY3OGI4MGNlNDlkMTk1YjAxOTQ1ZjMwMzJiODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxBTUIsIElOQzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJhYTJjZjY3MjQ5NDY2MmIyYmY4MDA5NDZhODQ5NDAuc2V0Q29udGVudChodG1sX2ZkYzRmNzhiODBjZTQ5ZDE5NWIwMTk0NWYzMDMyYjg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI2YWI3ZTU4MDExMjQ0MGVhZTUyOTc0MTYwYTljYzkxLmJpbmRQb3B1cChwb3B1cF82YmFhMmNmNjcyNDk0NjYyYjJiZjgwMDk0NmE4NDk0MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWZiZDhmNjlkZGUxNGZlODgxM2Y1MGVhMTY3ZTk2YWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDg5NTYyMSwgLTc2LjYxNDgzNzM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkZTQyODJhMWNhMTQ2ODZiZDQ3NTY3MThjZTFlN2QzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwYzVkMDVlZjk2ZDQ4ZDVhNTM3YmQ2ZDUxMjZmODEyID0gJChgPGRpdiBpZD0iaHRtbF9iMGM1ZDA1ZWY5NmQ0OGQ1YTUzN2JkNmQ1MTI2ZjgxMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhyZXNob2xkIEluYy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkZTQyODJhMWNhMTQ2ODZiZDQ3NTY3MThjZTFlN2QzLnNldENvbnRlbnQoaHRtbF9iMGM1ZDA1ZWY5NmQ0OGQ1YTUzN2JkNmQ1MTI2ZjgxMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZmJkOGY2OWRkZTE0ZmU4ODEzZjUwZWExNjdlOTZhZi5iaW5kUG9wdXAocG9wdXBfZGRlNDI4MmExY2ExNDY4NmJkNDc1NjcxOGNlMWU3ZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0ODI5ZDcxOWRmOTQ1M2FhMWM0NTQzZDI3YmE5YzM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzExMjk0NDcsIC03Ni42MTM2NzE1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTE1N2JhYTI4MzA0YTFmOGE4NzcxZmMxOTgxY2EzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMWE3MTlmZDgzOWI0ZmJkOGIwNTc2MzYyOWJlNWJkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjFhNzE5ZmQ4MzliNGZiZDhiMDU3NjM2MjliZTViZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJlLUVuZ2FnZW1lbnQgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTE1N2JhYTI4MzA0YTFmOGE4NzcxZmMxOTgxY2EzYS5zZXRDb250ZW50KGh0bWxfZjFhNzE5ZmQ4MzliNGZiZDhiMDU3NjM2MjliZTViZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQ4MjlkNzE5ZGY5NDUzYWExYzQ1NDNkMjdiYTljMzQuYmluZFBvcHVwKHBvcHVwXzk5MTU3YmFhMjgzMDRhMWY4YTg3NzFmYzE5ODFjYTNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYjY5MWE1M2E2OGE0MDNhOThjZjMyNzliODdlYzlkZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwODkxNjQ2LCAtNzYuNjEyNTQ1NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzhmMTgyZjM1YmNkNGE5MTg4OWQ3Mjk0N2I5ZWFlNjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzNjMWFmYjBkZWE5NDVhZDgwM2Q2Y2UzZWYzODg2YTQgPSAkKGA8ZGl2IGlkPSJodG1sX2MzYzFhZmIwZGVhOTQ1YWQ4MDNkNmNlM2VmMzg4NmE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXcgU2Vjb25kIE1pc3Npb25hcnkgQmFwdGlzdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzhmMTgyZjM1YmNkNGE5MTg4OWQ3Mjk0N2I5ZWFlNjEuc2V0Q29udGVudChodG1sX2MzYzFhZmIwZGVhOTQ1YWQ4MDNkNmNlM2VmMzg4NmE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiNjkxYTUzYTY4YTQwM2E5OGNmMzI3OWI4N2VjOWRlLmJpbmRQb3B1cChwb3B1cF8zOGYxODJmMzViY2Q0YTkxODg5ZDcyOTQ3YjllYWU2MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTJmMDNlNTg2N2ZlNDU2MDliMzk2MzAxM2U3ZDRjOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40NzI4NTM4MSwgLTc2LjYzMDg2NjM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0ZjJkZmM0MDYxMDQ5NmU5YTc2Y2Q0ZWQ1YmUzMGI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3N2YxOGNhMDNlYjQ5OTY5NTJjMTRjYWM0M2IxMTgyID0gJChgPGRpdiBpZD0iaHRtbF9lNzdmMThjYTAzZWI0OTk2OTUyYzE0Y2FjNDNiMTE4MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29ja2V5c3ZpbGxlIE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0ZjJkZmM0MDYxMDQ5NmU5YTc2Y2Q0ZWQ1YmUzMGI0LnNldENvbnRlbnQoaHRtbF9lNzdmMThjYTAzZWI0OTk2OTUyYzE0Y2FjNDNiMTE4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMmYwM2U1ODY3ZmU0NTYwOWIzOTYzMDEzZTdkNGM5YS5iaW5kUG9wdXAocG9wdXBfZjRmMmRmYzQwNjEwNDk2ZTlhNzZjZDRlZDViZTMwYjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwZDI4YTU5YjJlNTQ4MTRiZGRhY2E2ZjgxMTAwYTE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTYxMzAwMDUsIC03Ni42MTE4Mjc0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYWZiNDU3NTAyOWY0ZmUwYmMzOTdkOTc1NDM4MTI2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MmI3MGMwMWJjYjE0YjViOWY2MzE4MzdkZWI0ZTdhNCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTJiNzBjMDFiY2IxNGI1YjlmNjMxODM3ZGViNGU3YTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdsZW5kYWxlIEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYWZiNDU3NTAyOWY0ZmUwYmMzOTdkOTc1NDM4MTI2ZS5zZXRDb250ZW50KGh0bWxfOTJiNzBjMDFiY2IxNGI1YjlmNjMxODM3ZGViNGU3YTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjBkMjhhNTliMmU1NDgxNGJkZGFjYTZmODExMDBhMTguYmluZFBvcHVwKHBvcHVwX2RhZmI0NTc1MDI5ZjRmZTBiYzM5N2Q5NzU0MzgxMjZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjQ2MDEwNWU5MzU0ZjEzOThjOWNkMTU5YjdmNmU5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQxNTkwNiwgLTc2LjgwMDE0NDkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzYzAxZWM5NjNiNTQyMjk4NjhiZTYyZjMyNTM2MWU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhNjZlYWM4YWE3ZDQyMGQ4OWI2ODM5OTE4ZTgxNjkyID0gJChgPGRpdiBpZD0iaHRtbF8yYTY2ZWFjOGFhN2Q0MjBkODliNjgzOTkxOGU4MTY5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWxsIFRvZ2V0aGVyIE5ldHdvcms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzYzAxZWM5NjNiNTQyMjk4NjhiZTYyZjMyNTM2MWU5LnNldENvbnRlbnQoaHRtbF8yYTY2ZWFjOGFhN2Q0MjBkODliNjgzOTkxOGU4MTY5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MjQ2MDEwNWU5MzU0ZjEzOThjOWNkMTU5YjdmNmU5NC5iaW5kUG9wdXAocG9wdXBfZjNjMDFlYzk2M2I1NDIyOTg2OGJlNjJmMzI1MzYxZTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmYmY1M2FhZTMxYjRlZWU5MzcxNTg3YmVhYzg1YzM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMTc5ODY5ODEsIC03NS45MDE2ODgzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDc5Yzc4NTdhMjU0NGQzYjc3MzNjYjUzZTFhNGRlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjU4MzZkMjVlOWQ0NDI3OTJjNDAwOTVkODRkMTE2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzI1ODM2ZDI1ZTlkNDQyNzkyYzQwMDk1ZDg0ZDExNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hY2Vkb25pYSBVTUM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0NzljNzg1N2EyNTQ0ZDNiNzczM2NiNTNlMWE0ZGVmLnNldENvbnRlbnQoaHRtbF83MjU4MzZkMjVlOWQ0NDI3OTJjNDAwOTVkODRkMTE2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZmJmNTNhYWUzMWI0ZWVlOTM3MTU4N2JlYWM4NWMzOS5iaW5kUG9wdXAocG9wdXBfMDQ3OWM3ODU3YTI1NDRkM2I3NzMzY2I1M2UxYTRkZWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjZThhZjllNmRhZDRlMWZhZmM1OWRiODcxM2UyZWMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTQ2NDc2MTksIC03NS44ODM3MTg2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MmUwZmI4ZGQ1MDc0Nzk5YjU0YjA0ZmExYjU1NmNhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTZkNDYyNzgwOGM0ZjVjOTQwYTM4ZTA4NjJmZmQ5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGE2ZDQ2Mjc4MDhjNGY1Yzk0MGEzOGUwODYyZmZkOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpZGdlbHkgVU1DIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MmUwZmI4ZGQ1MDc0Nzk5YjU0YjA0ZmExYjU1NmNhMy5zZXRDb250ZW50KGh0bWxfZGE2ZDQ2Mjc4MDhjNGY1Yzk0MGEzOGUwODYyZmZkOTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWNlOGFmOWU2ZGFkNGUxZmFmYzU5ZGI4NzEzZTJlYzIuYmluZFBvcHVwKHBvcHVwXzUyZTBmYjhkZDUwNzQ3OTliNTRiMDRmYTFiNTU2Y2EzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NWViOGFiZjI4Yjc0MzExOGIwZTBmMWQ0MTRlMTg0YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjIxNDgyMDI2LCAtNzYuODc3MDEyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDEyZDIzZGVkMTFhNDc1YWJlNGNlNzYwNzkwZmJkYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDhiODFjM2EzMDFkNDA2M2I0YjRiMzNkYWRjOTk3MjEgPSAkKGA8ZGl2IGlkPSJodG1sX2Q4YjgxYzNhMzAxZDQwNjNiNGI0YjMzZGFkYzk5NzIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib3dhcmQgQ29tbXVuaXR5IENvbGxlZ2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxMmQyM2RlZDExYTQ3NWFiZTRjZTc2MDc5MGZiZGM5LnNldENvbnRlbnQoaHRtbF9kOGI4MWMzYTMwMWQ0MDYzYjRiNGIzM2RhZGM5OTcyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NWViOGFiZjI4Yjc0MzExOGIwZTBmMWQ0MTRlMTg0Yi5iaW5kUG9wdXAocG9wdXBfMDEyZDIzZGVkMTFhNDc1YWJlNGNlNzYwNzkwZmJkYzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjOTY1ZjhmNjE2NTRkZmQ4ZDUzYmMyNTYxZGM1MDNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMTgwMDg5OTksIC03NS42ODU2NTQ5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNTExNWYzNGY1NDY0Y2ZlYWU0ZmQ5YmIyZmY4ZmQxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTlhZjUwMzUxZTQ0ZDNjYWM0MTc0ZTM1YWE4YmRjNCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDE5YWY1MDM1MWU0NGQzY2FjNDE3NGUzNWFhOGJkYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhc2hpbmd0b24gSGlnaCBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1MTE1ZjM0ZjU0NjRjZmVhZTRmZDliYjJmZjhmZDE5LnNldENvbnRlbnQoaHRtbF80MTlhZjUwMzUxZTQ0ZDNjYWM0MTc0ZTM1YWE4YmRjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYzk2NWY4ZjYxNjU0ZGZkOGQ1M2JjMjU2MWRjNTAzYy5iaW5kUG9wdXAocG9wdXBfZjUxMTVmMzRmNTQ2NGNmZWFlNGZkOWJiMmZmOGZkMTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EzNzlkZGFkZmZlZjRlZDNiYTBiM2VjMWJjNGVkNmM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTA4ODE5MjUsIC03NS44Mzk2MjM5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MTNjNTlmY2QyM2Q0N2FkOWU0ODJmNDUyOTk3ZGVkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzA3OTEyNThjZjg0ZGFkYjZiNjQ4MDM5Mzc0OTM5MiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTMwNzkxMjU4Y2Y4NGRhZGI2YjY0ODAzOTM3NDkzOTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoIENhcm9saW5lIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MTNjNTlmY2QyM2Q0N2FkOWU0ODJmNDUyOTk3ZGVkOS5zZXRDb250ZW50KGh0bWxfMTMwNzkxMjU4Y2Y4NGRhZGI2YjY0ODAzOTM3NDkzOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTM3OWRkYWRmZmVmNGVkM2JhMGIzZWMxYmM0ZWQ2YzYuYmluZFBvcHVwKHBvcHVwXzgxM2M1OWZjZDIzZDQ3YWQ5ZTQ4MmY0NTI5OTdkZWQ5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzdlYzZhYTNhNmY0OTNmYmMzNzcxODY1MmM4OGViZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQwMjI2MDEsIC03OS4zODk2MTU4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOTQzM2Y2MDc1MmU0NTY0YjgzYmY2Mjc3YzFmNTc0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MWQyZjVlNTg5NzI0ZjJlOTMxYmU5MWMwN2NjNDI5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjFkMmY1ZTU4OTcyNGYyZTkzMWJlOTFjMDdjYzQyOTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9hayBQYXJrIENodXJjaCBvZiB0aGUgQnJldGhyZW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5NDMzZjYwNzUyZTQ1NjRiODNiZjYyNzdjMWY1NzQyLnNldENvbnRlbnQoaHRtbF82MWQyZjVlNTg5NzI0ZjJlOTMxYmU5MWMwN2NjNDI5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMzdlYzZhYTNhNmY0OTNmYmMzNzcxODY1MmM4OGViZC5iaW5kUG9wdXAocG9wdXBfMzk0MzNmNjA3NTJlNDU2NGI4M2JmNjI3N2MxZjU3NDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4NDhjMmIzYzgyYTQyOTViN2Q3YjQyMDBkZmE0ZjZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTQzNDA2OTYsIC03Ny4wMDM1NjQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hN2Q1NmEwMjgzN2M0MGE1YWIzMzBkOWU2NTQyNGM0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNjhjZDU5OTFjNmQ0YzU2YjQ4NDVmOGYyYjE5OWYwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzY4Y2Q1OTkxYzZkNGM1NmI0ODQ1ZjhmMmIxOTlmMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyaWVuZHNoaXAgVmFsbGV5IEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3ZDU2YTAyODM3YzQwYTVhYjMzMGQ5ZTY1NDI0YzQwLnNldENvbnRlbnQoaHRtbF8zNjhjZDU5OTFjNmQ0YzU2YjQ4NDVmOGYyYjE5OWYwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ODQ4YzJiM2M4MmE0Mjk1YjdkN2I0MjAwZGZhNGY2ZC5iaW5kUG9wdXAocG9wdXBfYTdkNTZhMDI4MzdjNDBhNWFiMzMwZDllNjU0MjRjNDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3ZWYyMjNjMTdlZTQyMDViZDZlNWI2YzU4YTA3ZDkzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzI0MTMxOTIsIC03Ny42MjUzNjcwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzg5NGFhOTQyMGY0OTQzYjk1NmY5MGEzMmNlYWFjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NTZjMGNjMjE5Njk0MTE3YWUzNWJhMmU5NTZhZTIyMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjU2YzBjYzIxOTY5NDExN2FlMzViYTJlOTU2YWUyMjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJydW5zd2ljayBIb3VzZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjM4OTRhYTk0MjBmNDk0M2I5NTZmOTBhMzJjZWFhYzEuc2V0Q29udGVudChodG1sXzY1NmMwY2MyMTk2OTQxMTdhZTM1YmEyZTk1NmFlMjIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU3ZWYyMjNjMTdlZTQyMDViZDZlNWI2YzU4YTA3ZDkzLmJpbmRQb3B1cChwb3B1cF9mMzg5NGFhOTQyMGY0OTQzYjk1NmY5MGEzMmNlYWFjMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzA3Y2IzMTFmZjQ0NGEwNTg2MWNlMTBjZmEyMTIyZDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40MzkyMzY0OSwgLTc2LjM0MDE5MjI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmYTE3OWMyNmE2OTQ4NTFhN2I2ZGNkMzE5MmZmYWUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IxOGM4ZTc0N2VhYjRiOWRiMDM1ZTFlZjRlMmY0NjNlID0gJChgPGRpdiBpZD0iaHRtbF9iMThjOGU3NDdlYWI0YjlkYjAzNWUxZWY0ZTJmNDYzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHJpbml0eSBMdXRoZXJhbiBDaHVyY2ggRm9vZCBDbG9zZXQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmYTE3OWMyNmE2OTQ4NTFhN2I2ZGNkMzE5MmZmYWUxLnNldENvbnRlbnQoaHRtbF9iMThjOGU3NDdlYWI0YjlkYjAzNWUxZWY0ZTJmNDYzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MDdjYjMxMWZmNDQ0YTA1ODYxY2UxMGNmYTIxMjJkNC5iaW5kUG9wdXAocG9wdXBfNWZhMTc5YzI2YTY5NDg1MWE3YjZkY2QzMTkyZmZhZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA3MTAyODdlMTY5MzQ4ZTk5ZDg0YjExZTY2OTRkNzcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA4NTM5ODQsIC03Ni40NTU0MDA5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NjBmNzFmM2U0ZGM0ZDNjOTkwZWY3OWM1YWJkYjA3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZWZjYmE0NTJkMGU0NGFhYjEzZjEzYmVjMWQ5ZmY5YiA9ICQoYDxkaXYgaWQ9Imh0bWxfOGVmY2JhNDUyZDBlNDRhYWIxM2YxM2JlYzFkOWZmOWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlZXAgQ3JlZWsgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2MGY3MWYzZTRkYzRkM2M5OTBlZjc5YzVhYmRiMDdjLnNldENvbnRlbnQoaHRtbF84ZWZjYmE0NTJkMGU0NGFhYjEzZjEzYmVjMWQ5ZmY5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNzEwMjg3ZTE2OTM0OGU5OWQ4NGIxMWU2Njk0ZDc3Mi5iaW5kUG9wdXAocG9wdXBfNTYwZjcxZjNlNGRjNGQzYzk5MGVmNzljNWFiZGIwN2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3N2EwMDFjNTg1NzRmNDU4ZWYxNzdhNzNlNzhmMmQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNTU4NDYzNzYsIC03Ni4wODk5NDc4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMWRhZTI3MjNiYzU0YWI2YjgwMWFjNjU0MWZiMzc4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNWNhODlkNzJmODA0YmUwOGE5NmY0MmZhZGZkMGYwZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjVjYTg5ZDcyZjgwNGJlMDhhOTZmNDJmYWRmZDBmMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hY2VzIExhbmUgTWlkZGxlIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzFkYWUyNzIzYmM1NGFiNmI4MDFhYzY1NDFmYjM3ODguc2V0Q29udGVudChodG1sX2Y1Y2E4OWQ3MmY4MDRiZTA4YTk2ZjQyZmFkZmQwZjBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3N2EwMDFjNTg1NzRmNDU4ZWYxNzdhNzNlNzhmMmQ0LmJpbmRQb3B1cChwb3B1cF9jMWRhZTI3MjNiYzU0YWI2YjgwMWFjNjU0MWZiMzc4OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWJhYzY0NjY4M2MzNDQwNjg4OWU4MTk2NTBjZTUxYTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4wNjY5ODA4MSwgLTc1LjU1NjUwMzQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzY2U3NjJkOGQ4ZDQ2OGY5MzRiNjk2OTAzY2NlYWM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlMDU5ZmIwOGRjZTRlNjhiZTM5MTM3NGRhNjlmNmJmID0gJChgPGRpdiBpZD0iaHRtbF9lZTA1OWZiMDhkY2U0ZTY4YmUzOTEzNzRkYTY5ZjZiZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGVscGluZyBIYW5kIE91dHJlYWNoIE1pc3Npb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzY2U3NjJkOGQ4ZDQ2OGY5MzRiNjk2OTAzY2NlYWM4LnNldENvbnRlbnQoaHRtbF9lZTA1OWZiMDhkY2U0ZTY4YmUzOTEzNzRkYTY5ZjZiZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYmFjNjQ2NjgzYzM0NDA2ODg5ZTgxOTY1MGNlNTFhOS5iaW5kUG9wdXAocG9wdXBfNDNjZTc2MmQ4ZDhkNDY4ZjkzNGI2OTY5MDNjY2VhYzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FhNmMwNmYyZGRkMjRjYzM5ODQ5ZGQ4MTBhYjI0NjUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjg2MjgyNjEsIC03Ni41NzcxNDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkOTYzYTI2ZTBhMjQzYWY5NmZlZGQ4OTNiZDNjNGU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0MzY2ZTI4ZjRlNTQ5NjFhMWU5N2I4OWM0NjZjNzZlID0gJChgPGRpdiBpZD0iaHRtbF84NDM2NmUyOGY0ZTU0OTYxYTFlOTdiODljNDY2Yzc2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVkIENyb3NzIERpc2FzdGVyIFJlbGllZjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQ5NjNhMjZlMGEyNDNhZjk2ZmVkZDg5M2JkM2M0ZTQuc2V0Q29udGVudChodG1sXzg0MzY2ZTI4ZjRlNTQ5NjFhMWU5N2I4OWM0NjZjNzZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FhNmMwNmYyZGRkMjRjYzM5ODQ5ZGQ4MTBhYjI0NjUxLmJpbmRQb3B1cChwb3B1cF9iZDk2M2EyNmUwYTI0M2FmOTZmZWRkODkzYmQzYzRlNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2U3ZGM0NjU3YjVlNGM3Y2E4MDA3YzVjMzBhMWM5YTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42MTYzODIzMywgLTc3LjgxNDA4NTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2MGE5ZmFiNjY5NzQ2Yzk5Y2Y1M2MwNDJkNWMxZGI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyZWRiMjJmMjlmMTRlNjNhYmIzY2Q3NzE2MzUxMTQ2ID0gJChgPGRpdiBpZD0iaHRtbF85MmVkYjIyZjI5ZjE0ZTYzYWJiM2NkNzcxNjM1MTE0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T3BlbiBHYXRlIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NjBhOWZhYjY2OTc0NmM5OWNmNTNjMDQyZDVjMWRiNi5zZXRDb250ZW50KGh0bWxfOTJlZGIyMmYyOWYxNGU2M2FiYjNjZDc3MTYzNTExNDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2U3ZGM0NjU3YjVlNGM3Y2E4MDA3YzVjMzBhMWM5YTIuYmluZFBvcHVwKHBvcHVwXzc2MGE5ZmFiNjY5NzQ2Yzk5Y2Y1M2MwNDJkNWMxZGI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOGZjNTU0OTQxNWE0MDEwOTM5YWM1NzFkZTRiN2IwZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjEyNjI1ODEzLCAtNzYuNzM3OTE1ODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTJhZDg2NjZjMWUwNGIwNWExNjNlMmZjZmQwZjVmN2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWRmNDJiYjAzYTZhNDdlMzhlZGM4MDcwMzljNDBjZWUgPSAkKGA8ZGl2IGlkPSJodG1sXzFkZjQyYmIwM2E2YTQ3ZTM4ZWRjODA3MDM5YzQwY2VlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NZWFkZSBNaWRkbGUgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMmFkODY2NmMxZTA0YjA1YTE2M2UyZmNmZDBmNWY3Yi5zZXRDb250ZW50KGh0bWxfMWRmNDJiYjAzYTZhNDdlMzhlZGM4MDcwMzljNDBjZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzhmYzU1NDk0MTVhNDAxMDkzOWFjNTcxZGU0YjdiMGYuYmluZFBvcHVwKHBvcHVwX2EyYWQ4NjY2YzFlMDRiMDVhMTYzZTJmY2ZkMGY1ZjdiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iM2UxYjM0ZTMwZDI0OGZhYTBiYjQzNTMxNTc5ZTlhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM3NzEzOTc1LCAtNzYuNTczNDA3OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTQ1MWM0YzJkMjNjNDFlZTljYzVjMjliNzlkMjU4YmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2JhZmJlMGYyNzllNDcyYjhhZTI4MmFlODc2NjYxNzEgPSAkKGA8ZGl2IGlkPSJodG1sX2NiYWZiZTBmMjc5ZTQ3MmI4YWUyODJhZTg3NjY2MTcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYWxzdGVhZCBBY2FkZW15PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NDUxYzRjMmQyM2M0MWVlOWNjNWMyOWI3OWQyNThiZi5zZXRDb250ZW50KGh0bWxfY2JhZmJlMGYyNzllNDcyYjhhZTI4MmFlODc2NjYxNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjNlMWIzNGUzMGQyNDhmYWEwYmI0MzUzMTU3OWU5YTYuYmluZFBvcHVwKHBvcHVwXzU0NTFjNGMyZDIzYzQxZWU5Y2M1YzI5Yjc5ZDI1OGJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZDY5NjZmYjFmZTg0OGVkYTJjNzZkY2YyYzdlNmJiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5MzUwNzA4LCAtNzYuNjA2NTMzNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmY1OTlkZWYzYWEyNGE1YTg1OTk4ZTBiNTgzZmNiYTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWQ3NmYxODk5OTFjNGVmMDg5NGQ3YzJmMmE1MWI4ZjUgPSAkKGA8ZGl2IGlkPSJodG1sXzFkNzZmMTg5OTkxYzRlZjA4OTRkN2MyZjJhNTFiOGY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXJ5bGFuZCBDbnRyIGZvciBWZXQuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZjU5OWRlZjNhYTI0YTVhODU5OThlMGI1ODNmY2JhMi5zZXRDb250ZW50KGh0bWxfMWQ3NmYxODk5OTFjNGVmMDg5NGQ3YzJmMmE1MWI4ZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2Q2OTY2ZmIxZmU4NDhlZGEyYzc2ZGNmMmM3ZTZiYmIuYmluZFBvcHVwKHBvcHVwXzJmNTk5ZGVmM2FhMjRhNWE4NTk5OGUwYjU4M2ZjYmEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MDEwMmEzNWUyNWI0YWQ0YWYwMDgxOWE3NDhjZTViYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjYzNDgwODE1LCAtNzUuODY0MjYwNzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzM0ZDgwODgxMmNmNDhlOWIzZjVlNzg4MGY3ODgyNTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODExZTllMTU3YTczNGFiODkxMDQxOWZjMjNiNGM3YjQgPSAkKGA8ZGl2IGlkPSJodG1sXzgxMWU5ZTE1N2E3MzRhYjg5MTA0MTlmYzIzYjRjN2I0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Vbml0eSBXYXNoaW5ndG9uIFVNQzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzM0ZDgwODgxMmNmNDhlOWIzZjVlNzg4MGY3ODgyNTQuc2V0Q29udGVudChodG1sXzgxMWU5ZTE1N2E3MzRhYjg5MTA0MTlmYzIzYjRjN2I0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwMTAyYTM1ZTI1YjRhZDRhZjAwODE5YTc0OGNlNWJjLmJpbmRQb3B1cChwb3B1cF8zMzRkODA4ODEyY2Y0OGU5YjNmNWU3ODgwZjc4ODI1NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzdiYjQ3ODMzMGM4NDcxZDliOTdiMTQzM2MyZTgwMTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zODc1NDY2NywgLTc1LjE4NzIyMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiNmI5NjYzYTRkNTQxMzY4N2ZhZTI2Yjk0N2Q0YmZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhYWVkOTA4OTY4YTQ3NWU4MTg4OWUwMzk3NzNlZmQ1ID0gJChgPGRpdiBpZD0iaHRtbF83YWFlZDkwODk2OGE0NzVlODE4ODllMDM5NzczZWZkNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2FyYSdzIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2I2Yjk2NjNhNGQ1NDEzNjg3ZmFlMjZiOTQ3ZDRiZmYuc2V0Q29udGVudChodG1sXzdhYWVkOTA4OTY4YTQ3NWU4MTg4OWUwMzk3NzNlZmQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc3YmI0NzgzMzBjODQ3MWQ5Yjk3YjE0MzNjMmU4MDEzLmJpbmRQb3B1cChwb3B1cF9jYjZiOTY2M2E0ZDU0MTM2ODdmYWUyNmI5NDdkNGJmZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGViNzQ2NDAwZTUyNDkzMThjN2FiM2E5YmZmNmE0M2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41MDQ0NTIyOCwgLTc2LjM4NDcwNDc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjYTE2M2Y1ZDRlNjQ0ZTliNTAyMDlkYTc0MzYwZTVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkZWNhYWExYWJkNzQ1YmFhY2IwZmQ3YTkzZjA4MDU3ID0gJChgPGRpdiBpZD0iaHRtbF8xZGVjYWFhMWFiZDc0NWJhYWNiMGZkN2E5M2YwODA1NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGFiaXRoYSdzIEhvdXNlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83Y2ExNjNmNWQ0ZTY0NGU5YjUwMjA5ZGE3NDM2MGU1ZC5zZXRDb250ZW50KGh0bWxfMWRlY2FhYTFhYmQ3NDViYWFjYjBmZDdhOTNmMDgwNTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGViNzQ2NDAwZTUyNDkzMThjN2FiM2E5YmZmNmE0M2QuYmluZFBvcHVwKHBvcHVwXzdjYTE2M2Y1ZDRlNjQ0ZTliNTAyMDlkYTc0MzYwZTVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMTJlMDg4ZmE0NGU0MzljODk4MzA5MzRlNDE3MGRkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQzMDExNjc5LCAtNzYuODEyMTE1NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGUxZDUwNWE4NDg5NDJhNWIzZjkxODcxMWJiMGJhZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWM2YzZmMWRkNzY1NDNlMGIxNjViMjlkOWNlYmQ4YWUgPSAkKGA8ZGl2IGlkPSJodG1sXzVjNmM2ZjFkZDc2NTQzZTBiMTY1YjI5ZDljZWJkOGFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CcmlkZ2V3YXkgQ29tbXVuaXR5IEN1cGJvYXJkIEJhbHRpbW9yZSBDby4gQ2FtcHVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZTFkNTA1YTg0ODk0MmE1YjNmOTE4NzExYmIwYmFmMy5zZXRDb250ZW50KGh0bWxfNWM2YzZmMWRkNzY1NDNlMGIxNjViMjlkOWNlYmQ4YWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjEyZTA4OGZhNDRlNDM5Yzg5ODMwOTM0ZTQxNzBkZDkuYmluZFBvcHVwKHBvcHVwXzhlMWQ1MDVhODQ4OTQyYTViM2Y5MTg3MTFiYjBiYWYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZTYwY2E3ZjZkNzc0ZTAwODFjODUzY2U0ZGM4ZTRiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjE5Mzg1NDA3LCAtNzUuNjkwMzcwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZWExNWYzYWU2Zjg0OGNhOTg2NmQ1MTYxOWU4ZWNjZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZGM5ZTlkODBiOWY0MmQwYmFkMzNhMzdjNzI5Y2QxMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWRjOWU5ZDgwYjlmNDJkMGJhZDMzYTM3YzcyOWNkMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0cm9uZyBIb2xkIENocmlzdGlhbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWVhMTVmM2FlNmY4NDhjYTk4NjZkNTE2MTllOGVjY2Quc2V0Q29udGVudChodG1sXzVkYzllOWQ4MGI5ZjQyZDBiYWQzM2EzN2M3MjljZDExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZlNjBjYTdmNmQ3NzRlMDA4MWM4NTNjZTRkYzhlNGIzLmJpbmRQb3B1cChwb3B1cF8xZWExNWYzYWU2Zjg0OGNhOTg2NmQ1MTYxOWU4ZWNjZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTY4YTA1ZTk1ZWFmNDE1ZDkzYmM5YjBhYmY0YzQyN2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42Mjc3MDMyMywgLTc3LjY2MjQ3NTkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3ZTdhMjBjNDdiMDQ1NDQ5NDE1ZjNiMzkwZjE4OTk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwNGExNWZjMzYyNDQyMGQ5YWRmY2QwNTFiMTNmYTk1ID0gJChgPGRpdiBpZD0iaHRtbF83MDRhMTVmYzM2MjQ0MjBkOWFkZmNkMDUxYjEzZmE5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RvbmVjcm9mdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjdlN2EyMGM0N2IwNDU0NDk0MTVmM2IzOTBmMTg5OTUuc2V0Q29udGVudChodG1sXzcwNGExNWZjMzYyNDQyMGQ5YWRmY2QwNTFiMTNmYTk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U2OGEwNWU5NWVhZjQxNWQ5M2JjOWIwYWJmNGM0MjdlLmJpbmRQb3B1cChwb3B1cF9iN2U3YTIwYzQ3YjA0NTQ0OTQxNWYzYjM5MGYxODk5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTc4YjIyOTAzYTZiNDcxZGFmMTNiNzI0OThkOTBmZjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MDAzNTYzNiwgLTc4LjE4MTUzODEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1YWNkMWNiZDU1ZTRjNmM5MjcxNTk2OGQxYzA5ZWExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3OWNmYWVmZTBiNzQxYWZiZjc3MmZiNjJmZTczNWQyID0gJChgPGRpdiBpZD0iaHRtbF81NzljZmFlZmUwYjc0MWFmYmY3NzJmYjYyZmU3MzVkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SW50ZXJmYWl0aCBTZXJ2aWNlIENvYWxpdGlvbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjVhY2QxY2JkNTVlNGM2YzkyNzE1OTY4ZDFjMDllYTEuc2V0Q29udGVudChodG1sXzU3OWNmYWVmZTBiNzQxYWZiZjc3MmZiNjJmZTczNWQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE3OGIyMjkwM2E2YjQ3MWRhZjEzYjcyNDk4ZDkwZmY3LmJpbmRQb3B1cChwb3B1cF8yNWFjZDFjYmQ1NWU0YzZjOTI3MTU5NjhkMWMwOWVhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTIzZWZhYmRlYzU5NDNiZWJhMDc3MjNlZDc2ODNkNDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41ODIyOTMzMiwgLTc1Ljk3MjEwNTY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhZjJlZjZmMjhiYTRiN2ViZGQwOWVhMzNkZWZmMGEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzNjFiM2RhNTE2OTQ5YzlhM2MwNTI3MjVjN2NiZjM5ID0gJChgPGRpdiBpZD0iaHRtbF82MzYxYjNkYTUxNjk0OWM5YTNjMDUyNzI1YzdjYmYzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGFiaXRoYSdzIFBhbnRyeSBPdXRyZWFjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWFmMmVmNmYyOGJhNGI3ZWJkZDA5ZWEzM2RlZmYwYTIuc2V0Q29udGVudChodG1sXzYzNjFiM2RhNTE2OTQ5YzlhM2MwNTI3MjVjN2NiZjM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EyM2VmYWJkZWM1OTQzYmViYTA3NzIzZWQ3NjgzZDQzLmJpbmRQb3B1cChwb3B1cF81YWYyZWY2ZjI4YmE0YjdlYmRkMDllYTMzZGVmZjBhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2IwZWNhMjRlOTVlNGZjMjg1ZTMzMjZiY2U0YjRiZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40NTcxMzY1OCwgLTc2LjYzNzEyMjIwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3ZmRhNTVlMGI4MDRjNGE5ZjA4MWM3MmNiYzVmNTlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0NmM1MWJhODRmOTQzYmZhNmViZGY2YWJkNGVhNmEzID0gJChgPGRpdiBpZD0iaHRtbF82NDZjNTFiYTg0Zjk0M2JmYTZlYmRmNmFiZDRlYTZhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmFsdGltb3JlIEh1bmdlciBQcm9qZWN0PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mN2ZkYTU1ZTBiODA0YzRhOWYwODFjNzJjYmM1ZjU5YS5zZXRDb250ZW50KGh0bWxfNjQ2YzUxYmE4NGY5NDNiZmE2ZWJkZjZhYmQ0ZWE2YTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2IwZWNhMjRlOTVlNGZjMjg1ZTMzMjZiY2U0YjRiZmUuYmluZFBvcHVwKHBvcHVwX2Y3ZmRhNTVlMGI4MDRjNGE5ZjA4MWM3MmNiYzVmNTlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNjk2ZmFhZDU3ZjU0YTk0YjNiZmEwZmM1OWQ2MjNiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY0MTM3NDgyLCAtNzcuNzI0MTg1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDg2NjMxNjBhOGViNGJjNDkwMTg4OGY1ZjhlMTIxZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTRhOGUzOGFmMGZiNDRmMjhjMTVhOWFjMTkyMDIzM2MgPSAkKGA8ZGl2IGlkPSJodG1sX2U0YThlMzhhZjBmYjQ0ZjI4YzE1YTlhYzE5MjAyMzNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db21tdW5pdHkgQWN0aW9uIENvdW5jaWw8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ4NjYzMTYwYThlYjRiYzQ5MDE4ODhmNWY4ZTEyMWQ5LnNldENvbnRlbnQoaHRtbF9lNGE4ZTM4YWYwZmI0NGYyOGMxNWE5YWMxOTIwMjMzYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNjk2ZmFhZDU3ZjU0YTk0YjNiZmEwZmM1OWQ2MjNiMS5iaW5kUG9wdXAocG9wdXBfNDg2NjMxNjBhOGViNGJjNDkwMTg4OGY1ZjhlMTIxZDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4NDBiMDA2ZjA5MzRjZGM4MjBkNDM5NWNkYTZjYzMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMDc1MTg2ODcsIC03Ni42ODY5MDMzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NTAzMTM0YzRjOWQ0ZWVmOGQxZDE4NDk5YTY5MDJkNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZWJlNDlkNDE3MDk0MjM0YjBiNjlkY2EyYzFmOWExOCA9ICQoYDxkaXYgaWQ9Imh0bWxfYmViZTQ5ZDQxNzA5NDIzNGIwYjY5ZGNhMmMxZjlhMTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFydW5kZWwgTWlkZGxlIHNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDUwMzEzNGM0YzlkNGVlZjhkMWQxODQ5OWE2OTAyZDcuc2V0Q29udGVudChodG1sX2JlYmU0OWQ0MTcwOTQyMzRiMGI2OWRjYTJjMWY5YTE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ4NDBiMDA2ZjA5MzRjZGM4MjBkNDM5NWNkYTZjYzMxLmJpbmRQb3B1cChwb3B1cF80NTAzMTM0YzRjOWQ0ZWVmOGQxZDE4NDk5YTY5MDJkNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDAzOWZlMWQ1Mjg1NDEzOWI1ZTZhZWI2MTZkZjc2NGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42MzYxNDM5MiwgLTc3LjY5MTc5NjM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhOTU5MDY3M2ZmNTQxYjJhNGYyNWRhNWE3ZGM0ZmRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3MjE5M2ZkY2MzNjQzZDk4MmQzYWQ5Njc1ZWZmYzViID0gJChgPGRpdiBpZD0iaHRtbF8zNzIxOTNmZGNjMzY0M2Q5ODJkM2FkOTY3NWVmZmM1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWVudGFsIEhlYWx0aCBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhOTU5MDY3M2ZmNTQxYjJhNGYyNWRhNWE3ZGM0ZmRiLnNldENvbnRlbnQoaHRtbF8zNzIxOTNmZGNjMzY0M2Q5ODJkM2FkOTY3NWVmZmM1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MDM5ZmUxZDUyODU0MTM5YjVlNmFlYjYxNmRmNzY0Zi5iaW5kUG9wdXAocG9wdXBfNmE5NTkwNjczZmY1NDFiMmE0ZjI1ZGE1YTdkYzRmZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2ZmIwM2MwNzVhOTQ3MjRhNjVkM2ExN2Q2OTkzNTY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTc2MzgyMjUsIC03Ny4xNzUyNzk0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMmUzMTkyZTk1MDk0NDU2YThkOTE1YWQ3OWQyNWIwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YjgxMWEyYWJhZGM0OWE4OTNmMzYyNzBlOWY3NjllZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNmI4MTFhMmFiYWRjNDlhODkzZjM2MjcwZTlmNzY5ZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVsbWVyIFdvbGZlIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyZTMxOTJlOTUwOTQ0NTZhOGQ5MTVhZDc5ZDI1YjA1LnNldENvbnRlbnQoaHRtbF82YjgxMWEyYWJhZGM0OWE4OTNmMzYyNzBlOWY3NjllZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNmZiMDNjMDc1YTk0NzI0YTY1ZDNhMTdkNjk5MzU2OC5iaW5kUG9wdXAocG9wdXBfYzJlMzE5MmU5NTA5NDQ1NmE4ZDkxNWFkNzlkMjViMDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QzZTM1ZWRlYjc1ZDRhZGFiYWQxMzM1YTYyMjVjZDQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzI3OTUwNjQsIC03NS4wODc2NzQxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZWNmMmRlODhiNTQ0ZjliOWU4YTA3YzMwZThjZjAzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZDY5MDkxN2MxNWE0OTE0YTU2YmQyNmMzZTUxMTI0MCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGQ2OTA5MTdjMTVhNDkxNGE1NmJkMjZjM2U1MTEyNDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvbiBTcG90IE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlY2YyZGU4OGI1NDRmOWI5ZThhMDdjMzBlOGNmMDM3LnNldENvbnRlbnQoaHRtbF9kZDY5MDkxN2MxNWE0OTE0YTU2YmQyNmMzZTUxMTI0MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kM2UzNWVkZWI3NWQ0YWRhYmFkMTMzNWE2MjI1Y2Q0NC5iaW5kUG9wdXAocG9wdXBfNGVjZjJkZTg4YjU0NGY5YjllOGEwN2MzMGU4Y2YwMzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhN2Q5ZjdjMDIxZjQ4ZjE4NDBiZmI5MWU0NjIyZGUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjg5NDUzNDMsIC03Ni42MDg5MTkyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MWZlY2U1YTY2YmY0YjgwYjQ5MjFlYzM5ODJhMDIxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jY2MxNDZmMmRlOTY0YjA2YmY4M2RiOWY0OWIyNDI2YiA9ICQoYDxkaXYgaWQ9Imh0bWxfY2NjMTQ2ZjJkZTk2NGIwNmJmODNkYjlmNDliMjQyNmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYWNlIGFuZCBIb3BlIE1pc3Npb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxZmVjZTVhNjZiZjRiODBiNDkyMWVjMzk4MmEwMjE5LnNldENvbnRlbnQoaHRtbF9jY2MxNDZmMmRlOTY0YjA2YmY4M2RiOWY0OWIyNDI2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYTdkOWY3YzAyMWY0OGYxODQwYmZiOTFlNDYyMmRlMi5iaW5kUG9wdXAocG9wdXBfOTFmZWNlNWE2NmJmNGI4MGI0OTIxZWMzOTgyYTAyMTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRhYjZlOTA4YTBiMzQ0NTk4MTU0ODgyNWVhYTlmYjQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDAwODkxMTksIC03Ni42MDU4MDM3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZTQ2ZjMxM2Y0ZDA0NTk3ODUzYTFlMmRkMjFmMGNkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNmZmMmE4OWNmZTM0MDcwYmEwMmI1MGQ3ZDQ3NTY5NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTZmZjJhODljZmUzNDA3MGJhMDJiNTBkN2Q0NzU2OTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFzc2lzdGFuY2UgQ2VudGVyIG9mIFRvd3NvbiBDaHVyY2hlczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGU0NmYzMTNmNGQwNDU5Nzg1M2ExZTJkZDIxZjBjZGQuc2V0Q29udGVudChodG1sX2E2ZmYyYTg5Y2ZlMzQwNzBiYTAyYjUwZDdkNDc1Njk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRhYjZlOTA4YTBiMzQ0NTk4MTU0ODgyNWVhYTlmYjQ5LmJpbmRQb3B1cChwb3B1cF8wZTQ2ZjMxM2Y0ZDA0NTk3ODUzYTFlMmRkMjFmMGNkZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGQzYTQ0ZDViYmUyNDc1Njk0YTQ0ZTk1MmFlNzkwNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNTQ1MzQ3NiwgLTc2LjY5OTQ1NTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhZjExMTA5OTNiOTQ5Zjg4ZTJjMjVjMjM1MWQzYjM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjMDUwMGNiMTQzNjQ5YjI5M2M4OWJkMmVmNzMwYTBiID0gJChgPGRpdiBpZD0iaHRtbF9lYzA1MDBjYjE0MzY0OWIyOTNjODliZDJlZjczMGEwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9seSBOYXRpdml0eSBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhZjExMTA5OTNiOTQ5Zjg4ZTJjMjVjMjM1MWQzYjM1LnNldENvbnRlbnQoaHRtbF9lYzA1MDBjYjE0MzY0OWIyOTNjODliZDJlZjczMGEwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZDNhNDRkNWJiZTI0NzU2OTRhNDRlOTUyYWU3OTA0Yi5iaW5kUG9wdXAocG9wdXBfZWFmMTExMDk5M2I5NDlmODhlMmMyNWMyMzUxZDNiMzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4ZmY2ZDg2MWU3NjQ0MzE4Zjc0ZTU3ZjgxYTZkMTA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjk1NDg3MDUsIC03Ni42MDE3NDM4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZmY1NzE1NmJkZmY0NjM1ODM1Mzc4NGU5Y2QyYThkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTQ0OGZmNjA5Njk0NGZhYWNmODk2MzBhNDY2M2M4OSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzU0NDhmZjYwOTY5NDRmYWFjZjg5NjMwYTQ2NjNjODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhdWwgQ2hlc3RlciBNZW1vcmlhbCBTb3VwIEtpdGNoZW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmZjU3MTU2YmRmZjQ2MzU4MzUzNzg0ZTljZDJhOGQ0LnNldENvbnRlbnQoaHRtbF8zNTQ0OGZmNjA5Njk0NGZhYWNmODk2MzBhNDY2M2M4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOGZmNmQ4NjFlNzY0NDMxOGY3NGU1N2Y4MWE2ZDEwNy5iaW5kUG9wdXAocG9wdXBfY2ZmNTcxNTZiZGZmNDYzNTgzNTM3ODRlOWNkMmE4ZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM3MjM0ZjRjMTJmZTQ2NTM4OWFhYzViZDUyMTA1YzcwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzQ2NjQwNjQsIC03NS41ODg1NjQyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjJkMzljMDljNzQ0ZDgzYWY0ZTBiMzg4ZjgxOTVkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTdmMzJhOGRhNGI0NjdhOWJlN2FkOTMyMWQzN2NhMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTU3ZjMyYThkYTRiNDY3YTliZTdhZDkzMjFkMzdjYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxpZmUgQ3Jpc2lzIENlbnRlciBJbmMuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjJkMzljMDljNzQ0ZDgzYWY0ZTBiMzg4ZjgxOTVkMC5zZXRDb250ZW50KGh0bWxfZTU3ZjMyYThkYTRiNDY3YTliZTdhZDkzMjFkMzdjYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzcyMzRmNGMxMmZlNDY1Mzg5YWFjNWJkNTIxMDVjNzAuYmluZFBvcHVwKHBvcHVwXzBiMmQzOWMwOWM3NDRkODNhZjRlMGIzODhmODE5NWQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MDJhZTI1N2JlOGQ0NjJjODA1NjIxNjE5ZWFlZGIxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwNDY5MjM5LCAtNzYuNjA5MzE0NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTkzYjM3ZGJlZWU1NDQzOWI5NzFiOWFjYzNjYmE0YmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGNlNDk2OWZiMDhjNDZjMTk3MjNhYmJkNmI3NDlhOWEgPSAkKGA8ZGl2IGlkPSJodG1sXzRjZTQ5NjlmYjA4YzQ2YzE5NzIzYWJiZDZiNzQ5YTlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Kb2huc3RvbiBTcXVhcmUgQXBhcnRtZW50czwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTkzYjM3ZGJlZWU1NDQzOWI5NzFiOWFjYzNjYmE0YmQuc2V0Q29udGVudChodG1sXzRjZTQ5NjlmYjA4YzQ2YzE5NzIzYWJiZDZiNzQ5YTlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgwMmFlMjU3YmU4ZDQ2MmM4MDU2MjE2MTllYWVkYjE5LmJpbmRQb3B1cChwb3B1cF8xOTNiMzdkYmVlZTU0NDM5Yjk3MWI5YWNjM2NiYTRiZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2FjYTg2ZTFkMzk2NDZmOGFkYTk1YWVjYTg2ZTFlYmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTcwNzE1MywgLTc2LjYxMDI2MDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1ZGUzMjViZDNmNzQzYWI4ZWI3NGVmYzcxM2Y2NWQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JmYTQwOTM2YTU2NzRhMGQ4NzM0ZDNlYjRhZmMxNjYzID0gJChgPGRpdiBpZD0iaHRtbF9iZmE0MDkzNmE1Njc0YTBkODczNGQzZWI0YWZjMTY2MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VpbmJlcmcgSG91c2luZyAmIFJlc291cmNlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNWRlMzI1YmQzZjc0M2FiOGViNzRlZmM3MTNmNjVkNy5zZXRDb250ZW50KGh0bWxfYmZhNDA5MzZhNTY3NGEwZDg3MzRkM2ViNGFmYzE2NjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2FjYTg2ZTFkMzk2NDZmOGFkYTk1YWVjYTg2ZTFlYmYuYmluZFBvcHVwKHBvcHVwX2U1ZGUzMjViZDNmNzQzYWI4ZWI3NGVmYzcxM2Y2NWQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNmM4NWI4ODM3NmE0YTJlYTEzYzIwZmU0ZTYzOWViMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM3MzM0MzM1LCAtNzUuNTc1NDEzODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDE5YzZhZWJiMTE1NDVmMDljY2YwOWY3YzBhYmE2Y2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y1MzYyZWM5MTI1NDNmMWI0YzA4MTc3M2NkZDQ0NTcgPSAkKGA8ZGl2IGlkPSJodG1sX2NmNTM2MmVjOTEyNTQzZjFiNGMwODE3NzNjZGQ0NDU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IFNhbGlzYnVyeSBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMTljNmFlYmIxMTU0NWYwOWNjZjA5ZjdjMGFiYTZjYi5zZXRDb250ZW50KGh0bWxfY2Y1MzYyZWM5MTI1NDNmMWI0YzA4MTc3M2NkZDQ0NTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjZjODViODgzNzZhNGEyZWExM2MyMGZlNGU2MzllYjAuYmluZFBvcHVwKHBvcHVwX2QxOWM2YWViYjExNTQ1ZjA5Y2NmMDlmN2MwYWJhNmNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMmM5ZTIzZDI2NDI0YTk0YTc3Y2QwOGQ3NTM1NDgwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjQ1MjEwODk3LCAtNzUuNTYxNDk1NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTliNTgwOTc4MDMxNGQyY2E2NzhkZTFlNzM4ZTY3YWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjY2MWI4MGFkZjVlNDc5ZmI2NmU4MTEyMDM5YWVlOGUgPSAkKGA8ZGl2IGlkPSJodG1sX2Y2NjFiODBhZGY1ZTQ3OWZiNjZlODExMjAzOWFlZThlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VbmlvbiBVbml0ZWQgTWV0aG9kaXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTliNTgwOTc4MDMxNGQyY2E2NzhkZTFlNzM4ZTY3YWEuc2V0Q29udGVudChodG1sX2Y2NjFiODBhZGY1ZTQ3OWZiNjZlODExMjAzOWFlZThlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IyYzllMjNkMjY0MjRhOTRhNzdjZDA4ZDc1MzU0ODAyLmJpbmRQb3B1cChwb3B1cF9hOWI1ODA5NzgwMzE0ZDJjYTY3OGRlMWU3MzhlNjdhYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjE2NTUxMzdhZDExNDY4ODgwZmM4ZWNlYmNiMjcwNTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zNDYyMDUyNCwgLTc1LjYwODU4NDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwNDFkYTZiMzZkNTQ4NDhiZGMzMWU0ZDYyM2Y5NzZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmMzFkYmExNmNmNzQ1Mjc5OWE3YmE0ODM2YjYwYjlhID0gJChgPGRpdiBpZD0iaHRtbF9mZjMxZGJhMTZjZjc0NTI3OTlhN2JhNDgzNmI2MGI5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9vZCBmb3IgdGhlIEZsb2NrPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMDQxZGE2YjM2ZDU0ODQ4YmRjMzFlNGQ2MjNmOTc2Zi5zZXRDb250ZW50KGh0bWxfZmYzMWRiYTE2Y2Y3NDUyNzk5YTdiYTQ4MzZiNjBiOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjE2NTUxMzdhZDExNDY4ODgwZmM4ZWNlYmNiMjcwNTYuYmluZFBvcHVwKHBvcHVwXzMwNDFkYTZiMzZkNTQ4NDhiZGMzMWU0ZDYyM2Y5NzZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Nzk4ZWMzMzEzOGI0NTJlOGE5NzNlMWIyOThlNjA5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjYzOTE4NjMsIC03Ny43MTgxNzUxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODBlZjgyMGQxZjc0MjcxOGZkNzZhYjg3ZmFhYjg2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjFmYmNlMGM1ODg0ODQ2YjdiODE0OTc5Mjk0ZGY0OCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTYxZmJjZTBjNTg4NDg0NmI3YjgxNDk3OTI5NGRmNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9DQSBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDgwZWY4MjBkMWY3NDI3MThmZDc2YWI4N2ZhYWI4NjAuc2V0Q29udGVudChodG1sX2E2MWZiY2UwYzU4ODQ4NDZiN2I4MTQ5NzkyOTRkZjQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY3OThlYzMzMTM4YjQ1MmU4YTk3M2UxYjI5OGU2MDlkLmJpbmRQb3B1cChwb3B1cF9kODBlZjgyMGQxZjc0MjcxOGZkNzZhYjg3ZmFhYjg2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWVlNTJhNGIxODgwNDg0MjhkY2Q5MTkzZmQ3NjNiZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTgyMDQ1OSwgLTc2LjYxMDU2MDE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzNWQ0YjcxNzFiNjRiMzc5ZWU0NGQ2YWIzZWZkYjc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3YTVlOWIxYjQ4MTQzNjBhNThiZjllYzAyZDFlZDRjID0gJChgPGRpdiBpZD0iaHRtbF82N2E1ZTliMWI0ODE0MzYwYTU4YmY5ZWMwMmQxZWQ0YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2F0aG9saWMgQ2hhcml0aWVzLU15IEJyb3RoZXIncyBLZWVwZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNWQ0YjcxNzFiNjRiMzc5ZWU0NGQ2YWIzZWZkYjc0LnNldENvbnRlbnQoaHRtbF82N2E1ZTliMWI0ODE0MzYwYTU4YmY5ZWMwMmQxZWQ0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZWU1MmE0YjE4ODA0ODQyOGRjZDkxOTNmZDc2M2JmYy5iaW5kUG9wdXAocG9wdXBfMDM1ZDRiNzE3MWI2NGIzNzllZTQ0ZDZhYjNlZmRiNzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE3NjY5YTY0ZDdiMTQxOWRiYzEwN2ViMjcxMGI2ODkzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjk4MjA0NTksIC03Ni42MTA1NjAxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNTA2ZjgxZWIzMGU0ZjBiYTE0ZTQ1ZGFiMDYzZGYxMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MWIzMjlmYWI1MTM0MDY0YTAxZjJkMGE5NTc3MmRlMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjFiMzI5ZmFiNTEzNDA2NGEwMWYyZDBhOTU3NzJkZTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdGhvbGljIENoYXJpdGllcy1TdCBFZHdhcmRzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNTA2ZjgxZWIzMGU0ZjBiYTE0ZTQ1ZGFiMDYzZGYxMS5zZXRDb250ZW50KGh0bWxfNjFiMzI5ZmFiNTEzNDA2NGEwMWYyZDBhOTU3NzJkZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTc2NjlhNjRkN2IxNDE5ZGJjMTA3ZWIyNzEwYjY4OTMuYmluZFBvcHVwKHBvcHVwXzA1MDZmODFlYjMwZTRmMGJhMTRlNDVkYWIwNjNkZjExKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMjJlMGQwOTk2ODI0MDkwOWFjMjFiZWQzZmQyYTJjOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU0MDQzMjYyLCAtNzYuOTk0MTM4ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTlmNmNiYmNkYzU1NGM3NmIzYmIyZDBjYWExZmUxMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTFhOGU0ZWNhNTdhNDJiYjlkMWNhODU2M2RlZTI0OGUgPSAkKGA8ZGl2IGlkPSJodG1sXzkxYThlNGVjYTU3YTQyYmI5ZDFjYTg1NjNkZWUyNDhlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0bWluc3RlciBIaWdoIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTlmNmNiYmNkYzU1NGM3NmIzYmIyZDBjYWExZmUxMWEuc2V0Q29udGVudChodG1sXzkxYThlNGVjYTU3YTQyYmI5ZDFjYTg1NjNkZWUyNDhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEyMmUwZDA5OTY4MjQwOTA5YWMyMWJlZDNmZDJhMmM5LmJpbmRQb3B1cChwb3B1cF9lOWY2Y2JiY2RjNTU0Yzc2YjNiYjJkMGNhYTFmZTExYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTc5OTYxZDFlMjJmNDhlYThkOTgwYTNjNGRhNDI0NmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zMjY1MzM3NCwgLTc1LjIyMDAyMjczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxOTAyYzE5YmFlMzQxYmVhYmExNTNiYTJlYWJhNjMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwMzEwMzcxYzg4ZDRlMmI5ZWQxMWI3ZjE3OGEzMjlhID0gJChgPGRpdiBpZD0iaHRtbF9hMDMxMDM3MWM4OGQ0ZTJiOWVkMTFiN2YxNzhhMzI5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RldmVuc29uIFVNQzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTE5MDJjMTliYWUzNDFiZWFiYTE1M2JhMmVhYmE2MzMuc2V0Q29udGVudChodG1sX2EwMzEwMzcxYzg4ZDRlMmI5ZWQxMWI3ZjE3OGEzMjlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U3OTk2MWQxZTIyZjQ4ZWE4ZDk4MGEzYzRkYTQyNDZjLmJpbmRQb3B1cChwb3B1cF9lMTkwMmMxOWJhZTM0MWJlYWJhMTUzYmEyZWFiYTYzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjk3NzExNjgxNGMzNGU4OWJjYzBiZTM1YjI3MWRkMWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42Mzc2NzA3OTk5OTk5OTUsIC03Ny43MTkyNDA3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjZkZGRiZTFkODI0ODQ4OWIwYWU0OGI4Y2EzMGI3NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjNiNzM2ODcwMjI0NTlhOGViMDNiMGNiZGE0YWQ2YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNWYzYjczNjg3MDIyNDU5YThlYjAzYjBjYmRhNGFkNmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlbGxzIEhvdXNlLCBJbmMuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjZkZGRiZTFkODI0ODQ4OWIwYWU0OGI4Y2EzMGI3Ni5zZXRDb250ZW50KGh0bWxfNWYzYjczNjg3MDIyNDU5YThlYjAzYjBjYmRhNGFkNmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjk3NzExNjgxNGMzNGU4OWJjYzBiZTM1YjI3MWRkMWUuYmluZFBvcHVwKHBvcHVwXzMyNmRkZGJlMWQ4MjQ4NDg5YjBhZTQ4YjhjYTMwYjc2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Mjc1MDk0MzQzMTk0MzUwOGRkZjg3Y2VhMmZkOWM4ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQyMjM0NzQzLCAtNzYuNzkzNTkxNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTI4YWE5MDA3MmQwNDFiODlhODY4ZDE0MGRlMDIwMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTVhYzk5M2NkY2E1NDRkZDk5NzI1YjkwYzI1MTRmNzggPSAkKGA8ZGl2IGlkPSJodG1sXzU1YWM5OTNjZGNhNTQ0ZGQ5OTcyNWI5MGMyNTE0Zjc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Pd2luZ3MgTWlsbHMgSGlnaCBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyOGFhOTAwNzJkMDQxYjg5YTg2OGQxNDBkZTAyMDFmLnNldENvbnRlbnQoaHRtbF81NWFjOTkzY2RjYTU0NGRkOTk3MjViOTBjMjUxNGY3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Mjc1MDk0MzQzMTk0MzUwOGRkZjg3Y2VhMmZkOWM4ZS5iaW5kUG9wdXAocG9wdXBfOTI4YWE5MDA3MmQwNDFiODlhODY4ZDE0MGRlMDIwMWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg3MGRjY2U0MTdiYzRmZTQ4YzNmMjNiY2UxZmIwZjA0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTY5MTI4MTMsIC03Ni45NDc5Mjc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiNzY4YmUwZWIyMTRiYmQ5N2Y5NTg1YTYxMmQ2MjA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1ZGRmMGJkZWIwNzQ1N2ZhN2QyNzRhZDU5NDJlMzRlID0gJChgPGRpdiBpZD0iaHRtbF9kNWRkZjBiZGViMDc0NTdmYTdkMjc0YWQ1OTQyZTM0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T3BlbiBEb29yIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjc2OGJlMGViMjE0YmJkOTdmOTU4NWE2MTJkNjIwNi5zZXRDb250ZW50KGh0bWxfZDVkZGYwYmRlYjA3NDU3ZmE3ZDI3NGFkNTk0MmUzNGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODcwZGNjZTQxN2JjNGZlNDhjM2YyM2JjZTFmYjBmMDQuYmluZFBvcHVwKHBvcHVwXzBiNzY4YmUwZWIyMTRiYmQ5N2Y5NTg1YTYxMmQ2MjA2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83M2M0ZGRiODg3NTA0NjZkYmQxNjQ1NTFjOTlhYTQ3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU3Mzg3NDQyLCAtNzcuNTUxMjI0OTAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmMxZWE0ZjQ1NWUyNGM3NGEzZjIxMDM1NWNiZjFlOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTU0OWU5M2ExM2FmNDRmYWE0Njg1MTc0ZDJkYjM3Y2YgPSAkKGA8ZGl2IGlkPSJodG1sXzU1NDllOTNhMTNhZjQ0ZmFhNDY4NTE3NGQyZGIzN2NmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYWxlbSBVbml0ZWQgTWV0aG9kaXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmMxZWE0ZjQ1NWUyNGM3NGEzZjIxMDM1NWNiZjFlOTUuc2V0Q29udGVudChodG1sXzU1NDllOTNhMTNhZjQ0ZmFhNDY4NTE3NGQyZGIzN2NmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzczYzRkZGI4ODc1MDQ2NmRiZDE2NDU1MWM5OWFhNDc2LmJpbmRQb3B1cChwb3B1cF82YzFlYTRmNDU1ZTI0Yzc0YTNmMjEwMzU1Y2JmMWU5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzY0OWMxN2I4OTBjNGQyNjhjZjJkYjlkMGFiYjhmMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMjU4OTgyMiwgLTc2LjQzNzcxODMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyMWI4OWM5Mzg5NzRjMGQ4NDlhNDg0NGUzNjJjZDEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiNGQzZDFlZjg5ZDQwMzNiOGZkMDFlOWRkNDcwYmU1ID0gJChgPGRpdiBpZD0iaHRtbF8xYjRkM2QxZWY4OWQ0MDMzYjhmZDAxZTlkZDQ3MGJlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGF3dGhvcm5lIEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MjFiODljOTM4OTc0YzBkODQ5YTQ4NDRlMzYyY2QxMC5zZXRDb250ZW50KGh0bWxfMWI0ZDNkMWVmODlkNDAzM2I4ZmQwMWU5ZGQ0NzBiZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzY0OWMxN2I4OTBjNGQyNjhjZjJkYjlkMGFiYjhmMzIuYmluZFBvcHVwKHBvcHVwXzgyMWI4OWM5Mzg5NzRjMGQ4NDlhNDg0NGUzNjJjZDEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lODY1YmVlYjkyYTg0NmQ1OWQ5OGMyZTc3YjA1YTFhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5ODIwNDU5LCAtNzYuNjEwNTYwMTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE1ODlkZWU2MGFkNGEyN2FmZTlkYTE4MDAxMmQwYTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWVmMDkwZWJhMGE5NGI3ZjlkOGZhZGZkZThlNDRiOTggPSAkKGA8ZGl2IGlkPSJodG1sX2FlZjA5MGViYTBhOTRiN2Y5ZDhmYWRmZGU4ZTQ0Yjk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXRob2xpYyBDaGFyaXRpZXMtU3QgR3JlZ29yeSBGUDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE1ODlkZWU2MGFkNGEyN2FmZTlkYTE4MDAxMmQwYTUuc2V0Q29udGVudChodG1sX2FlZjA5MGViYTBhOTRiN2Y5ZDhmYWRmZGU4ZTQ0Yjk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4NjViZWViOTJhODQ2ZDU5ZDk4YzJlNzdiMDVhMWE0LmJpbmRQb3B1cChwb3B1cF81MTU4OWRlZTYwYWQ0YTI3YWZlOWRhMTgwMDEyZDBhNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmVjOTQyNDliNDZiNGRmNDkwOTMyNzJlYWI3OGMzNmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTgyMDQ1OSwgLTc2LjYxMDU2MDE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwZDg2ZDhjOWEyYjQwNDdiZTEyODI5ZWIyMzYwNjU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkYWQ0NmUzNzhhMDQ3MjJiYWRhMzRkMzYyMmEwYTQ1ID0gJChgPGRpdiBpZD0iaHRtbF83ZGFkNDZlMzc4YTA0NzIyYmFkYTM0ZDM2MjJhMGE0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2F0aG9saWMgQ2hhcml0aWVzLVN0IFBldGVyczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDBkODZkOGM5YTJiNDA0N2JlMTI4MjllYjIzNjA2NTcuc2V0Q29udGVudChodG1sXzdkYWQ0NmUzNzhhMDQ3MjJiYWRhMzRkMzYyMmEwYTQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlYzk0MjQ5YjQ2YjRkZjQ5MDkzMjcyZWFiNzhjMzZjLmJpbmRQb3B1cChwb3B1cF80MGQ4NmQ4YzlhMmI0MDQ3YmUxMjgyOWViMjM2MDY1NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjEwYmNiOGU3MmVjNDgwYWFjOGVhMzZjMmJkN2NkYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4yMjQ1NTE1NCwgLTc1LjY5MzA5Nzk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2NmU0Y2RmODI3NDQ3YWU5YWExYzI3NmI1MTQ0N2RmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhZDIyOWZjMDg4YjQ0NmJhZDFjODE2M2Y4YjhjZDY3ID0gJChgPGRpdiBpZD0iaHRtbF9kYWQyMjlmYzA4OGI0NDZiYWQxYzgxNjNmOGI4Y2Q2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TG93ZXIgU2hvcmUgU2hlbHRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzY2ZTRjZGY4Mjc0NDdhZTlhYTFjMjc2YjUxNDQ3ZGYuc2V0Q29udGVudChodG1sX2RhZDIyOWZjMDg4YjQ0NmJhZDFjODE2M2Y4YjhjZDY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIxMGJjYjhlNzJlYzQ4MGFhYzhlYTM2YzJiZDdjZGI1LmJpbmRQb3B1cChwb3B1cF9jNjZlNGNkZjgyNzQ0N2FlOWFhMWMyNzZiNTE0NDdkZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDc2NzhhNTBmYmViNGI0YTlhMTc1YmJiNzllYWYyZTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43NzE5MzQ5OCwgLTc2LjA3ODg3NTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczMmFkNjU1OTBkNzRlMGRiOTVlZmViMjBkNmNiNzk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1M2E1ZTliNjg3OTQ5NjhhMWI5OGZjNWYxNmQ5ZTBmID0gJChgPGRpdiBpZD0iaHRtbF9hNTNhNWU5YjY4Nzk0OTY4YTFiOThmYzVmMTZkOWUwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmVpZ2hib3Job29kIFNlcnZpY2UgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzJhZDY1NTkwZDc0ZTBkYjk1ZWZlYjIwZDZjYjc5Ny5zZXRDb250ZW50KGh0bWxfYTUzYTVlOWI2ODc5NDk2OGExYjk4ZmM1ZjE2ZDllMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDc2NzhhNTBmYmViNGI0YTlhMTc1YmJiNzllYWYyZTMuYmluZFBvcHVwKHBvcHVwXzczMmFkNjU1OTBkNzRlMGRiOTVlZmViMjBkNmNiNzk3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYWQwZjVhYzA5MDg0NjYzOWE0NzkyNWQ2MDViODdjOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY1Njc0Mzk3LCAtNzcuOTM1MzM5ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGZmODUwZGY1OTVmNDdjYjk3YTRjYTM4MTk2ODk5NzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODZjMTg2NTk0M2VlNGEzODg4ODc2MDY1MTMzNmJlZjcgPSAkKGA8ZGl2IGlkPSJodG1sXzg2YzE4NjU5NDNlZTRhMzg4ODg3NjA2NTEzMzZiZWY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGVhciBTcHJpbmcgTWlkZGxlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZmY4NTBkZjU5NWY0N2NiOTdhNGNhMzgxOTY4OTk3MS5zZXRDb250ZW50KGh0bWxfODZjMTg2NTk0M2VlNGEzODg4ODc2MDY1MTMzNmJlZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2FkMGY1YWMwOTA4NDY2MzlhNDc5MjVkNjA1Yjg3YzkuYmluZFBvcHVwKHBvcHVwXzRmZjg1MGRmNTk1ZjQ3Y2I5N2E0Y2EzODE5Njg5OTcxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNjJlMmUzODZkODI0YWM2YmU4ZjA2ZWU2ZDEyNzc0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5ODIwNDU5LCAtNzYuNjEwNTYwMTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWUxMzFhMDMyNDQzNGY4YmE5Y2JjZDRiYjgwYjBmZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGJhMzdiZjliMWZiNDEyYmE3MjJmMWFlY2U2MzY3MGMgPSAkKGA8ZGl2IGlkPSJodG1sXzhiYTM3YmY5YjFmYjQxMmJhNzIyZjFhZWNlNjM2NzBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXRob2xpYyBDaGFyaXRpZXMtU3QuIENlY2lsaWE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlMTMxYTAzMjQ0MzRmOGJhOWNiY2Q0YmI4MGIwZmViLnNldENvbnRlbnQoaHRtbF84YmEzN2JmOWIxZmI0MTJiYTcyMmYxYWVjZTYzNjcwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNjJlMmUzODZkODI0YWM2YmU4ZjA2ZWU2ZDEyNzc0My5iaW5kUG9wdXAocG9wdXBfYWUxMzFhMDMyNDQzNGY4YmE5Y2JjZDRiYjgwYjBmZWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2NGQ4NDNiNzA3MTRkODRiY2Q5YWE1OTNkNmQ4NDVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzMxNzAwMTgsIC03NS4xMDc1MTUzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OGY0NzRmNDNiYmY0ODQ4YTY4MDQzMThkYTNjYjJjZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NzRmYzE0Yzk1Mzg0OTk0YTlmMDViN2EyYWE3ZTA5NiA9ICQoYDxkaXYgaWQ9Imh0bWxfODc0ZmMxNGM5NTM4NDk5NGE5ZjA1YjdhMmFhN2UwOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRpYWtvbmlhLCBJbmM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4ZjQ3NGY0M2JiZjQ4NDhhNjgwNDMxOGRhM2NiMmNlLnNldENvbnRlbnQoaHRtbF84NzRmYzE0Yzk1Mzg0OTk0YTlmMDViN2EyYWE3ZTA5Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNjRkODQzYjcwNzE0ZDg0YmNkOWFhNTkzZDZkODQ1ZC5iaW5kUG9wdXAocG9wdXBfNzhmNDc0ZjQzYmJmNDg0OGE2ODA0MzE4ZGEzY2IyY2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3YzQyY2I2M2ZjNTRhODhhODEzN2VjNmFjNzc0MjA4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDEwMTk0NjEsIC03Ny40NTAyMTM4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YTNmNThjZDQ0NzI0MTQ0OTIwMzdjNDcyMjM0ZTE5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NmUxNjljMDRkM2E0NTJlYmEwNDUyMWUwN2U5NWY5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfODZlMTY5YzA0ZDNhNDUyZWJhMDQ1MjFlMDdlOTVmOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhpbGxjcmVzdCBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTNmNThjZDQ0NzI0MTQ0OTIwMzdjNDcyMjM0ZTE5ZC5zZXRDb250ZW50KGh0bWxfODZlMTY5YzA0ZDNhNDUyZWJhMDQ1MjFlMDdlOTVmOTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTdjNDJjYjYzZmM1NGE4OGE4MTM3ZWM2YWM3NzQyMDguYmluZFBvcHVwKHBvcHVwXzRhM2Y1OGNkNDQ3MjQxNDQ5MjAzN2M0NzIyMzRlMTlkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNmFmYzUyNGI2YzI0Zjk1OTQ2ZThiMjViNTg2YTAwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwMDc3NjQ3LCAtNzYuNTg3NTQzNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2VjNmIxYjZmYjY3NDYyMGIxZWExZjc4ZGQwZjg0MTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmI2NTBjODYwMDg4NDRhY2ExODlmNWJhODQxYzdkZWQgPSAkKGA8ZGl2IGlkPSJodG1sX2ZiNjUwYzg2MDA4ODQ0YWNhMTg5ZjViYTg0MWM3ZGVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbG1lciBBIEhlbmRlcnNvbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2VjNmIxYjZmYjY3NDYyMGIxZWExZjc4ZGQwZjg0MTMuc2V0Q29udGVudChodG1sX2ZiNjUwYzg2MDA4ODQ0YWNhMTg5ZjViYTg0MWM3ZGVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y2YWZjNTI0YjZjMjRmOTU5NDZlOGIyNWI1ODZhMDAxLmJpbmRQb3B1cChwb3B1cF8zZWM2YjFiNmZiNjc0NjIwYjFlYTFmNzhkZDBmODQxMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTcwZTgzYzcwOGQ5NDM1YjlmYTkzMTY1NDFmMGU5MDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42NTg0MDA3NiwgLTc3LjczMTAyNDk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhOGIwNTU0MDI1MjQ1ZjViYzJjYzRiNTM1YjY2MTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwYjc0ODVmYjdlZTQxMWE5NWE2YjdjMDgyZTUxNThmID0gJChgPGRpdiBpZD0iaHRtbF9mMGI3NDg1ZmI3ZWU0MTFhOTVhNmI3YzA4MmU1MTU4ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VzdGVybiBIZWlnaHRzIE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhOGIwNTU0MDI1MjQ1ZjViYzJjYzRiNTM1YjY2MTcyLnNldENvbnRlbnQoaHRtbF9mMGI3NDg1ZmI3ZWU0MTFhOTVhNmI3YzA4MmU1MTU4Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NzBlODNjNzA4ZDk0MzViOWZhOTMxNjU0MWYwZTkwNC5iaW5kUG9wdXAocG9wdXBfZmE4YjA1NTQwMjUyNDVmNWJjMmNjNGI1MzViNjYxNzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZiYTFhYTYxNGFiNjRmNjNhMWI2OTNiMDE3NzNjY2ZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzAwNzM1NTUsIC03Ni41ODcxMTEwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMzFmMzI2ODQ0YzQ0YWFjOWU1MGM5Njc4NGEyYjFiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MmEwYWRjZmExMDE0ZDAzYjhiMzY3NTRjYmYxZTU1NCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTJhMGFkY2ZhMTAxNGQwM2I4YjM2NzU0Y2JmMWU1NTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBXZW5jZWxhdXMgQ2F0aG9saWMgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMzFmMzI2ODQ0YzQ0YWFjOWU1MGM5Njc4NGEyYjFiYy5zZXRDb250ZW50KGh0bWxfOTJhMGFkY2ZhMTAxNGQwM2I4YjM2NzU0Y2JmMWU1NTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmJhMWFhNjE0YWI2NGY2M2ExYjY5M2IwMTc3M2NjZmQuYmluZFBvcHVwKHBvcHVwX2IzMWYzMjY4NDRjNDRhYWM5ZTUwYzk2Nzg0YTJiMWJjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MmQyNDliZTZlZjc0MDhhYjAwNzA2MzllZDk0YTk5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5Nzc4NDY2LCAtNzYuNTgyODUwNjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTA2ZTkwOTgxNjRkNDhjNGEyM2I4NzQ0ZTU1NjRjZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmM0NDkyY2RhNmU2NGY1NzgwYWNmNTIzY2E4NjAxMGMgPSAkKGA8ZGl2IGlkPSJodG1sXzZjNDQ5MmNkYTZlNjRmNTc4MGFjZjUyM2NhODYwMTBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50ZXIgZm9yIEdyYWNlLSBGdWxsIExpdmluZzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTA2ZTkwOTgxNjRkNDhjNGEyM2I4NzQ0ZTU1NjRjZDYuc2V0Q29udGVudChodG1sXzZjNDQ5MmNkYTZlNjRmNTc4MGFjZjUyM2NhODYwMTBjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyZDI0OWJlNmVmNzQwOGFiMDA3MDYzOWVkOTRhOTkyLmJpbmRQb3B1cChwb3B1cF8xMDZlOTA5ODE2NGQ0OGM0YTIzYjg3NDRlNTU2NGNkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGE4MzgzNWMzZjI0NGQ2OWFiMTczOTNlNDdlYWQ5MmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40NDIxNjU4LCAtNzcuMDQxODcyOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDFmYWI4YzIwZDc2NGY0YjgwMDBkZWU5Nzg1MTY4NzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjJmMzA2NjMxNWRiNGU0OGI5ZTRkZDlhZWI2N2ZlZjMgPSAkKGA8ZGl2IGlkPSJodG1sXzIyZjMwNjYzMTVkYjRlNDhiOWU0ZGQ5YWViNjdmZWYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aCBDYXJyb2xsIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MWZhYjhjMjBkNzY0ZjRiODAwMGRlZTk3ODUxNjg3My5zZXRDb250ZW50KGh0bWxfMjJmMzA2NjMxNWRiNGU0OGI5ZTRkZDlhZWI2N2ZlZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGE4MzgzNWMzZjI0NGQ2OWFiMTczOTNlNDdlYWQ5MmYuYmluZFBvcHVwKHBvcHVwXzQxZmFiOGMyMGQ3NjRmNGI4MDAwZGVlOTc4NTE2ODczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MmQ4MWMzOGNjNWU0MjRmODA0ODFlYjY4YmEzMTYwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwNDg0NzEzLCAtNzYuNTUzNzA0MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDQ1OTc2N2U5NThlNGJlMTg2NjMxZGJlODAxMjY3YjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjg4ZWY0NTk4NjhjNDM5MWI4MjVhMmQ0MzY4NjMxODIgPSAkKGA8ZGl2IGlkPSJodG1sXzY4OGVmNDU5ODY4YzQzOTFiODI1YTJkNDM2ODYzMTgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Bcm1pc3RlYWQgR2FyZGVucyBFbGVtL01pZGRsZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDQ1OTc2N2U5NThlNGJlMTg2NjMxZGJlODAxMjY3YjMuc2V0Q29udGVudChodG1sXzY4OGVmNDU5ODY4YzQzOTFiODI1YTJkNDM2ODYzMTgyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyZDgxYzM4Y2M1ZTQyNGY4MDQ4MWViNjhiYTMxNjBiLmJpbmRQb3B1cChwb3B1cF9kNDU5NzY3ZTk1OGU0YmUxODY2MzFkYmU4MDEyNjdiMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTBjNjYwMGVhZmIxNGQ2Y2FmYzAyZjVlNGE2NDJkZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTY4MzYwNCwgLTc2LjU5NzQ2NzA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5NThhMmYwNmY5MDQwMjBiNzA5NjVmNTZhNjMwOTU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5OTFiZDhlNDFjMzQ0N2VhM2I2MzZmNmRkZmI4ZjJhID0gJChgPGRpdiBpZD0iaHRtbF9kOTkxYmQ4ZTQxYzM0NDdlYTNiNjM2ZjZkZGZiOGYyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rmlyc3QgQmFwdGlzdCBDaHVyY2ggTWVhbCBQcm9ncmFtPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTU4YTJmMDZmOTA0MDIwYjcwOTY1ZjU2YTYzMDk1NS5zZXRDb250ZW50KGh0bWxfZDk5MWJkOGU0MWMzNDQ3ZWEzYjYzNmY2ZGRmYjhmMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTBjNjYwMGVhZmIxNGQ2Y2FmYzAyZjVlNGE2NDJkZTIuYmluZFBvcHVwKHBvcHVwX2E5NThhMmYwNmY5MDQwMjBiNzA5NjVmNTZhNjMwOTU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZjEwMjU4YjExNmE0OGNkODZhNDYyMzY5ZDQ1ZDY2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwMzc5OTc1LCAtNzYuNTU0ODM3MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZiZTlmYTE5ZDVhNDcwYTg5ZjJlYjEwMGMzYzY1ZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQ4NjFkNDdhZjFkNGE4OWFlZGUxNWJlMTFlMzJjMjggPSAkKGA8ZGl2IGlkPSJodG1sXzQ0ODYxZDQ3YWYxZDRhODlhZWRlMTViZTExZTMyYzI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGFyZW1vbnQgU2Nob29sICMzMDc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmYmU5ZmExOWQ1YTQ3MGE4OWYyZWIxMDBjM2M2NWRhLnNldENvbnRlbnQoaHRtbF80NDg2MWQ0N2FmMWQ0YTg5YWVkZTE1YmUxMWUzMmMyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZjEwMjU4YjExNmE0OGNkODZhNDYyMzY5ZDQ1ZDY2ZS5iaW5kUG9wdXAocG9wdXBfYWZiZTlmYTE5ZDVhNDcwYTg5ZjJlYjEwMGMzYzY1ZGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QzMWUwYWRhMjA5YjRiNzdhNjQ5ZTM5MzM5OGFhYmNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjk2NzM3LCAtNzYuNTk3NTI2NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGY3ZjBmMGY1OGQ0NGQyOTllM2Q1YjllYzM2NGZmMzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjgwODViNzE4OTQ5NDA4OTk5ZGQ0MTVkNWNlODcyYzkgPSAkKGA8ZGl2IGlkPSJodG1sX2I4MDg1YjcxODk0OTQwODk5OWRkNDE1ZDVjZTg3MmM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OYXRpb25hbCBBY2FkZW15IEZvdW5kYXRpb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmN2YwZjBmNThkNDRkMjk5ZTNkNWI5ZWMzNjRmZjMwLnNldENvbnRlbnQoaHRtbF9iODA4NWI3MTg5NDk0MDg5OTlkZDQxNWQ1Y2U4NzJjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMzFlMGFkYTIwOWI0Yjc3YTY0OWUzOTMzOThhYWJjYy5iaW5kUG9wdXAocG9wdXBfOGY3ZjBmMGY1OGQ0NGQyOTllM2Q1YjllYzM2NGZmMzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlYzc5MjBiYWU3OTQ1MjI4ZjlmZGZjMGJiODE1NmJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDMxNjQ4ODcsIC03Ni4zMjkxMDU4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYWM5YjRhM2I1Yzk0MWZmOTNhOGI0OWY3MjQ2YWI1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZjlmYzM5YTBiYmE0YjE4OTJhZGY5NzA1YzRmMzZlNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMmY5ZmMzOWEwYmJhNGIxODkyYWRmOTcwNWM0ZjM2ZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmZvcmQgQ29tbXVuaXR5IEFjdGlvbiBBZ2VuY3k8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhYzliNGEzYjVjOTQxZmY5M2E4YjQ5ZjcyNDZhYjU5LnNldENvbnRlbnQoaHRtbF8yZjlmYzM5YTBiYmE0YjE4OTJhZGY5NzA1YzRmMzZlNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZWM3OTIwYmFlNzk0NTIyOGY5ZmRmYzBiYjgxNTZiZi5iaW5kUG9wdXAocG9wdXBfYmFjOWI0YTNiNWM5NDFmZjkzYThiNDlmNzI0NmFiNTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwZmFlZTk2MTE3MDRiZTdhZTI0YjFlNTFmOTFlYjViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzg3ODQwOTcsIC03NS42MTExMjUwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDU4NTYwMGU0MGE0YmNjYTE1OTNhN2FhNjVkN2RlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTQ2YTZmMWY4ZTU0NzU2OTNmMTJjOGJiODdkMGE3MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTU0NmE2ZjFmOGU1NDc1NjkzZjEyYzhiYjg3ZDBhNzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgU2FsaXNidXJ5IEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkNTg1NjAwZTQwYTRiY2NhMTU5M2E3YWE2NWQ3ZGUwLnNldENvbnRlbnQoaHRtbF9hNTQ2YTZmMWY4ZTU0NzU2OTNmMTJjOGJiODdkMGE3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MGZhZWU5NjExNzA0YmU3YWUyNGIxZTUxZjkxZWI1Yi5iaW5kUG9wdXAocG9wdXBfZmQ1ODU2MDBlNDBhNGJjY2ExNTkzYTdhYTY1ZDdkZTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwODgyNTJhYWIxNjQwOWQ4YzljNGY4YmNjZmZiYWZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzg4OTE5OTgsIC03NS42MTEyNTUwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OGQyYWExMjlmNmU0Mjc4YTNmY2MyNzkzNjgwN2I0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDQ0NjU4YmNkMTI0Nzk2OGFmMjEyZWU0NGUwNTUzMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjQ0NDY1OGJjZDEyNDc5NjhhZjIxMmVlNDRlMDU1MzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc2xleSBUZW1wbGUgT3V0cmVhY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4ZDJhYTEyOWY2ZTQyNzhhM2ZjYzI3OTM2ODA3YjQyLnNldENvbnRlbnQoaHRtbF9mNDQ0NjU4YmNkMTI0Nzk2OGFmMjEyZWU0NGUwNTUzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMDg4MjUyYWFiMTY0MDlkOGM5YzRmOGJjY2ZmYmFmYi5iaW5kUG9wdXAocG9wdXBfNjhkMmFhMTI5ZjZlNDI3OGEzZmNjMjc5MzY4MDdiNDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3ZjlkZjJlNTcwNTQ3OGY4MzU0MWNlMTIyODBkMTNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzkxMDk4OTIsIC03NS42MDI1MjQ1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYThkYmU3MTNkYzI0MjI0OGFiMmZhMTQyMDBiODY4NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMmE1YzY4YTk2MTA0MDhhYTE2ZDE3ZjY0ZjBlOTYzNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDJhNWM2OGE5NjEwNDA4YWExNmQxN2Y2NGYwZTk2MzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pbGxzIE1lbW9yaWFsIEJhcHRpc3QgVGVtcGxlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYThkYmU3MTNkYzI0MjI0OGFiMmZhMTQyMDBiODY4NS5zZXRDb250ZW50KGh0bWxfMDJhNWM2OGE5NjEwNDA4YWExNmQxN2Y2NGYwZTk2MzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDdmOWRmMmU1NzA1NDc4ZjgzNTQxY2UxMjI4MGQxM2QuYmluZFBvcHVwKHBvcHVwX2RhOGRiZTcxM2RjMjQyMjQ4YWIyZmExNDIwMGI4Njg1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZmQ1NjZlNWQ3ODM0MTA0YjdlY2Y3MTcxYjU4OGI0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5ODAzOTcxLCAtNzYuNTg1MTE4ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDVmNzAzMTMyY2I5NDY0ZThmZWM4ODM1Y2I5NzA0NmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2QxZmExZDJkYWJhNDczN2EyNmQ5OWYyZWMxYzZmZGQgPSAkKGA8ZGl2IGlkPSJodG1sXzNkMWZhMWQyZGFiYTQ3MzdhMjZkOTlmMmVjMWM2ZmRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UZW5jaCBUaWxnaG1hbiBFbGVtLi9NaWRkbGUgU2M8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1ZjcwMzEzMmNiOTQ2NGU4ZmVjODgzNWNiOTcwNDZhLnNldENvbnRlbnQoaHRtbF8zZDFmYTFkMmRhYmE0NzM3YTI2ZDk5ZjJlYzFjNmZkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZmQ1NjZlNWQ3ODM0MTA0YjdlY2Y3MTcxYjU4OGI0ZS5iaW5kUG9wdXAocG9wdXBfZDVmNzAzMTMyY2I5NDY0ZThmZWM4ODM1Y2I5NzA0NmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmN2Y3NzQ0MzdmMjQ1ODY5YzNkNGU4M2VhOWQzZGQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjA5OTA5ODQsIC03NS44Mjg1ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTFlNDVlMTUyMWMyNDMyMWE1YTI3MzAwNGE2ZWY2ODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTJmZDRkNjE0YWNjNDA5NGI2ZjRmZmU2N2U2MTkyY2EgPSAkKGA8ZGl2IGlkPSJodG1sXzkyZmQ0ZDYxNGFjYzQwOTRiNmY0ZmZlNjdlNjE5MmNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZWNpbCBDb3VudHkgRFNTIEhlbHAgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMWU0NWUxNTIxYzI0MzIxYTVhMjczMDA0YTZlZjY4Mi5zZXRDb250ZW50KGh0bWxfOTJmZDRkNjE0YWNjNDA5NGI2ZjRmZmU2N2U2MTkyY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWY3Zjc3NDQzN2YyNDU4NjljM2Q0ZTgzZWE5ZDNkZDQuYmluZFBvcHVwKHBvcHVwX2ExZTQ1ZTE1MjFjMjQzMjFhNWEyNzMwMDRhNmVmNjgyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDJmOGNlYmVlNWE0MmUxYTliYWFmMTYyM2RhMWI1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5NzkxNDA1LCAtNzYuNTg3ODU2OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjdkMTc3MjgwYmI2NDYzN2E2MTg3MjQ1MTI0NzM1ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmNkZmUwMGM1MzNiNDkxNzgyOGMxMDUxMDMwODRkZTQgPSAkKGA8ZGl2IGlkPSJodG1sX2JjZGZlMDBjNTMzYjQ5MTc4MjhjMTA1MTAzMDg0ZGU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYWx0aW1vcmUgSGVhbHRoeSBTdGFydCBJbmMuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yN2QxNzcyODBiYjY0NjM3YTYxODcyNDUxMjQ3MzVkZS5zZXRDb250ZW50KGh0bWxfYmNkZmUwMGM1MzNiNDkxNzgyOGMxMDUxMDMwODRkZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDQyZjhjZWJlZTVhNDJlMWE5YmFhZjE2MjNkYTFiNTEuYmluZFBvcHVwKHBvcHVwXzI3ZDE3NzI4MGJiNjQ2MzdhNjE4NzI0NTEyNDczNWRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZGIyNWIwYWZkMmE0MjMzYWMxM2Q2ZmZhN2FhZDYzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY5MTI3Mjk2LCAtNzcuNzkwNTczMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzZkMzU5NTI1N2I1NGMxZmE5YmZiMmM4NjQxOWE1OTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTZiZjk2MDQxYWU0NGJkOThiNmZjYzE2MzNlMjRmM2EgPSAkKGA8ZGl2IGlkPSJodG1sXzE2YmY5NjA0MWFlNDRiZDk4YjZmY2MxNjMzZTI0ZjNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdGFyIENvbW11bml0eSBWZW50dXJlczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzZkMzU5NTI1N2I1NGMxZmE5YmZiMmM4NjQxOWE1OTMuc2V0Q29udGVudChodG1sXzE2YmY5NjA0MWFlNDRiZDk4YjZmY2MxNjMzZTI0ZjNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNkYjI1YjBhZmQyYTQyMzNhYzEzZDZmZmE3YWFkNjM0LmJpbmRQb3B1cChwb3B1cF8zNmQzNTk1MjU3YjU0YzFmYTliZmIyYzg2NDE5YTU5MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjU5YmQ3YzA3NDJjNDRkMWI5ZTFlNWIwMmQxNjhhODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNTY5OTA3MiwgLTc1Ljg1MjAwOTY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1MDZjZGRhNGVhNzRhMDM5MDE2ZDE3YTQzMTBiYjBhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAwYzdiMTY0MjU3YTQ0ZjBhZDk4MjJiM2RiMzg0NGEyID0gJChgPGRpdiBpZD0iaHRtbF8wMGM3YjE2NDI1N2E0NGYwYWQ5ODIyYjNkYjM4NDRhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2VudCBDb3VudHkgWC1tYXMgQmFza2V0IENvbS48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1MDZjZGRhNGVhNzRhMDM5MDE2ZDE3YTQzMTBiYjBhLnNldENvbnRlbnQoaHRtbF8wMGM3YjE2NDI1N2E0NGYwYWQ5ODIyYjNkYjM4NDRhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNTliZDdjMDc0MmM0NGQxYjllMWU1YjAyZDE2OGE4Ni5iaW5kUG9wdXAocG9wdXBfOTUwNmNkZGE0ZWE3NGEwMzkwMTZkMTdhNDMxMGJiMGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1MWNjMjA0ZTM5MTQzNzc4MmYxZjFhZGI0MDIwMmRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjc0NzgxOTgsIC03Ni45OTY0NjQyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMmRjODVjYmRmOTc0ODM5YmMxMzQyZjY2MzMzNTQ0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNjNhZWYxMWMxODQ0N2I4YWExZmExZjZmZGE1NzBkYSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzYzYWVmMTFjMTg0NDdiOGFhMWZhMWY2ZmRhNTcwZGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdVTUMgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMmRjODVjYmRmOTc0ODM5YmMxMzQyZjY2MzMzNTQ0Ni5zZXRDb250ZW50KGh0bWxfYzYzYWVmMTFjMTg0NDdiOGFhMWZhMWY2ZmRhNTcwZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTUxY2MyMDRlMzkxNDM3NzgyZjFmMWFkYjQwMjAyZGEuYmluZFBvcHVwKHBvcHVwXzAyZGM4NWNiZGY5NzQ4MzliYzEzNDJmNjYzMzM1NDQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ODZhMzQ0NzI4M2M0YzYxYTlkMjg0YjgxZTI5M2YyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAyNjE3OTQ0LCAtNzYuNjAwNzg1OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGFmMzE2MDEzYmQ4NDRjZGI2ZjJiNjJkNDNjMGE4OWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjY5YjE5ZjJlMWI5NGVlNDliN2U0MzEwYjAzZGE5ZWEgPSAkKGA8ZGl2IGlkPSJodG1sX2Y2OWIxOWYyZTFiOTRlZTQ5YjdlNDMxMGIwM2RhOWVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Bbm5lIEFydW5kZWwgQ291bnR5IEZvb2QgQmFuazwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGFmMzE2MDEzYmQ4NDRjZGI2ZjJiNjJkNDNjMGE4OWYuc2V0Q29udGVudChodG1sX2Y2OWIxOWYyZTFiOTRlZTQ5YjdlNDMxMGIwM2RhOWVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc4NmEzNDQ3MjgzYzRjNjFhOWQyODRiODFlMjkzZjJhLmJpbmRQb3B1cChwb3B1cF8wYWYzMTYwMTNiZDg0NGNkYjZmMmI2MmQ0M2MwYTg5ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGRkNzVhYTJmNWViNGJmNmExMzg4ZGQ2Y2U3NDhlZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMzkxMTg5MiwgLTc2LjU1MjE1MTEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4MDk1MzY2YmI4NjQyYmViZDM5NDcyZWRiY2M0NDg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhNTRmZDYxNDU4MzRjNzZiODZjNWVkMmY1NjdjMDMwID0gJChgPGRpdiBpZD0iaHRtbF9kYTU0ZmQ2MTQ1ODM0Yzc2Yjg2YzVlZDJmNTY3YzAzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3ByZWFkIFRoZSBXb3JkIENhdGhlZHJhbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjgwOTUzNjZiYjg2NDJiZWJkMzk0NzJlZGJjYzQ0ODguc2V0Q29udGVudChodG1sX2RhNTRmZDYxNDU4MzRjNzZiODZjNWVkMmY1NjdjMDMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkZDc1YWEyZjVlYjRiZjZhMTM4OGRkNmNlNzQ4ZWZlLmJpbmRQb3B1cChwb3B1cF82ODA5NTM2NmJiODY0MmJlYmQzOTQ3MmVkYmNjNDQ4OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Y0ZGZiNDAwZDRhNDNkMGI4YmFiOTY3MTZhODEwZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMzU4MDEwOSwgLTc2LjU0OTEwNjczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5ZDNhNjRjMmJjZTRlYzg5Y2NlMjIzOTFiYmY4MzFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxYmYwMTI1ZjgyODQ5MmViY2NhMzJmM2M3ZWEzZjliID0gJChgPGRpdiBpZD0iaHRtbF83MWJmMDEyNWY4Mjg0OTJlYmNjYTMyZjNjN2VhM2Y5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIEFudGhvbnkgb2YgUGFkdWE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5ZDNhNjRjMmJjZTRlYzg5Y2NlMjIzOTFiYmY4MzFkLnNldENvbnRlbnQoaHRtbF83MWJmMDEyNWY4Mjg0OTJlYmNjYTMyZjNjN2VhM2Y5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZjRkZmI0MDBkNGE0M2QwYjhiYWI5NjcxNmE4MTBlMS5iaW5kUG9wdXAocG9wdXBfYjlkM2E2NGMyYmNlNGVjODljY2UyMjM5MWJiZjgzMWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg0YWY1M2VlYzAyYzQ5NGU4YjczOTA0MDQwOGJlMmNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzIyMjQ5ODgsIC03Ni41NDUxNjgwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YzY3NTgwNzkxMjk0ZDk0OTY3NzM1ZGQ0Yzc4NDBmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MDIyYmFhN2UxNDI0MjA5OTk4ZWZjYjQxMjdkMjJkMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjAyMmJhYTdlMTQyNDIwOTk5OGVmY2I0MTI3ZDIyZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZ1cmxleSBFbGVtZW50YXJ5IFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGM2NzU4MDc5MTI5NGQ5NDk2NzczNWRkNGM3ODQwZjUuc2V0Q29udGVudChodG1sXzYwMjJiYWE3ZTE0MjQyMDk5OThlZmNiNDEyN2QyMmQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0YWY1M2VlYzAyYzQ5NGU4YjczOTA0MDQwOGJlMmNjLmJpbmRQb3B1cChwb3B1cF80YzY3NTgwNzkxMjk0ZDk0OTY3NzM1ZGQ0Yzc4NDBmNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWJhM2Q3OGJkNzNjNGZlNjhlYTI5YTEzY2NhOWNkNTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yODMxMDM3OTk5OTk5OSwgLTc2LjQ5NjY0MzU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5MWU3ODI1ZjM2NDQ3ZDE5MzlhMGFjMWI3YmU2MTUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzMWVjZGNmYzEyMDQzZWVhYTljYjcxNWU0NWU2YjA2ID0gJChgPGRpdiBpZD0iaHRtbF9kMzFlY2RjZmMxMjA0M2VlYWE5Y2I3MTVlNDVlNmIwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJjIG9mIEJhbHRpbW9yZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDkxZTc4MjVmMzY0NDdkMTkzOWEwYWMxYjdiZTYxNTAuc2V0Q29udGVudChodG1sX2QzMWVjZGNmYzEyMDQzZWVhYTljYjcxNWU0NWU2YjA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FiYTNkNzhiZDczYzRmZTY4ZWEyOWExM2NjYTljZDUxLmJpbmRQb3B1cChwb3B1cF8wOTFlNzgyNWYzNjQ0N2QxOTM5YTBhYzFiN2JlNjE1MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWExNTZlZTZhZjg4NGQzYmIyMGQ0Yzg1N2NmOWU5YzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMzc3NDg4MiwgLTc2LjU1MjI0NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjM4MGY0ZjQ0MDg5NDQwZDliY2Q1ZTZmMzc4NTViNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjcwZDYyNDJkMGM0NDRhOTkxMWI5YzY2NTdjNzNhYmUgPSAkKGA8ZGl2IGlkPSJodG1sXzI3MGQ2MjQyZDBjNDQ0YTk5MTFiOWM2NjU3YzczYWJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HYXJkZW52aWxsZSBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMzgwZjRmNDQwODk0NDBkOWJjZDVlNmYzNzg1NWI3NS5zZXRDb250ZW50KGh0bWxfMjcwZDYyNDJkMGM0NDRhOTkxMWI5YzY2NTdjNzNhYmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWExNTZlZTZhZjg4NGQzYmIyMGQ0Yzg1N2NmOWU5YzAuYmluZFBvcHVwKHBvcHVwX2IzODBmNGY0NDA4OTQ0MGQ5YmNkNWU2ZjM3ODU1Yjc1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZGIzMTY1YTQ2MWM0NzAzOTU0ZjljZGI2Njk1ZDI0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjU3OTAzMjc1LCAtNzYuMDg5MjQ1NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzdmYjI3ZGVhNDI4NGFlNzhlY2IwYTE2NzM5ZTg0ZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGYzMWYzZDgwOTUxNDVkZGE5ZDBjNzlkZTE1MDEwM2MgPSAkKGA8ZGl2IGlkPSJodG1sXzRmMzFmM2Q4MDk1MTQ1ZGRhOWQwYzc5ZGUxNTAxMDNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYW5keSBIaWxsIEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83N2ZiMjdkZWE0Mjg0YWU3OGVjYjBhMTY3MzllODRmYi5zZXRDb250ZW50KGh0bWxfNGYzMWYzZDgwOTUxNDVkZGE5ZDBjNzlkZTE1MDEwM2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmRiMzE2NWE0NjFjNDcwMzk1NGY5Y2RiNjY5NWQyNGEuYmluZFBvcHVwKHBvcHVwXzc3ZmIyN2RlYTQyODRhZTc4ZWNiMGExNjczOWU4NGZiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82M2ZlMTg4MmZlZGU0ZDU1OTk1MDZiNzk3NTM4MTM0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzMTMyNzE5LCAtNzYuNTI5MjIyOTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTk4NzhjMTQ2ZjBjNDZlMTkwOWY4ZTc5Y2NhNDY3NmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTkxZjBiYTAyZDg5NDU3MGIxNzNhNTdiOGM3Y2M3ZDggPSAkKGA8ZGl2IGlkPSJodG1sX2U5MWYwYmEwMmQ4OTQ1NzBiMTczYTU3YjhjN2NjN2Q4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb3VudCBQbGVhc2FudCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5ODc4YzE0NmYwYzQ2ZTE5MDlmOGU3OWNjYTQ2NzZmLnNldENvbnRlbnQoaHRtbF9lOTFmMGJhMDJkODk0NTcwYjE3M2E1N2I4YzdjYzdkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82M2ZlMTg4MmZlZGU0ZDU1OTk1MDZiNzk3NTM4MTM0Mi5iaW5kUG9wdXAocG9wdXBfOTk4NzhjMTQ2ZjBjNDZlMTkwOWY4ZTc5Y2NhNDY3NmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBkYTg0NDJkZTExNDQ5MjQ4YTVmNjkwM2U2Y2Y2ZWVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzE4MjAyNTgsIC03Ni41NDAwMjAyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDFlZWI2OTQzNTk0M2EzYjg1NjdiOWRmNWY0MzFhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84M2NiMWJlYTBkYzI0NjQ1ODIyYjM3NmVkZGZmNzQzZCA9ICQoYDxkaXYgaWQ9Imh0bWxfODNjYjFiZWEwZGMyNDY0NTgyMmIzNzZlZGRmZjc0M2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vcmF2aWEgUGFyayBFbGVtL01pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0MWVlYjY5NDM1OTQzYTNiODU2N2I5ZGY1ZjQzMWE4LnNldENvbnRlbnQoaHRtbF84M2NiMWJlYTBkYzI0NjQ1ODIyYjM3NmVkZGZmNzQzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZGE4NDQyZGUxMTQ0OTI0OGE1ZjY5MDNlNmNmNmVlZC5iaW5kUG9wdXAocG9wdXBfZDQxZWViNjk0MzU5NDNhM2I4NTY3YjlkZjVmNDMxYTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlMjdjYzI3MGY4YjQ2ZDc4NTUyMzg2ZTE3YjNkYjU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzUyNjY5MzQsIC03Ni41MzMxMjIyMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYzFjMTljOGNkYjg0ZjRjYTBmYTVhOTJjM2Q0ZDdjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTMwMzUxYjgxYTA0MzYyYjU1ZjRiOWI0NzYzZjEyMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTEzMDM1MWI4MWEwNDM2MmI1NWY0YjliNDc2M2YxMjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBNYXR0aGlhcyBFcGlzY29wYWwgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzFjMTljOGNkYjg0ZjRjYTBmYTVhOTJjM2Q0ZDdjMy5zZXRDb250ZW50KGh0bWxfYTEzMDM1MWI4MWEwNDM2MmI1NWY0YjliNDc2M2YxMjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmUyN2NjMjcwZjhiNDZkNzg1NTIzODZlMTdiM2RiNTcuYmluZFBvcHVwKHBvcHVwX2JjMWMxOWM4Y2RiODRmNGNhMGZhNWE5MmMzZDRkN2MzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTQ5MWIzN2MwNTU0MjM5YmRiMmI0N2EwYTNmZGUwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjUxMDg1ODEyLCAtNzYuNjQ4MzA5MzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmMxYThmZDIwY2I5NGQwY2EwMmM3NTc3M2M0NGUzOTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTdlNmQxYTI0Njg4NDJiYjlkODE3YmZkZTI0YjUyOWIgPSAkKGA8ZGl2IGlkPSJodG1sXzU3ZTZkMWEyNDY4ODQyYmI5ZDgxN2JmZGUyNGI1MjliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbmQgSHVuZ2VyIGluIENhbHZlcnQgQ291bnR5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzFhOGZkMjBjYjk0ZDBjYTAyYzc1NzczYzQ0ZTM5MC5zZXRDb250ZW50KGh0bWxfNTdlNmQxYTI0Njg4NDJiYjlkODE3YmZkZTI0YjUyOWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjU0OTFiMzdjMDU1NDIzOWJkYjJiNDdhMGEzZmRlMDcuYmluZFBvcHVwKHBvcHVwX2JjMWE4ZmQyMGNiOTRkMGNhMDJjNzU3NzNjNDRlMzkwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMjAzN2Y0ZTE1MTU0YzY1ODUxMWViZmY5ZDhkYThkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk4MzgzNjc5LCAtNzYuNTEzNjI3NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzczYjVkNzY2ZmVjNGRiNGI2YzZjNWFjMDU3YmMyNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ4MmUyOGZmZjI1NDM4MGFlM2M5OWU5MmNlMmU4NmIgPSAkKGA8ZGl2IGlkPSJodG1sXzM0ODJlMjhmZmYyNTQzODBhZTNjOTllOTJjZTJlODZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaG9lbml4IEFjYWRlbXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3M2I1ZDc2NmZlYzRkYjRiNmM2YzVhYzA1N2JjMjY4LnNldENvbnRlbnQoaHRtbF8zNDgyZTI4ZmZmMjU0MzgwYWUzYzk5ZTkyY2UyZTg2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMjAzN2Y0ZTE1MTU0YzY1ODUxMWViZmY5ZDhkYThkZi5iaW5kUG9wdXAocG9wdXBfYzczYjVkNzY2ZmVjNGRiNGI2YzZjNWFjMDU3YmMyNjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjNGRmMGY3OWZhZDQzNWY4OWY1NmIxZTk0NDUzOGZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTM0NjQ3MjUsIC03Ni45OTQ2Nzc5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNjg4NGY3ZTkxYWY0N2YyYTIzNGNkMzc2ZTA2ZGZhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZGE3MTlkNDg0NmU0OWVkODczZGJmMDdlOWNlODUyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYmRhNzE5ZDQ4NDZlNDllZDg3M2RiZjA3ZTljZTg1MmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJvYmVydCBNb3RvbiBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNjg4NGY3ZTkxYWY0N2YyYTIzNGNkMzc2ZTA2ZGZhMC5zZXRDb250ZW50KGh0bWxfYmRhNzE5ZDQ4NDZlNDllZDg3M2RiZjA3ZTljZTg1MmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWM0ZGYwZjc5ZmFkNDM1Zjg5ZjU2YjFlOTQ0NTM4ZmEuYmluZFBvcHVwKHBvcHVwX2Y2ODg0ZjdlOTFhZjQ3ZjJhMjM0Y2QzNzZlMDZkZmEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNTYyODQxN2VjZDE0MTBkYjZiYWNmNWE3ZDIwNTFiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAxMzU4NTQyLCAtNzUuODkwMDc5MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTI5ZjBkMWE4ODVhNDM3MDk4M2U0NjEyYWFkZmM2NDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2MxZmFkNTUzZTkxNDNmNjkwOWVkNWE3ZjI4ZjNkZmQgPSAkKGA8ZGl2IGlkPSJodG1sXzdjMWZhZDU1M2U5MTQzZjY5MDllZDVhN2YyOGYzZGZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gTWFydGluJ3MgTWluaXN0cmllczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTI5ZjBkMWE4ODVhNDM3MDk4M2U0NjEyYWFkZmM2NDQuc2V0Q29udGVudChodG1sXzdjMWZhZDU1M2U5MTQzZjY5MDllZDVhN2YyOGYzZGZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA1NjI4NDE3ZWNkMTQxMGRiNmJhY2Y1YTdkMjA1MWI3LmJpbmRQb3B1cChwb3B1cF81MjlmMGQxYTg4NWE0MzcwOTgzZTQ2MTJhYWRmYzY0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGVhNTMxMTEyMWFiNDVhZmIyNjEwNDA1YWYxOWU4ODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MTQ2NzY2NiwgLTc3LjQ5MTU4NTA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0NDlkZTNhMWE4MjRmMzU5MmU5OGQ3OWIyZjIwNDA5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkNGQwYjk0YWQzMjRlNTA5MTg2YTFkNjAxMWZhZTlmID0gJChgPGRpdiBpZD0iaHRtbF9kZDRkMGI5NGFkMzI0ZTUwOTE4NmExZDYwMTFmYWU5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FzY2FkZSBFbGVtZW50YXJ5IFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjQ0OWRlM2ExYTgyNGYzNTkyZTk4ZDc5YjJmMjA0MDkuc2V0Q29udGVudChodG1sX2RkNGQwYjk0YWQzMjRlNTA5MTg2YTFkNjAxMWZhZTlmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhlYTUzMTExMjFhYjQ1YWZiMjYxMDQwNWFmMTllODg5LmJpbmRQb3B1cChwb3B1cF9iNDQ5ZGUzYTFhODI0ZjM1OTJlOThkNzliMmYyMDQwOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzA3MDM2M2NkYmYxNGEwOWJiOWI0ZGMzNzAwZmE3MzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42Mzc2MzUyMSwgLTc3LjQxMDU5Nzk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5NmJiMjg4NTZkNDQxMDI5OTJhMjBiNGYwMjg2YWFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5MmE1YmVjMGVhMzQ1N2JiYTUyODAwNWM1M2U1NTA1ID0gJChgPGRpdiBpZD0iaHRtbF9jOTJhNWJlYzBlYTM0NTdiYmE1MjgwMDVjNTNlNTUwNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2F0b2N0aW4gSGlnaCBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5NmJiMjg4NTZkNDQxMDI5OTJhMjBiNGYwMjg2YWFiLnNldENvbnRlbnQoaHRtbF9jOTJhNWJlYzBlYTM0NTdiYmE1MjgwMDVjNTNlNTUwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MDcwMzYzY2RiZjE0YTA5YmI5YjRkYzM3MDBmYTczNC5iaW5kUG9wdXAocG9wdXBfYjk2YmIyODg1NmQ0NDEwMjk5MmEyMGI0ZjAyODZhYWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5NmM4Y2UyMDk4NjQzOWU5ZGI2NjQ5YTExMTJlMzMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjQ1NTA0MTEsIC03Ny43MTY2MTIwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODRkODdmYzM0M2I0OWU1YjExOGMxNWM0MGFmZTllYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZmNhOTk0MmRiMmE0MTc2OThiODYwNmQ2NDMxYTc0MyA9ICQoYDxkaXYgaWQ9Imh0bWxfOGZjYTk5NDJkYjJhNDE3Njk4Yjg2MDZkNjQzMWE3NDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRyaW5pdHkgRm9vZCBCYW5rPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ODRkODdmYzM0M2I0OWU1YjExOGMxNWM0MGFmZTllYS5zZXRDb250ZW50KGh0bWxfOGZjYTk5NDJkYjJhNDE3Njk4Yjg2MDZkNjQzMWE3NDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjk2YzhjZTIwOTg2NDM5ZTlkYjY2NDlhMTExMmUzMzMuYmluZFBvcHVwKHBvcHVwXzk4NGQ4N2ZjMzQzYjQ5ZTViMTE4YzE1YzQwYWZlOWVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOWZmM2I5OTY1NzU0YjMyODdkODhkYzZiMDI1MjIxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzMDE4MzY2LCAtNzYuNjk0NjExNDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDQ1MTNjYmI0NDdkNDk3ZGJjZDBiYjkzOTc3YTY4ZTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTY0ODdiNDRlMzVlNDliNmIzOGJjOTRkNjhiZDZkYjEgPSAkKGA8ZGl2IGlkPSJodG1sXzU2NDg3YjQ0ZTM1ZTQ5YjZiMzhiYzk0ZDY4YmQ2ZGIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYWx2aW4gUm9kd2VsbCBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDUxM2NiYjQ0N2Q0OTdkYmNkMGJiOTM5NzdhNjhlOS5zZXRDb250ZW50KGh0bWxfNTY0ODdiNDRlMzVlNDliNmIzOGJjOTRkNjhiZDZkYjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTlmZjNiOTk2NTc1NGIzMjg3ZDg4ZGM2YjAyNTIyMWEuYmluZFBvcHVwKHBvcHVwXzQ0NTEzY2JiNDQ3ZDQ5N2RiY2QwYmI5Mzk3N2E2OGU5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jY2QyNWUzNTRkMDE0MDEzODdmYmI1ZTM4YzRlMWZiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzNDczNzcyLCAtNzYuNzA1MjA2ODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYThlNjg2MDQ4NjMyNGRiYWI1ZDMyZjcwMDFmY2M1NmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGE2ZjVlYjdiMjRiNDliNDk3NTg3M2M0ZjBmZDkzNTcgPSAkKGA8ZGl2IGlkPSJodG1sX2RhNmY1ZWI3YjI0YjQ5YjQ5NzU4NzNjNGYwZmQ5MzU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UcmluaXR5IE5ldyBCaXJ0aCBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYThlNjg2MDQ4NjMyNGRiYWI1ZDMyZjcwMDFmY2M1NmIuc2V0Q29udGVudChodG1sX2RhNmY1ZWI3YjI0YjQ5YjQ5NzU4NzNjNGYwZmQ5MzU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjZDI1ZTM1NGQwMTQwMTM4N2ZiYjVlMzhjNGUxZmI5LmJpbmRQb3B1cChwb3B1cF9hOGU2ODYwNDg2MzI0ZGJhYjVkMzJmNzAwMWZjYzU2YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTY1N2ViYTRkMjJmNGI4NjkwNTIzMTU2NDYwNmVkOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNzYxOTgxNiwgLTc2LjcyNjk4MTI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5NmY1M2FkOWRmNzQ2ZWNiNThlNmFmNGU0NjRkOWI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I3ZjNiNmZmMTM4ODQyMDc4ODI5ZTA5MTJjNWJiY2NhID0gJChgPGRpdiBpZD0iaHRtbF9iN2YzYjZmZjEzODg0MjA3ODgyOWUwOTEyYzViYmNjYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2Vla2VuZCBCYWNrcGFja3MgZm9yIEhvbWVsZXNzIEtpZHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5NmY1M2FkOWRmNzQ2ZWNiNThlNmFmNGU0NjRkOWI3LnNldENvbnRlbnQoaHRtbF9iN2YzYjZmZjEzODg0MjA3ODgyOWUwOTEyYzViYmNjYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNjU3ZWJhNGQyMmY0Yjg2OTA1MjMxNTY0NjA2ZWQ5Yi5iaW5kUG9wdXAocG9wdXBfMDk2ZjUzYWQ5ZGY3NDZlY2I1OGU2YWY0ZTQ2NGQ5YjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ2OGMwM2RlYjE5OTRhMWZhNTllMWViMWU2OTAyMzg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzMxMzk5NTMsIC03Ni42ODQ1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NzRmZjhjOTlkMjM0YjA5YTQwMzY0NDQ3OWVlOTNjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZWZkMTc4NTEzM2M0NzE2ODlmMTJkMmNiODBiZWI4NyA9ICQoYDxkaXYgaWQ9Imh0bWxfY2VmZDE3ODUxMzNjNDcxNjg5ZjEyZDJjYjgwYmViODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpbWxpY28gRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3NGZmOGM5OWQyMzRiMDlhNDAzNjQ0NDc5ZWU5M2MzLnNldENvbnRlbnQoaHRtbF9jZWZkMTc4NTEzM2M0NzE2ODlmMTJkMmNiODBiZWI4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NjhjMDNkZWIxOTk0YTFmYTU5ZTFlYjFlNjkwMjM4Ni5iaW5kUG9wdXAocG9wdXBfNzc0ZmY4Yzk5ZDIzNGIwOWE0MDM2NDQ0NzllZTkzYzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2ZTQyNzI5NjYwYzQ1MTA4ZDQzZjZhNTEyNmM1ZmEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzI1NDQwMDEsIC03Ni40NTEwNDMyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOTJlYTMxMmE3OWI0MWE2ODA3YTgwMDFhOTEyMTEwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTMxMjcwOGIxMjg0ZmRiYjAzMzZhYTYxNDA2MzkxMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWEzMTI3MDhiMTI4NGZkYmIwMzM2YWE2MTQwNjM5MTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVhc3Rlcm4gSW50ZXJmYWl0aCBPdXRyZWFjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDkyZWEzMTJhNzliNDFhNjgwN2E4MDAxYTkxMjExMDEuc2V0Q29udGVudChodG1sXzFhMzEyNzA4YjEyODRmZGJiMDMzNmFhNjE0MDYzOTEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2ZTQyNzI5NjYwYzQ1MTA4ZDQzZjZhNTEyNmM1ZmEyLmJpbmRQb3B1cChwb3B1cF9kOTJlYTMxMmE3OWI0MWE2ODA3YTgwMDFhOTEyMTEwMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTYxNWRiZmI2NTY1NDhiNjkxZjcyZTQyODM5ZmIzMGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42NDE1MzI0NiwgLTc3LjcyMDU0MjI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyNjY0M2M1Y2MwYzQzYjc4YzYxMGI3YjNjZTA4ODlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FhOTg1NTE4ZDllNzRkMjM4ZjliYWZkMTAxOTA0M2ZmID0gJChgPGRpdiBpZD0iaHRtbF9hYTk4NTUxOGQ5ZTc0ZDIzOGY5YmFmZDEwMTkwNDNmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJpZGdlIE9mIExpZmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyNjY0M2M1Y2MwYzQzYjc4YzYxMGI3YjNjZTA4ODlmLnNldENvbnRlbnQoaHRtbF9hYTk4NTUxOGQ5ZTc0ZDIzOGY5YmFmZDEwMTkwNDNmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNjE1ZGJmYjY1NjU0OGI2OTFmNzJlNDI4MzlmYjMwZi5iaW5kUG9wdXAocG9wdXBfNTI2NjQzYzVjYzBjNDNiNzhjNjEwYjdiM2NlMDg4OWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlYjA1MTM2Nzg0ZDQ5MDU5YzU4MzQxOTM5OWQ4MjBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzE1NTI2MTQsIC03Ni40NTAyNTI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MjNiY2I4NGJlY2I0NmY0OTlkNjk5MjJlYmNkN2I2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZDUzYzFmMmRlNmU0OWM1ODcwYmY5Y2NlYzY4YWI2MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZWQ1M2MxZjJkZTZlNDljNTg3MGJmOWNjZWM2OGFiNjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBTdGVwaGVuIExpdmluZyBGYWl0aCBTL0s8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyM2JjYjg0YmVjYjQ2ZjQ5OWQ2OTkyMmViY2Q3YjZhLnNldENvbnRlbnQoaHRtbF9lZDUzYzFmMmRlNmU0OWM1ODcwYmY5Y2NlYzY4YWI2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZWIwNTEzNjc4NGQ0OTA1OWM1ODM0MTkzOTlkODIwYy5iaW5kUG9wdXAocG9wdXBfODIzYmNiODRiZWNiNDZmNDk5ZDY5OTIyZWJjZDdiNmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmZjYxZWNhYzNiNjRmMGFiOGY5OGE4NGQ4ZjlmMzhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTMwMzExNTMsIC03Ni45OTM4NjkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhMWYxMjk1MTMzMzRjMDg5MzMxYTA0MzBiNWE5OTg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxYjRhZmE2N2I4ODQxOGE5MzZkNDNkMGU5MGMyZjM4ID0gJChgPGRpdiBpZD0iaHRtbF84MWI0YWZhNjdiODg0MThhOTM2ZDQzZDBlOTBjMmYzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2Fycm9sbCBDb21tdW5pdHkgQ29sbGVnZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGExZjEyOTUxMzMzNGMwODkzMzFhMDQzMGI1YTk5ODkuc2V0Q29udGVudChodG1sXzgxYjRhZmE2N2I4ODQxOGE5MzZkNDNkMGU5MGMyZjM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NmZjYxZWNhYzNiNjRmMGFiOGY5OGE4NGQ4ZjlmMzhkLmJpbmRQb3B1cChwb3B1cF9kYTFmMTI5NTEzMzM0YzA4OTMzMWEwNDMwYjVhOTk4OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDZkMDgyMzUwZjUxNDdiNTk4ZjBlZTgxZDViNThhNjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zOTU0ODE1MSwgLTc1LjYwNDA4MDI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2MDA1NzA1NzdjMDQzMDY5ZjUzNmZhYTQyZmE1MTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1YmYzOTNmNjZlNjRmNjc5ZjNjZjQ2M2RmMmM4NjcwID0gJChgPGRpdiBpZD0iaHRtbF82NWJmMzkzZjY2ZTY0ZjY3OWYzY2Y0NjNkZjJjODY3MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3IEhvcGUgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2MDA1NzA1NzdjMDQzMDY5ZjUzNmZhYTQyZmE1MTcyLnNldENvbnRlbnQoaHRtbF82NWJmMzkzZjY2ZTY0ZjY3OWYzY2Y0NjNkZjJjODY3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNmQwODIzNTBmNTE0N2I1OThmMGVlODFkNWI1OGE2NC5iaW5kUG9wdXAocG9wdXBfYzYwMDU3MDU3N2MwNDMwNjlmNTM2ZmFhNDJmYTUxNzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg3MWY0NDg3NmZmMDRjMTBiZDFhYTMyY2VlNjQzYTM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzExNzc1NTUsIC03Ni43MDM3NzUyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lN2YxMzgyY2VmMDM0MjE5OWRhOTI0ZTI5OWU3ZWI3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNTgxZTQxZGY3NDE0NmZjYWQyMjA2MzliMmMwNmZiYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjU4MWU0MWRmNzQxNDZmY2FkMjIwNjM5YjJjMDZmYmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRpY2tleSBIaWxsIEVsZW1lbnRhcnkgTWlkZGxlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lN2YxMzgyY2VmMDM0MjE5OWRhOTI0ZTI5OWU3ZWI3Yi5zZXRDb250ZW50KGh0bWxfMjU4MWU0MWRmNzQxNDZmY2FkMjIwNjM5YjJjMDZmYmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODcxZjQ0ODc2ZmYwNGMxMGJkMWFhMzJjZWU2NDNhMzkuYmluZFBvcHVwKHBvcHVwX2U3ZjEzODJjZWYwMzQyMTk5ZGE5MjRlMjk5ZTdlYjdiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMmQwZWViNmNiZmI0Y2QzYjJjMjg2ZDY4NjJlYjQyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM3OTAzNDM5OTk5OTk5NSwgLTc2LjcyNzU0MzgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyNDIwYjZiYzM5YjQzMTM4M2QyNTg3Yjc3M2RjYjU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0Mjk5NjMyYjdiOTRhOTRiZGM5MzI1OTQxOTYyNTFhID0gJChgPGRpdiBpZD0iaHRtbF85NDI5OTYzMmI3Yjk0YTk0YmRjOTMyNTk0MTk2MjUxYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIE1hcmsncyBvbi10aGUtSGlsbCBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjI0MjBiNmJjMzliNDMxMzgzZDI1ODdiNzczZGNiNTUuc2V0Q29udGVudChodG1sXzk0Mjk5NjMyYjdiOTRhOTRiZGM5MzI1OTQxOTYyNTFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IyZDBlZWI2Y2JmYjRjZDNiMmMyODZkNjg2MmViNDI2LmJpbmRQb3B1cChwb3B1cF9mMjQyMGI2YmMzOWI0MzEzODNkMjU4N2I3NzNkY2I1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2VjYjYxODRiZTZhNDU2Mzg0YzE3M2ZiNTVlZmFkMDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42NTE5MDk1NCwgLTc3LjgwODI3MTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyZDhiZTg2OTQ3ZjRjZjNiOTU1YTRiNmQxODM1ZWUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1ZGMzZDg4ZjMzYjQ1YmJhM2Y1ZGVjNDkzMGNlOTcyID0gJChgPGRpdiBpZD0iaHRtbF8wNWRjM2Q4OGYzM2I0NWJiYTNmNWRlYzQ5MzBjZTk3MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RW1tYW51ZWwgQmFwdGlzdCBUZW1wbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyZDhiZTg2OTQ3ZjRjZjNiOTU1YTRiNmQxODM1ZWUzLnNldENvbnRlbnQoaHRtbF8wNWRjM2Q4OGYzM2I0NWJiYTNmNWRlYzQ5MzBjZTk3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZWNiNjE4NGJlNmE0NTYzODRjMTczZmI1NWVmYWQwOC5iaW5kUG9wdXAocG9wdXBfOTJkOGJlODY5NDdmNGNmM2I5NTVhNGI2ZDE4MzVlZTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyYWQ0MzMxNWRkMzRhMzNhYTc1MDZjZTQ1OTg3MWNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA1ODc5ODMsIC03Ni43MDkzODA0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmI3ODc2OGNjZTc0OTU1OWFhNjlmMTk3ZDZmNGJhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80N2JkODFiNGJlZjg0ZTQwYmYyMDY3ZTgyMDk3MDZhZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDdiZDgxYjRiZWY4NGU0MGJmMjA2N2U4MjA5NzA2YWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoYW5naW5nIFR1cm4gRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiYjc4NzY4Y2NlNzQ5NTU5YWE2OWYxOTdkNmY0YmExLnNldENvbnRlbnQoaHRtbF80N2JkODFiNGJlZjg0ZTQwYmYyMDY3ZTgyMDk3MDZhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MmFkNDMzMTVkZDM0YTMzYWE3NTA2Y2U0NTk4NzFjZS5iaW5kUG9wdXAocG9wdXBfNmJiNzg3NjhjY2U3NDk1NTlhYTY5ZjE5N2Q2ZjRiYTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0YTMyYzI4NzhkNTQwMmRiYmQ0MDZhZTgxNmZkNzY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzMzNjI2ODQsIC03Ni43MDI1NDc1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYWY2NGM2YjczNzU0MmY4OWFlZWQ4YTM3MjdlNDU2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZGEzY2VhNTdjNzA0YzBkYTVkMzZhMTkyOWY2ZDcyOCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2RhM2NlYTU3YzcwNGMwZGE1ZDM2YTE5MjlmNmQ3MjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbmNvcmQgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhZjY0YzZiNzM3NTQyZjg5YWVlZDhhMzcyN2U0NTZiLnNldENvbnRlbnQoaHRtbF83ZGEzY2VhNTdjNzA0YzBkYTVkMzZhMTkyOWY2ZDcyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNGEzMmMyODc4ZDU0MDJkYmJkNDA2YWU4MTZmZDc2NS5iaW5kUG9wdXAocG9wdXBfYmFmNjRjNmI3Mzc1NDJmODlhZWVkOGEzNzI3ZTQ1NmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwYmMyYTFhOGFmZDRmN2NhNzQzNDNmMjk4YzhiZjM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzQ4NTczNDYsIC03Ny4wOTYyNDE2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZGNjYjQxYzY0MWY0MWRkOWIzMjliZjcxNDNlNTk5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjUxMTk4ZWM2ODM0ZDEzYTYyMDNiNDM1MjE1MGY2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTY1MTE5OGVjNjgzNGQxM2E2MjAzYjQzNTIxNTBmNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vdW50IEFpcnkgQmlibGUgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZGNjYjQxYzY0MWY0MWRkOWIzMjliZjcxNDNlNTk5ZC5zZXRDb250ZW50KGh0bWxfMTY1MTE5OGVjNjgzNGQxM2E2MjAzYjQzNTIxNTBmNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzBiYzJhMWE4YWZkNGY3Y2E3NDM0M2YyOThjOGJmMzYuYmluZFBvcHVwKHBvcHVwX2FkY2NiNDFjNjQxZjQxZGQ5YjMyOWJmNzE0M2U1OTlkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMzJhZDFlYWJmOTg0NWVlODMzMjI2MmMzMDQ3OGJjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAxMjkwODMsIC03Ni42ODEyNjIzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MzM3Mzc2NjU1MWM0ZTE4ODlkZTE4YWU1ODk5OTViZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNmI0YjE0YTliYjk0M2EzYjM4ZDM2NmE4OGJlYzgwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDZiNGIxNGE5YmI5NDNhM2IzOGQzNjZhODhiZWM4MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbW11bml0eSBVTUMgQmFja3BhY2s8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzMzczNzY2NTUxYzRlMTg4OWRlMThhZTU4OTk5NWJkLnNldENvbnRlbnQoaHRtbF9kNmI0YjE0YTliYjk0M2EzYjM4ZDM2NmE4OGJlYzgwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMzJhZDFlYWJmOTg0NWVlODMzMjI2MmMzMDQ3OGJjMC5iaW5kUG9wdXAocG9wdXBfODMzNzM3NjY1NTFjNGUxODg5ZGUxOGFlNTg5OTk1YmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0OTRmYzZlMjIzNTQyODc4NmQ1YmM3NWI2MTFhNGU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjU0Mzk0MDYsIC03Ny41NzI1NDU3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYzE5NTAyOTUwYzY0MmRmODAwOGFkYmUwZjAwMDlkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTQ3NDQzZjkxNmQ0NWY4OTQzY2IyNDQzYmU2MTUzYyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzE0NzQ0M2Y5MTZkNDVmODk0M2NiMjQ0M2JlNjE1M2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRhYml0aGEncyBUYWJsZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmMxOTUwMjk1MGM2NDJkZjgwMDhhZGJlMGYwMDA5ZGEuc2V0Q29udGVudChodG1sX2MxNDc0NDNmOTE2ZDQ1Zjg5NDNjYjI0NDNiZTYxNTNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0OTRmYzZlMjIzNTQyODc4NmQ1YmM3NWI2MTFhNGU2LmJpbmRQb3B1cChwb3B1cF8yYzE5NTAyOTUwYzY0MmRmODAwOGFkYmUwZjAwMDlkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWQ1NmQ1NjYwMTY4NDAyNGIwYWEwMGUwYTEwZmI1NDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNzI0MDk0OTk5OTk5OTYsIC03Ni43MDA4MTI4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOGIzZjcyYTdmYjU0YmM0OTQ2MGJkNjcwMjczZTI4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDgyMmUxMzhmMmY0ZjkxOGQ3M2ZmOTc4ZThlYTFjNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzQ4MjJlMTM4ZjJmNGY5MThkNzNmZjk3OGU4ZWExYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFtZXJpY2FuIEZyaWVuZHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4YjNmNzJhN2ZiNTRiYzQ5NDYwYmQ2NzAyNzNlMjg2LnNldENvbnRlbnQoaHRtbF8zNDgyMmUxMzhmMmY0ZjkxOGQ3M2ZmOTc4ZThlYTFjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZDU2ZDU2NjAxNjg0MDI0YjBhYTAwZTBhMTBmYjU0Ny5iaW5kUG9wdXAocG9wdXBfYzhiM2Y3MmE3ZmI1NGJjNDk0NjBiZDY3MDI3M2UyODYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEyMTkwNDNiNDY0MTQ0OWM5MTYxMmVlZjJlYjc5YTBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzQ2MDY2OTUsIC03Ni42NTk1MDYwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODA3NWEwMzI0ZjM0OWNiOWE3OTkzZWFhZmI2YjdhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNmI2MTA0YWIzOTk0YjgyYWJkMDkwMmJmZjk4YTk3ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjZiNjEwNGFiMzk5NGI4MmFiZDA5MDJiZmY5OGE5N2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktpcHAgSGFybW9ueSBBY2FkZW15PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iODA3NWEwMzI0ZjM0OWNiOWE3OTkzZWFhZmI2YjdhOC5zZXRDb250ZW50KGh0bWxfYjZiNjEwNGFiMzk5NGI4MmFiZDA5MDJiZmY5OGE5N2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTIxOTA0M2I0NjQxNDQ5YzkxNjEyZWVmMmViNzlhMGIuYmluZFBvcHVwKHBvcHVwX2I4MDc1YTAzMjRmMzQ5Y2I5YTc5OTNlYWFmYjZiN2E4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzI2Nzc3YjY4YTk0MjEyYTQ2N2I3YTM3NzZiY2Q4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM0NjYwOTQxLCAtNzYuNjU4MTUwMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjIxMjNlNTYwMjNkNDg1Yzg0MDRjNzM4NWFiMjg1ZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjVmODljYmU4OTExNGJiYmI3ZDkzNTFjYjVhNTk4N2UgPSAkKGA8ZGl2IGlkPSJodG1sXzI1Zjg5Y2JlODkxMTRiYmJiN2Q5MzUxY2I1YTU5ODdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SdXNjb21iZSBHYXJkZW5zPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjEyM2U1NjAyM2Q0ODVjODQwNGM3Mzg1YWIyODVkYy5zZXRDb250ZW50KGh0bWxfMjVmODljYmU4OTExNGJiYmI3ZDkzNTFjYjVhNTk4N2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmMyNjc3N2I2OGE5NDIxMmE0NjdiN2EzNzc2YmNkOGIuYmluZFBvcHVwKHBvcHVwX2IyMTIzZTU2MDIzZDQ4NWM4NDA0YzczODVhYjI4NWRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NmY3MTRmNTFhZTk0ZWRlYmQyM2JhODViMmEzZDU3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzMDM4MzIxLCAtNzYuNjM3NTE2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFkOWM3Yjc3NTZmNDEzNmE1OGFkYzQ1Y2RiZTI2YWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTA1MDU3YzYxZTdiNDAwYThkMjEzZjU0MDZjOTAwMjUgPSAkKGA8ZGl2IGlkPSJodG1sX2UwNTA1N2M2MWU3YjQwMGE4ZDIxM2Y1NDA2YzkwMDI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BY2FkZW15IGZvciBDb2xsZWdlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YWQ5YzdiNzc1NmY0MTM2YTU4YWRjNDVjZGJlMjZhZC5zZXRDb250ZW50KGh0bWxfZTA1MDU3YzYxZTdiNDAwYThkMjEzZjU0MDZjOTAwMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzZmNzE0ZjUxYWU5NGVkZWJkMjNiYTg1YjJhM2Q1N2UuYmluZFBvcHVwKHBvcHVwXzhhZDljN2I3NzU2ZjQxMzZhNThhZGM0NWNkYmUyNmFkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMTk3ZjYwZDI3YWE0NTYzOWMxYWI2M2U0NDhjNzc1NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxOTk1MzgxLCAtNzYuNjIxNDY3NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTZiM2NkMTM3NDFhNDA2YmEwYmNjYWEwM2NkMTg3NGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDg1NGNlNDkxMjUwNDJmYmIxMjNiNDM2NDQ3YzgxMzAgPSAkKGA8ZGl2IGlkPSJodG1sX2Q4NTRjZTQ5MTI1MDQyZmJiMTIzYjQzNjQ0N2M4MTMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaHVyY2ggb2YgdGhlIEd1YXJkaWFuIEFuZ2VsPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NmIzY2QxMzc0MWE0MDZiYTBiY2NhYTAzY2QxODc0ZS5zZXRDb250ZW50KGh0bWxfZDg1NGNlNDkxMjUwNDJmYmIxMjNiNDM2NDQ3YzgxMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjE5N2Y2MGQyN2FhNDU2MzljMWFiNjNlNDQ4Yzc3NTQuYmluZFBvcHVwKHBvcHVwXzk2YjNjZDEzNzQxYTQwNmJhMGJjY2FhMDNjZDE4NzRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMTBmNjFmODhhMTE0ZWI1OGEzODZmODY4OGMyYTZiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM2MDE3OTE3LCAtNzcuNjc2MTAwMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjRlYmRmYWMwMzdkNDczNWI0N2M3ZDBlNjNiYWNiZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDE5YmVkNjc1YWI1NGJiMDhmYTcxZDA0YjMyNGQ5OTIgPSAkKGA8ZGl2IGlkPSJodG1sX2QxOWJlZDY3NWFiNTRiYjA4ZmE3MWQwNGIzMjRkOTkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QbGVhc2FudCBWYWxsZXkgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjRlYmRmYWMwMzdkNDczNWI0N2M3ZDBlNjNiYWNiZjEuc2V0Q29udGVudChodG1sX2QxOWJlZDY3NWFiNTRiYjA4ZmE3MWQwNGIzMjRkOTkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxMGY2MWY4OGExMTRlYjU4YTM4NmY4Njg4YzJhNmI3LmJpbmRQb3B1cChwb3B1cF82NGViZGZhYzAzN2Q0NzM1YjQ3YzdkMGU2M2JhY2JmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2E5YTUxMTYzOWE3NDdkNTgyOTFjY2JjNzQzMmNiNDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMzcyMTI0NSwgLTc2LjYyOTAzNDM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxZDU1OTk4NTdiNjQyOTY4YjM1MDU2OGI1NjdlNjY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3MTRiZWRkMTU5NDRkOTJhMjRhNWI2YWM4MjJhMjI3ID0gJChgPGRpdiBpZD0iaHRtbF9hNzE0YmVkZDE1OTQ0ZDkyYTI0YTViNmFjODIyYTIyNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWN0aW9uIGluIE1hdHVyaXR5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMWQ1NTk5ODU3YjY0Mjk2OGIzNTA1NjhiNTY3ZTY2Ni5zZXRDb250ZW50KGh0bWxfYTcxNGJlZGQxNTk0NGQ5MmEyNGE1YjZhYzgyMmEyMjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2E5YTUxMTYzOWE3NDdkNTgyOTFjY2JjNzQzMmNiNDEuYmluZFBvcHVwKHBvcHVwXzAxZDU1OTk4NTdiNjQyOTY4YjM1MDU2OGI1NjdlNjY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTVmZDRiZjhmZWY0OGI0OWE4MjdhZjQwZWUwYjZhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk2ODc5ODMzLCAtNzYuNTE4OTE3NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTVmMTliNjM3NTI0NGZhOWIwMjg3NjExMWUxMmQ0ZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI3ZGJmMzU1YmQ2NGFmNjk3N2YyZGNmMjk4ZjU4NDAgPSAkKGA8ZGl2IGlkPSJodG1sXzYyN2RiZjM1NWJkNjRhZjY5NzdmMmRjZjI5OGY1ODQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IZXJpdGFnZSBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTVmMTliNjM3NTI0NGZhOWIwMjg3NjExMWUxMmQ0ZTguc2V0Q29udGVudChodG1sXzYyN2RiZjM1NWJkNjRhZjY5NzdmMmRjZjI5OGY1ODQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlNWZkNGJmOGZlZjQ4YjQ5YTgyN2FmNDBlZTBiNmE5LmJpbmRQb3B1cChwb3B1cF8xNWYxOWI2Mzc1MjQ0ZmE5YjAyODc2MTExZTEyZDRlOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODEyN2E4NDQ3MGFkNGUzMzlmZWQxZjE2ODQzMmIzZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40NTU2NzgwOSwgLTc3Ljc1ODA0NTQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmMTExZGU3NDNmNDRjNjM4MDc3NmYwYTY1ZDgwYmM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1MDcwODdjZWJkYjRiZDhhZmYxYWU5MTI0OGIyYTNhID0gJChgPGRpdiBpZD0iaHRtbF82NTA3MDg3Y2ViZGI0YmQ4YWZmMWFlOTEyNDhiMmEzYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2hhcnBzYnVyZyBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZjExMWRlNzQzZjQ0YzYzODA3NzZmMGE2NWQ4MGJjOC5zZXRDb250ZW50KGh0bWxfNjUwNzA4N2NlYmRiNGJkOGFmZjFhZTkxMjQ4YjJhM2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODEyN2E4NDQ3MGFkNGUzMzlmZWQxZjE2ODQzMmIzZDEuYmluZFBvcHVwKHBvcHVwXzNmMTExZGU3NDNmNDRjNjM4MDc3NmYwYTY1ZDgwYmM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YzRlYzQwMDA3ZDk0ZmQ0YWEyOTBhMWRmYTczYTIwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY5OTA5MjQ4LCAtNzcuNzQ2OTQwOTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjU2ZDkwYzI2NDExNGM4M2I0YjVlNTRlZmRkNWRjNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDM4MTI0YjI5NzIyNGM0Yjk4YzQzNzY0ZjhlNjM2ZmUgPSAkKGA8ZGl2IGlkPSJodG1sXzQzODEyNGIyOTcyMjRjNGI5OGM0Mzc2NGY4ZTYzNmZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXVnYW5zdmlsbGUgQmlibGUgQnJldGhyZW4gQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTZkOTBjMjY0MTE0YzgzYjRiNWU1NGVmZGQ1ZGM2My5zZXRDb250ZW50KGh0bWxfNDM4MTI0YjI5NzIyNGM0Yjk4YzQzNzY0ZjhlNjM2ZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmM0ZWM0MDAwN2Q5NGZkNGFhMjkwYTFkZmE3M2EyMDEuYmluZFBvcHVwKHBvcHVwXzY1NmQ5MGMyNjQxMTRjODNiNGI1ZTU0ZWZkZDVkYzYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOTgyYTQ5MTE3ZTA0NGQxODI0Y2VkMzY3M2UyZjQ3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM0MjcwODc5LCAtNzYuNjA3ODc4MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjZkMzQ5ZjE5MTFlNDJiZGIyMWY5Y2JkY2U4OTliNGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTlmMmQ2OTlkNWJmNGJlYmE4Y2YyZDcwNTNmODMzMTEgPSAkKGA8ZGl2IGlkPSJodG1sX2U5ZjJkNjk5ZDViZjRiZWJhOGNmMmQ3MDUzZjgzMzExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaHVyY2ggb2YgdGhlIFJlZGVlbWVkIG9mIExvcmQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2ZDM0OWYxOTExZTQyYmRiMjFmOWNiZGNlODk5YjRiLnNldENvbnRlbnQoaHRtbF9lOWYyZDY5OWQ1YmY0YmViYThjZjJkNzA1M2Y4MzMxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kOTgyYTQ5MTE3ZTA0NGQxODI0Y2VkMzY3M2UyZjQ3My5iaW5kUG9wdXAocG9wdXBfMjZkMzQ5ZjE5MTFlNDJiZGIyMWY5Y2JkY2U4OTliNGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEzYzUyNjljMDJiMjRjZGI4ZWE5NDkwOGVkOTA0OWVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjkzOTQzNiwgLTc2LjQxOTY0Mzk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwMmJkODRiZmU3ZjQ4YTM4MmQ2YWM2YjIzZTE3ZjVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmMzY5MGNjNDhiNTQzYzM5ZjU0OWRiZTQyNWEyYTAzID0gJChgPGRpdiBpZD0iaHRtbF9hZjM2OTBjYzQ4YjU0M2MzOWY1NDlkYmU0MjVhMmEwMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hlc2FwZWFrZSBIaWdoIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzAyYmQ4NGJmZTdmNDhhMzgyZDZhYzZiMjNlMTdmNWUuc2V0Q29udGVudChodG1sX2FmMzY5MGNjNDhiNTQzYzM5ZjU0OWRiZTQyNWEyYTAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEzYzUyNjljMDJiMjRjZGI4ZWE5NDkwOGVkOTA0OWVhLmJpbmRQb3B1cChwb3B1cF9jMDJiZDg0YmZlN2Y0OGEzODJkNmFjNmIyM2UxN2Y1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDhhMDM4Y2Q0NDhiNDY4Mzk3NWJjODBhZWJmOTcwODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNDQxMDUyNiwgLTc2LjYwOTYxODg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkODllYTY5YTU3NjQ2ZGZhZjFhMTMzYzFiMzFhZTYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyOGE1ODg5YzM3MjQzYzU5YWMzNjQxMzk4ODkzODhjID0gJChgPGRpdiBpZD0iaHRtbF8yMjhhNTg4OWMzNzI0M2M1OWFjMzY0MTM5ODg5Mzg4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3VpbGZvcmQgRWxlbS8gTWlkZGxlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDg5ZWE2OWE1NzY0NmRmYWYxYTEzM2MxYjMxYWU2Mi5zZXRDb250ZW50KGh0bWxfMjI4YTU4ODljMzcyNDNjNTlhYzM2NDEzOTg4OTM4OGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDhhMDM4Y2Q0NDhiNDY4Mzk3NWJjODBhZWJmOTcwODguYmluZFBvcHVwKHBvcHVwXzBkODllYTY5YTU3NjQ2ZGZhZjFhMTMzYzFiMzFhZTYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYmNmMWU0ZjQ5ZGM0Y2E1Yjc2MGU0ZjAyY2M0Nzc2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY5MDUxODI0LCAtNzcuNzM2ODIwNzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTY0M2U4MDdjNmY5NDBiMjlmOWFlZDg1OWMwOGMxMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzAxMzIyNGI3MWQwNDczZjg3ZGM0MDVjNWQzOTQ0ZTIgPSAkKGA8ZGl2IGlkPSJodG1sXzcwMTMyMjRiNzFkMDQ3M2Y4N2RjNDA1YzVkMzk0NGUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Xb3JkIE9mIExpZmUgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2NDNlODA3YzZmOTQwYjI5ZjlhZWQ4NTljMDhjMTMzLnNldENvbnRlbnQoaHRtbF83MDEzMjI0YjcxZDA0NzNmODdkYzQwNWM1ZDM5NDRlMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYmNmMWU0ZjQ5ZGM0Y2E1Yjc2MGU0ZjAyY2M0Nzc2Zi5iaW5kUG9wdXAocG9wdXBfNTY0M2U4MDdjNmY5NDBiMjlmOWFlZDg1OWMwOGMxMzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNmMzA2OGE4ZjdlYzRlYjU5ZjJlZDk2NmZkZTI2YjE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTY5NDYzMzMsIC03Ni41MzAyNTk0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mODVkMjg4ZmE2MDc0YWExOTE3ZmEwMGM0M2E1NDFhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MzBlNDllNjQ5ODE0YmZjOWU1ZWU3YzliMzMyZDVjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfODMwZTQ5ZTY0OTgxNGJmYzllNWVlN2M5YjMzMmQ1YzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJ5V2F0ZXIgQm95cyAmIEdpcmxzIENsdWI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y4NWQyODhmYTYwNzRhYTE5MTdmYTAwYzQzYTU0MWFjLnNldENvbnRlbnQoaHRtbF84MzBlNDllNjQ5ODE0YmZjOWU1ZWU3YzliMzMyZDVjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZjMwNjhhOGY3ZWM0ZWI1OWYyZWQ5NjZmZGUyNmIxNC5iaW5kUG9wdXAocG9wdXBfZjg1ZDI4OGZhNjA3NGFhMTkxN2ZhMDBjNDNhNTQxYWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlM2ExNGJiYWEwZDRjNDBhODI0OGUxYzQyZjZjNjcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzg2MTM0MTYsIC03NS41NzQ3MDAxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zM2NkZWNkM2I2Y2E0ZGM0OTU1NWQ1NWQzYjM2OTNlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTZjNGUxMzdmY2Y0NjI3YjUzN2ZiMGZiNjQ1NTZlMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNmE2YzRlMTM3ZmNmNDYyN2I1MzdmYjBmYjY0NTU2ZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNhbGlzYnVyeSBPdXRyZWFjaCBTZXJ2aWNlczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzNjZGVjZDNiNmNhNGRjNDk1NTVkNTVkM2IzNjkzZTYuc2V0Q29udGVudChodG1sXzZhNmM0ZTEzN2ZjZjQ2MjdiNTM3ZmIwZmI2NDU1NmUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NlM2ExNGJiYWEwZDRjNDBhODI0OGUxYzQyZjZjNjcxLmJpbmRQb3B1cChwb3B1cF8zM2NkZWNkM2I2Y2E0ZGM0OTU1NWQ1NWQzYjM2OTNlNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWYwNWM2MTFkM2EyNDQwMjg2M2UwZDNlMTc0YmRmMWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNjY4MzY4MSwgLTc3LjY3MTE5MDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2NjVjMjJiZWRkMjQ5YzM5MDEzNWRkY2I1ODQ1ZGUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwMzBmZDZiYmE5MDQ1NGJhZTVkYzU3MWU2NDliYzE0ID0gJChgPGRpdiBpZD0iaHRtbF9hMDMwZmQ2YmJhOTA0NTRiYWU1ZGM1NzFlNjQ5YmMxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvd25zdmlsbGUgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjY1YzIyYmVkZDI0OWMzOTAxMzVkZGNiNTg0NWRlMS5zZXRDb250ZW50KGh0bWxfYTAzMGZkNmJiYTkwNDU0YmFlNWRjNTcxZTY0OWJjMTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWYwNWM2MTFkM2EyNDQwMjg2M2UwZDNlMTc0YmRmMWYuYmluZFBvcHVwKHBvcHVwXzM2NjVjMjJiZWRkMjQ5YzM5MDEzNWRkY2I1ODQ1ZGUxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYzg5YzlhMDA2NzI0ZGY0ODY2ZGY2ZGIyNzYzODRlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM1NTc0NTAyLCAtNzYuNjA5ODU0OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjk2OWYyZWMzMWI0NDAzZmIxNDMyZjA3NDAzYTI1OGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzRjYTE2YzY2MTRkNDE1NDgzMWM4MTNiOTM5MWU5N2IgPSAkKGA8ZGl2IGlkPSJodG1sXzc0Y2ExNmM2NjE0ZDQxNTQ4MzFjODEzYjkzOTFlOTdiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaGVwaGVyZCdzIEhlYXJ0IE1CQzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjk2OWYyZWMzMWI0NDAzZmIxNDMyZjA3NDAzYTI1OGIuc2V0Q29udGVudChodG1sXzc0Y2ExNmM2NjE0ZDQxNTQ4MzFjODEzYjkzOTFlOTdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJjODljOWEwMDY3MjRkZjQ4NjZkZjZkYjI3NjM4NGViLmJpbmRQb3B1cChwb3B1cF82OTY5ZjJlYzMxYjQ0MDNmYjE0MzJmMDc0MDNhMjU4YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDkwNTQ5MDcwNmY1NGNkMzkyZWQ2ZTIxNTQwZDY3YWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMjQyMzU0OCwgLTc2Ljc0MDgwMzc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U2ZWI3ODk0YjhkODQyOGE4YTQ2ZjljNGEzOTFkZWQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5ZGM3NjA4NjNmYTQ2YTY5YzcxYTI2NDhmYWI4OTEyID0gJChgPGRpdiBpZD0iaHRtbF82OWRjNzYwODYzZmE0NmE2OWM3MWEyNjQ4ZmFiODkxMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFjZWRvbmlhIEhlbHBpbmcgSGFuZDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTZlYjc4OTRiOGQ4NDI4YThhNDZmOWM0YTM5MWRlZDUuc2V0Q29udGVudChodG1sXzY5ZGM3NjA4NjNmYTQ2YTY5YzcxYTI2NDhmYWI4OTEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ5MDU0OTA3MDZmNTRjZDM5MmVkNmUyMTU0MGQ2N2FhLmJpbmRQb3B1cChwb3B1cF9lNmViNzg5NGI4ZDg0MjhhOGE0NmY5YzRhMzkxZGVkNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjMzNjVkNmM1OWUwNGYzYmI4ZDdlNDc2MzExYjM3ZjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNTcyNzksIC03Ni42MDk5NjA4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDk4ZTA1OGRmNzY0YTFmYjkxM2VjOTMwYzU3ZGQ5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWM1MTBmZjU3M2E0ZDM5YWE3YWE1NTIzMTg0Njc1MiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGFjNTEwZmY1NzNhNGQzOWFhN2FhNTUyMzE4NDY3NTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdFRENPIENBUkVTPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZDk4ZTA1OGRmNzY0YTFmYjkxM2VjOTMwYzU3ZGQ5My5zZXRDb250ZW50KGh0bWxfNGFjNTEwZmY1NzNhNGQzOWFhN2FhNTUyMzE4NDY3NTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjMzNjVkNmM1OWUwNGYzYmI4ZDdlNDc2MzExYjM3ZjYuYmluZFBvcHVwKHBvcHVwX2RkOThlMDU4ZGY3NjRhMWZiOTEzZWM5MzBjNTdkZDkzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjM1NzMzN2QxNDU0OTJhOTY5YjUzZjM1OWRiNDA1ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM0MjY4MDUsIC03Ni42MDM0OTE4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGU5NGIwOWI4OGU0MjA3OWUyZmMyYzZiZGIyMDFkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NThiZjM2ODQ0ODU0ODMzODAwZjRmZjVmMjU2YmMwNyA9ICQoYDxkaXYgaWQ9Imh0bWxfODU4YmYzNjg0NDg1NDgzMzgwMGY0ZmY1ZjI1NmJjMDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhbHRlciBQLiBDYXJ0ZXIgRWxlbWVudGFyeS9NaWRkbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y4ZTk0YjA5Yjg4ZTQyMDc5ZTJmYzJjNmJkYjIwMWQzLnNldENvbnRlbnQoaHRtbF84NThiZjM2ODQ0ODU0ODMzODAwZjRmZjVmMjU2YmMwNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YjM1NzMzN2QxNDU0OTJhOTY5YjUzZjM1OWRiNDA1Zi5iaW5kUG9wdXAocG9wdXBfZjhlOTRiMDliODhlNDIwNzllMmZjMmM2YmRiMjAxZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MyNzE3YjdkMTJjYTRkMzlhZGMxMzFkY2Y3YzE1ODI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjQzNDU2MjcsIC03Ny43MjQ2MDQ0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMTEwMWU3ZjVlMWY0MDEyYjI2YWFhMTc0YzM5NjJiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81OTQ1NjUwYjNhYTY0Njg2YjM3YTY4YzUzMjY5YjMwZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTk0NTY1MGIzYWE2NDY4NmIzN2E2OGM1MzI2OWIzMGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhZ2Vyc3Rvd24gUHJlc2J5dGVyaWFuIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzExMDFlN2Y1ZTFmNDAxMmIyNmFhYTE3NGMzOTYyYmQuc2V0Q29udGVudChodG1sXzU5NDU2NTBiM2FhNjQ2ODZiMzdhNjhjNTMyNjliMzBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MyNzE3YjdkMTJjYTRkMzlhZGMxMzFkY2Y3YzE1ODI3LmJpbmRQb3B1cChwb3B1cF9jMTEwMWU3ZjVlMWY0MDEyYjI2YWFhMTc0YzM5NjJiZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzMyNzUzMWY1Yjg3NGI4Mjk3YzVkODhjZDdlOTZjZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNjcxMDI5OCwgLTc2LjcyOTg1NjA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E2NjlmYjI2ZmU4NjRkZjVhNmIwNDk4NTQ4MDljOTFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEwMTc1N2I4NDYwZTRjNTc4NzBhZmI2OTFiYzMyZDE4ID0gJChgPGRpdiBpZD0iaHRtbF8xMDE3NTdiODQ2MGU0YzU3ODcwYWZiNjkxYmMzMmQxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SVNLQ09OIEVtZXJnZW5jeSBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTY2OWZiMjZmZTg2NGRmNWE2YjA0OTg1NDgwOWM5MWMuc2V0Q29udGVudChodG1sXzEwMTc1N2I4NDYwZTRjNTc4NzBhZmI2OTFiYzMyZDE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzczMjc1MzFmNWI4NzRiODI5N2M1ZDg4Y2Q3ZTk2Y2RiLmJpbmRQb3B1cChwb3B1cF9hNjY5ZmIyNmZlODY0ZGY1YTZiMDQ5ODU0ODA5YzkxYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmIwMDViZWE1MjJlNDNmZTkwYzJhMjIwMGE4MTE4OTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDQ5Mjc3OSwgLTc2LjU4ODE5ODE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2MmFiNTgzYTFjOTRmZjc5YmMyNmQ1ZDgzZTU3MjEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5YTM2MGVhNDU1ZTQxYTU4ZjYyZjBhMzE0MzE3M2U5ID0gJChgPGRpdiBpZD0iaHRtbF9iOWEzNjBlYTQ1NWU0MWE1OGY2MmYwYTMxNDMxNzNlOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWF0dGllIEIuIFV6emxlIENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjYyYWI1ODNhMWM5NGZmNzliYzI2ZDVkODNlNTcyMTIuc2V0Q29udGVudChodG1sX2I5YTM2MGVhNDU1ZTQxYTU4ZjYyZjBhMzE0MzE3M2U5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZiMDA1YmVhNTIyZTQzZmU5MGMyYTIyMDBhODExODkwLmJpbmRQb3B1cChwb3B1cF9iNjJhYjU4M2ExYzk0ZmY3OWJjMjZkNWQ4M2U1NzIxMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDJiYmQ3ZTE4MDJlNDg1Y2FmYzQ1ZDI5NTgwNTU3MTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40MDc5NTg4OSwgLTc3LjQxNDE0NDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxMDE1Y2QzMGY4ZDQ1YzNhNGRkZDI4NTM5YzUzNTJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhZWY1ZThmNTEyYTRlZmQ4Y2MwMTdjODgxMjNhODE1ID0gJChgPGRpdiBpZD0iaHRtbF82YWVmNWU4ZjUxMmE0ZWZkOGNjMDE3Yzg4MTIzYTgxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGluY29sbiBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMTAxNWNkMzBmOGQ0NWMzYTRkZGQyODUzOWM1MzUyYi5zZXRDb250ZW50KGh0bWxfNmFlZjVlOGY1MTJhNGVmZDhjYzAxN2M4ODEyM2E4MTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDJiYmQ3ZTE4MDJlNDg1Y2FmYzQ1ZDI5NTgwNTU3MTkuYmluZFBvcHVwKHBvcHVwX2MxMDE1Y2QzMGY4ZDQ1YzNhNGRkZDI4NTM5YzUzNTJiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDE3MTNmNzg5M2E0NjVkODAxODM4MGE4NjNkNGJmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU0MzE1OTg5LCAtNzcuMTA4MTc3OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGM3NmU5OWJjNTFhNGIzZDlhMTAyYjFjZDYzZjBjYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzhmMDRmY2FlMjMyNDJiMzljMmFiMmE1MzYwZTE1MjggPSAkKGA8ZGl2IGlkPSJodG1sX2M4ZjA0ZmNhZTIzMjQyYjM5YzJhYjJhNTM2MGUxNTI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXcgV2luZHNvciBGb29kIEJhbms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjNzZlOTliYzUxYTRiM2Q5YTEwMmIxY2Q2M2YwY2IxLnNldENvbnRlbnQoaHRtbF9jOGYwNGZjYWUyMzI0MmIzOWMyYWIyYTUzNjBlMTUyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMDE3MTNmNzg5M2E0NjVkODAxODM4MGE4NjNkNGJmYS5iaW5kUG9wdXAocG9wdXBfOGM3NmU5OWJjNTFhNGIzZDlhMTAyYjFjZDYzZjBjYjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlNzlkMjhkMjA3OTQ4MGM4YTE4YWVjODdhOTdiZTgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA1MjEzOTQsIC03Ni41OTk2NDEyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZmZjMTQzMDI0OGI0MmQyODU3ZjY0MTAyMGU2ZGY3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTU1ZDQ3MTNlZWM0ZGM4YmQ3ZWZkMDVjYWE1MDJkMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmE1NWQ0NzEzZWVjNGRjOGJkN2VmZDA1Y2FhNTAyZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktub3ggUHJlc2J5dGVyaWFuIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWZmYzE0MzAyNDhiNDJkMjg1N2Y2NDEwMjBlNmRmN2Yuc2V0Q29udGVudChodG1sXzZhNTVkNDcxM2VlYzRkYzhiZDdlZmQwNWNhYTUwMmQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NlNzlkMjhkMjA3OTQ4MGM4YTE4YWVjODdhOTdiZTgyLmJpbmRQb3B1cChwb3B1cF81ZmZjMTQzMDI0OGI0MmQyODU3ZjY0MTAyMGU2ZGY3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDY2OTM1NGE0YzQ3NDlmMTkwZWUzNDQxMDExM2E2NmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC40MTk2MDUwOSwgLTc1LjY4ODMyMTE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5ZWIwM2YwMGM3ODRjZjE4M2M4NmE3ZmU2MmI5NzlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwMjFiMzZhNWQxNTQ1ZTY4MzdmYmI4NDg3MWE2Y2UyID0gJChgPGRpdiBpZD0iaHRtbF83MDIxYjM2YTVkMTU0NWU2ODM3ZmJiODQ4NzFhNmNlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RXBvY2ggRHJlYW0gQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOWViMDNmMDBjNzg0Y2YxODNjODZhN2ZlNjJiOTc5YS5zZXRDb250ZW50KGh0bWxfNzAyMWIzNmE1ZDE1NDVlNjgzN2ZiYjg0ODcxYTZjZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDY2OTM1NGE0YzQ3NDlmMTkwZWUzNDQxMDExM2E2NmIuYmluZFBvcHVwKHBvcHVwX2M5ZWIwM2YwMGM3ODRjZjE4M2M4NmE3ZmU2MmI5NzlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMWY1ZjA4NTI3Mzg0NmU0OGQwZmI5ZWEyODJjOTFiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjE0Mjc4NjA1LCAtNzYuNTk1OTE5NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmZhMWFlNTY3NjE3NDk4OThjMjIyNjg4OTBjZTg5OTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2IwOWJkYTdjZjU5NDYyYThkMDJhNzQ4ZmVlY2IzMTggPSAkKGA8ZGl2IGlkPSJodG1sX2NiMDliZGE3Y2Y1OTQ2MmE4ZDAyYTc0OGZlZWNiMzE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXJsZXkgR2xlbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmZhMWFlNTY3NjE3NDk4OThjMjIyNjg4OTBjZTg5OTkuc2V0Q29udGVudChodG1sX2NiMDliZGE3Y2Y1OTQ2MmE4ZDAyYTc0OGZlZWNiMzE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YxZjVmMDg1MjczODQ2ZTQ4ZDBmYjllYTI4MmM5MWIzLmJpbmRQb3B1cChwb3B1cF82ZmExYWU1Njc2MTc0OTg5OGMyMjI2ODg5MGNlODk5OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjAxMTljNWJlNjQ2NDgxNThkYWI2NWExOTBkYzJkYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45ODMzNjY5OCwgLTc2LjUzMDMxNjU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3M2FlNjAxZDViYTQyYWViNzIwM2Y4YmJjYTI4Njg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5M2EwYTgwZjQyNDQ4YmJiYzM4MzE0MWQwYTEwYjE4ID0gJChgPGRpdiBpZD0iaHRtbF8yOTNhMGE4MGY0MjQ0OGJiYmMzODMxNDFkMGExMGIxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9uYXJjaCBBY2FkZW15IEFubmFwb2xpczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjczYWU2MDFkNWJhNDJhZWI3MjAzZjhiYmNhMjg2ODguc2V0Q29udGVudChodG1sXzI5M2EwYTgwZjQyNDQ4YmJiYzM4MzE0MWQwYTEwYjE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IwMTE5YzViZTY0NjQ4MTU4ZGFiNjVhMTkwZGMyZGI0LmJpbmRQb3B1cChwb3B1cF9mNzNhZTYwMWQ1YmE0MmFlYjcyMDNmOGJiY2EyODY4OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWEyODZkMjAyY2Y1NDVlN2JiNDJhYTU5ODU0Njk0MGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDY4MDAwNSwgLTc2LjU5ODE1ODQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkYmI2MjU5NDJlOTRjY2E4OWFiYmMxMjE3YzNkOTY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5ZTI3ZWUzNDIyNTQ5NjBhOWVhZTJhNjQyN2Q3NDY1ID0gJChgPGRpdiBpZD0iaHRtbF9iOWUyN2VlMzQyMjU0OTYwYTllYWUyYTY0MjdkNzQ2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RHIuIEJlcm5hcmQgSGFycmlzIFNyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZGJiNjI1OTQyZTk0Y2NhODlhYmJjMTIxN2MzZDk2OC5zZXRDb250ZW50KGh0bWxfYjllMjdlZTM0MjI1NDk2MGE5ZWFlMmE2NDI3ZDc0NjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWEyODZkMjAyY2Y1NDVlN2JiNDJhYTU5ODU0Njk0MGIuYmluZFBvcHVwKHBvcHVwX2FkYmI2MjU5NDJlOTRjY2E4OWFiYmMxMjE3YzNkOTY4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMjgyYjQzNzFmZDM0NzIzYTQxYWI0YjQ2Njg0ODYxMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxNjI0MjM2LCAtNzYuOTI4MzM4MDk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWQ3ZTI4ZjgwYjZmNDU0YmFjYjU2MGI0OThiYWI1YzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTA5NDlmZDdjNzUzNGU5ZGFlMjNkNDM1NzA1NzVlNzAgPSAkKGA8ZGl2IGlkPSJodG1sXzkwOTQ5ZmQ3Yzc1MzRlOWRhZTIzZDQzNTcwNTc1ZTcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IExpYmVydHkgVU1DPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZDdlMjhmODBiNmY0NTRiYWNiNTYwYjQ5OGJhYjVjMi5zZXRDb250ZW50KGh0bWxfOTA5NDlmZDdjNzUzNGU5ZGFlMjNkNDM1NzA1NzVlNzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTI4MmI0MzcxZmQzNDcyM2E0MWFiNGI0NjY4NDg2MTEuYmluZFBvcHVwKHBvcHVwX2FkN2UyOGY4MGI2ZjQ1NGJhY2I1NjBiNDk4YmFiNWMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZDI4NDI0OTg1MTA0NDI5OWQ0Y2E2OWMwMWI0YmNlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwNzIzOTA2LCAtNzYuNTgyNzc4NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzE2MWFmMjg3ODdjNGQ1ZGExODgzMDBlNTY0MDI4NDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzcwMWFmY2YxZDNmNDgxY2E1ZjRhZjc5MWQzNWI3ZmIgPSAkKGA8ZGl2IGlkPSJodG1sXzc3MDFhZmNmMWQzZjQ4MWNhNWY0YWY3OTFkMzViN2ZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BbmdlbHMgSGVscGluZyBBbmdlbHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxNjFhZjI4Nzg3YzRkNWRhMTg4MzAwZTU2NDAyODQzLnNldENvbnRlbnQoaHRtbF83NzAxYWZjZjFkM2Y0ODFjYTVmNGFmNzkxZDM1YjdmYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZDI4NDI0OTg1MTA0NDI5OWQ0Y2E2OWMwMWI0YmNlMS5iaW5kUG9wdXAocG9wdXBfYzE2MWFmMjg3ODdjNGQ1ZGExODgzMDBlNTY0MDI4NDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxMWJjOTIwNDRiZDRiMzU4MzNkNDFiNzI5YzMxMTFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA3MTA5MjgsIC03Ni41ODcxNDQ3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NjA0NzQzNWQzNGY0MzAyYTY3NmI5ZTA5YTE2ODNmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NWMwN2NhMGMwN2U0Njg4YWQ4ZjQwNDMxOWM2ZmU5ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfODVjMDdjYTBjMDdlNDY4OGFkOGY0MDQzMTljNmZlOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbGxpbmd0b24gU3F1YXJlIEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NjA0NzQzNWQzNGY0MzAyYTY3NmI5ZTA5YTE2ODNmYS5zZXRDb250ZW50KGh0bWxfODVjMDdjYTBjMDdlNDY4OGFkOGY0MDQzMTljNmZlOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzExYmM5MjA0NGJkNGIzNTgzM2Q0MWI3MjljMzExMWEuYmluZFBvcHVwKHBvcHVwXzQ2MDQ3NDM1ZDM0ZjQzMDJhNjc2YjllMDlhMTY4M2ZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ODM5ZjY1NTQxNWE0NDAwOGNhMTZkMGNkZDU4N2NhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjYyMjY2OTU3LCAtNzcuNjcyMTk0OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODY2MjFiZTBjMzEzNDZlMmE3NGU0MjFkZWNiYjEzZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmJiMDAwMGZmODZiNGE5YTlhOWM2MTQ3MzRiMzYyNTAgPSAkKGA8ZGl2IGlkPSJodG1sX2JiYjAwMDBmZjg2YjRhOWE5YTljNjE0NzM0YjM2MjUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmFuY2lzIE11cnBoeSBBcGFydG1lbnRzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NjYyMWJlMGMzMTM0NmUyYTc0ZTQyMWRlY2JiMTNmNS5zZXRDb250ZW50KGh0bWxfYmJiMDAwMGZmODZiNGE5YTlhOWM2MTQ3MzRiMzYyNTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTgzOWY2NTU0MTVhNDQwMDhjYTE2ZDBjZGQ1ODdjYWUuYmluZFBvcHVwKHBvcHVwXzg2NjIxYmUwYzMxMzQ2ZTJhNzRlNDIxZGVjYmIxM2Y1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZGVhZTYyZDU0YzY0NDEwYmY5ODI2YjZmZDAwYTU3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwOTc2NTg5OTk5OTk5NSwgLTc2LjU5ODM5ODQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjOGVmYWZhYmY1MjQ5ZDhiNTE2MjQxN2MzMDI2NDRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjNTZiMGQyYzA3YzQ5OGE5MzQzMzE1NzY3MzcxZTYwID0gJChgPGRpdiBpZD0iaHRtbF9hYzU2YjBkMmMwN2M0OThhOTM0MzMxNTc2NzM3MWU2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WmlvbiBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmM4ZWZhZmFiZjUyNDlkOGI1MTYyNDE3YzMwMjY0NGEuc2V0Q29udGVudChodG1sX2FjNTZiMGQyYzA3YzQ5OGE5MzQzMzE1NzY3MzcxZTYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkZWFlNjJkNTRjNjQ0MTBiZjk4MjZiNmZkMDBhNTc2LmJpbmRQb3B1cChwb3B1cF8yYzhlZmFmYWJmNTI0OWQ4YjUxNjI0MTdjMzAyNjQ0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjRhYjc0Njk1NmRmNGI3NWFjOWFmZDA3MThlNzZkNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMTI3NzI0MiwgLTc2LjU5NTI1MTM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjYjcyYTIwOTViYjQ5MDk5N2E1MmNjOWY1ZGVmYWFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4Y2Q1ODNjOTViYjRhMWJhNjdlYTliYmE5YzdkYjY3ID0gJChgPGRpdiBpZD0iaHRtbF81OGNkNTgzYzk1YmI0YTFiYTY3ZWE5YmJhOWM3ZGI2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFyZm9yZCBIZWlnaHRzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wY2I3MmEyMDk1YmI0OTA5OTdhNTJjYzlmNWRlZmFhZC5zZXRDb250ZW50KGh0bWxfNThjZDU4M2M5NWJiNGExYmE2N2VhOWJiYTljN2RiNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjRhYjc0Njk1NmRmNGI3NWFjOWFmZDA3MThlNzZkNGQuYmluZFBvcHVwKHBvcHVwXzBjYjcyYTIwOTViYjQ5MDk5N2E1MmNjOWY1ZGVmYWFkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzA4ZjZlNjRhZjU0NTE4OGYyZTlmNDNmMDgxYzI2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM2NjA4OTU2LCAtNzUuNTgyNDE2NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWI0MjFlZjAwODk0NGZiY2JmMjY3NjllZTI5NTg3NjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzg5NWZlNTEzMDM0NDliYjhhNDM0ZjBlMmIyZDllYTcgPSAkKGA8ZGl2IGlkPSJodG1sX2M4OTVmZTUxMzAzNDQ5YmI4YTQzNGYwZTJiMmQ5ZWE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWNvbWljbyBIaWdoIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI0MjFlZjAwODk0NGZiY2JmMjY3NjllZTI5NTg3NjAuc2V0Q29udGVudChodG1sX2M4OTVmZTUxMzAzNDQ5YmI4YTQzNGYwZTJiMmQ5ZWE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3MDhmNmU2NGFmNTQ1MTg4ZjJlOWY0M2YwODFjMjY0LmJpbmRQb3B1cChwb3B1cF8xYjQyMWVmMDA4OTQ0ZmJjYmYyNjc2OWVlMjk1ODc2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGE2ZWNjNjE3YzAxNGZiNmIxMmU1MDBiNjdmMGZiNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40Mjc0OTA1MywgLTc3LjQ2MDYyNTA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhYmQwMWU2NTQ5NjQ3YzI5NjljYTI0NmEzMDgxNDZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3Yzc5NWE1NWFhNDQ3NDliYTlmN2VkYzZlOWVlZTRmID0gJChgPGRpdiBpZD0iaHRtbF9hN2M3OTVhNTVhYTQ0NzQ5YmE5ZjdlZGM2ZTllZWU0ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2F2ZXJsZXkgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmFiZDAxZTY1NDk2NDdjMjk2OWNhMjQ2YTMwODE0NmYuc2V0Q29udGVudChodG1sX2E3Yzc5NWE1NWFhNDQ3NDliYTlmN2VkYzZlOWVlZTRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhNmVjYzYxN2MwMTRmYjZiMTJlNTAwYjY3ZjBmYjRkLmJpbmRQb3B1cChwb3B1cF82YWJkMDFlNjU0OTY0N2MyOTY5Y2EyNDZhMzA4MTQ2ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzIxZDY1YTM5MzQyNDI3ZTg3Nzc4Mjc2Y2E5ZTI0ZTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDMzOTY1NSwgLTc2LjU4OTYyMjA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiMDIyMzQwNzEwMjQ1MTViZTA2Mzc4OWExYjhlZTMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgwM2ZlMDkzZDgzNTQ5ZTc5ODI5NGM5OThlNTAxZmFhID0gJChgPGRpdiBpZD0iaHRtbF84MDNmZTA5M2Q4MzU0OWU3OTgyOTRjOTk4ZTUwMWZhYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hyaXN0IFVuaXRlZCBNZXRob2Rpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjAyMjM0MDcxMDI0NTE1YmUwNjM3ODlhMWI4ZWUzMC5zZXRDb250ZW50KGh0bWxfODAzZmUwOTNkODM1NDllNzk4Mjk0Yzk5OGU1MDFmYWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzIxZDY1YTM5MzQyNDI3ZTg3Nzc4Mjc2Y2E5ZTI0ZTUuYmluZFBvcHVwKHBvcHVwXzBiMDIyMzQwNzEwMjQ1MTViZTA2Mzc4OWExYjhlZTMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTExNDVhMWUyNWM0YzFiOTQ1MWEyNmYxMTg0YjNjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM4MDkwNjUsIC03Ny4xNDUxNTQ4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYjFmZWUwOTVkNDg0YzViYTYwYTU2NTA1Y2FlNDRiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDU3MDBlMjA5YTM0NWZlOWM0NzFlMGJkM2JlMGQwZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTA1NzAwZTIwOWEzNDVmZTljNDcxZTBiZDNiZTBkMGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhcnJzIFJpZGdlIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZiMWZlZTA5NWQ0ODRjNWJhNjBhNTY1MDVjYWU0NGJkLnNldENvbnRlbnQoaHRtbF9hMDU3MDBlMjA5YTM0NWZlOWM0NzFlMGJkM2JlMGQwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYTExNDVhMWUyNWM0YzFiOTQ1MWEyNmYxMTg0YjNjOC5iaW5kUG9wdXAocG9wdXBfZmIxZmVlMDk1ZDQ4NGM1YmE2MGE1NjUwNWNhZTQ0YmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0MjYyMjhiNjcwYzRkNWFhYTg0MzZjODQ5YjFjNDBlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA2NzY5MDMsIC03Ni41ODc0MDg4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMTk5MWRhMzkwNmQ0MDZhOWNlOGFlNWY5MjBhYWM4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNmVkNmJhMzRhZmE0NTNhOTk1OTI2NjQ3NTc3MTQwNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTZlZDZiYTM0YWZhNDUzYTk5NTkyNjY0NzU3NzE0MDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRyaW5pdHkgQS5NLkUuIENodXJjaCBPL1I8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YxOTkxZGEzOTA2ZDQwNmE5Y2U4YWU1ZjkyMGFhYzhkLnNldENvbnRlbnQoaHRtbF8xNmVkNmJhMzRhZmE0NTNhOTk1OTI2NjQ3NTc3MTQwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NDI2MjI4YjY3MGM0ZDVhYWE4NDM2Yzg0OWIxYzQwZS5iaW5kUG9wdXAocG9wdXBfZjE5OTFkYTM5MDZkNDA2YTljZThhZTVmOTIwYWFjOGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiMTIxYmQ5ODA1ODRkMzVhMGQ5YjU5YmRkZmZjMjVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNTcwMTY5ODMsIC03Ni4wNzA1NTM3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MDNhODJhNWE5NTQ0Zjk5OWJjNjBiZjE2NmQ2Njk2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzZiM2I3ZjQwMjA0NjYyOTk1Y2VjNGUyNTUwYmZkOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWM2YjNiN2Y0MDIwNDY2Mjk5NWNlYzRlMjU1MGJmZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBQYXVsJ3MgVU1DPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDNhODJhNWE5NTQ0Zjk5OWJjNjBiZjE2NmQ2Njk2Mi5zZXRDb250ZW50KGh0bWxfZWM2YjNiN2Y0MDIwNDY2Mjk5NWNlYzRlMjU1MGJmZDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmIxMjFiZDk4MDU4NGQzNWEwZDliNTliZGRmZmMyNWQuYmluZFBvcHVwKHBvcHVwXzkwM2E4MmE1YTk1NDRmOTk5YmM2MGJmMTY2ZDY2OTYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmU3MWE1YzRmZDM0ZGE2OGNlNTQ1NmI3ODZlNGY5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM1ODU1NzEsIC03NS42MDA4NTg5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMzFlMjJmNjRkZTU0Zjc5YmNjOTc5MmMzNTJhYjIwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzM5NDYxMmEyZTg0MjM5YTE4MmU5MDk1NDhlYmM3NyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTczOTQ2MTJhMmU4NDIzOWExODJlOTA5NTQ4ZWJjNzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxvd2VyIFNob3JlIEZyaWVuZHMsIEluYzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTMxZTIyZjY0ZGU1NGY3OWJjYzk3OTJjMzUyYWIyMDEuc2V0Q29udGVudChodG1sX2U3Mzk0NjEyYTJlODQyMzlhMTgyZTkwOTU0OGViYzc3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VmZTcxYTVjNGZkMzRkYTY4Y2U1NDU2Yjc4NmU0Zjk5LmJpbmRQb3B1cChwb3B1cF8xMzFlMjJmNjRkZTU0Zjc5YmNjOTc5MmMzNTJhYjIwMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2ViMWQxMDBiNGY4NDA5ZWEzMWVkODJkOTFmNDI2NmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40MDY4NDQzNSwgLTc5LjQwNjA1NDc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3OWUwYzgzOTY5ZTRjMGU5NGE5ZDk4MmZjNjMzM2YxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0MzhlNmRkNzA5ODQ4MTI5MjAwNGY4N2I1OTdmMWZlID0gJChgPGRpdiBpZD0iaHRtbF84NDM4ZTZkZDcwOTg0ODEyOTIwMDRmODdiNTk3ZjFmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9vZCBDb25uZWN0IC0gU3QuIEFubiBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3OWUwYzgzOTY5ZTRjMGU5NGE5ZDk4MmZjNjMzM2YxLnNldENvbnRlbnQoaHRtbF84NDM4ZTZkZDcwOTg0ODEyOTIwMDRmODdiNTk3ZjFmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZWIxZDEwMGI0Zjg0MDllYTMxZWQ4MmQ5MWY0MjY2ZS5iaW5kUG9wdXAocG9wdXBfODc5ZTBjODM5NjllNGMwZTk0YTlkOTgyZmM2MzMzZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjMDQ1NjM4OGMxMzRjNDY4ZGMxOGY1MDc2YzNmNDU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDA2ODQ0MzUsIC03OS40MDYwNTQ3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjU3NmUxNThjY2E0NjQzODI3MWY5MjRkY2MwNGE0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTI4MDEyN2NkMjQ0NzQ1YTliNDA4NjdjMjljMGNhZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYmUyODAxMjdjZDI0NDc0NWE5YjQwODY3YzI5YzBjYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBQZXRlciBUaGUgQXBvc3RsZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDI1NzZlMTU4Y2NhNDY0MzgyNzFmOTI0ZGNjMDRhNDAuc2V0Q29udGVudChodG1sX2JlMjgwMTI3Y2QyNDQ3NDVhOWI0MDg2N2MyOWMwY2FkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjMDQ1NjM4OGMxMzRjNDY4ZGMxOGY1MDc2YzNmNDU3LmJpbmRQb3B1cChwb3B1cF8wMjU3NmUxNThjY2E0NjQzODI3MWY5MjRkY2MwNGE0MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2I3OWNlNDUzMTMzNDUwYTk4MDk5MWUyMWVmMDQwZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41MzE3MDYxOSwgLTc2LjM0MjYxMzIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZlYWVjOWU3YzNiNzQ1MzFiYWMyNDhkMjg3NDIxNTg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5YWU1YTFjZjQ0MDQ3N2E4NzAwMjI3M2ExZjIzMmFlID0gJChgPGRpdiBpZD0iaHRtbF85OWFlNWExY2Y0NDA0NzdhODcwMDIyNzNhMWYyMzJhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVsIEFpciBVTUMgRW1lcmdlbmN5IFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmVhZWM5ZTdjM2I3NDUzMWJhYzI0OGQyODc0MjE1ODcuc2V0Q29udGVudChodG1sXzk5YWU1YTFjZjQ0MDQ3N2E4NzAwMjI3M2ExZjIzMmFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NiNzljZTQ1MzEzMzQ1MGE5ODA5OTFlMjFlZjA0MGVhLmJpbmRQb3B1cChwb3B1cF9mZWFlYzllN2MzYjc0NTMxYmFjMjQ4ZDI4NzQyMTU4NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDRiZTVmYzhkMThhNGQ4ZjhlNWNhMjNlY2I2ZDI1MWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMTI2MDI0OSwgLTc2LjU4MzYxOTYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmYmZmZGM0ODE3MDQ1YTJiZTU5ZWIxMmU0NzIyYjE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhM2I4YWNmMTA1NTRhNDU5YTMyM2M3MjM4NjliYzg5ID0gJChgPGRpdiBpZD0iaHRtbF9iYTNiOGFjZjEwNTU0YTQ1OWEzMjNjNzIzODY5YmM4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3IExpZmUgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmYmZmZGM0ODE3MDQ1YTJiZTU5ZWIxMmU0NzIyYjE1LnNldENvbnRlbnQoaHRtbF9iYTNiOGFjZjEwNTU0YTQ1OWEzMjNjNzIzODY5YmM4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNGJlNWZjOGQxOGE0ZDhmOGU1Y2EyM2VjYjZkMjUxZi5iaW5kUG9wdXAocG9wdXBfNGZiZmZkYzQ4MTcwNDVhMmJlNTllYjEyZTQ3MjJiMTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2NmE3Mzk1NDViYzQzMDBhN2JhNDUyNzYzZjU2OWFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDgxNjQwODQsIC03Ny4zNTA1MDczMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOWY5YTFkZjk4YWY0OGRhOWU2NzgwYTFlNzJiNjc1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGEyYTEzOTM5ZmU0OWMyODAwMzBhOWVkNDA5ZGU0OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjRhMmExMzkzOWZlNDljMjgwMDMwYTllZDQwOWRlNDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdsYWRlIFZhbGxleSBDb21tdW5pdHkgU2VydmljZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjlmOWExZGY5OGFmNDhkYTllNjc4MGExZTcyYjY3NTAuc2V0Q29udGVudChodG1sXzY0YTJhMTM5MzlmZTQ5YzI4MDAzMGE5ZWQ0MDlkZTQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU2NmE3Mzk1NDViYzQzMDBhN2JhNDUyNzYzZjU2OWFjLmJpbmRQb3B1cChwb3B1cF8yOWY5YTFkZjk4YWY0OGRhOWU2NzgwYTFlNzJiNjc1MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTdmMTM2MTRmMTM4NDYxOTg5ZmMyYjg0ZmUwNzEwYWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDU3NTY1LCAtNzYuNTgyMzQ3ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGY1Y2RjMzdmMGQ2NDQ4NzgwNWZhYWM5MzRkMTUzMDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWEyMmM5ZGU5NTgzNGQ2NThjOGRjNjk1N2YzNGJlNTIgPSAkKGA8ZGl2IGlkPSJodG1sXzlhMjJjOWRlOTU4MzRkNjU4YzhkYzY5NTdmMzRiZTUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HR01CQzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGY1Y2RjMzdmMGQ2NDQ4NzgwNWZhYWM5MzRkMTUzMDQuc2V0Q29udGVudChodG1sXzlhMjJjOWRlOTU4MzRkNjU4YzhkYzY5NTdmMzRiZTUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U3ZjEzNjE0ZjEzODQ2MTk4OWZjMmI4NGZlMDcxMGFiLmJpbmRQb3B1cChwb3B1cF84ZjVjZGMzN2YwZDY0NDg3ODA1ZmFhYzkzNGQxNTMwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDk0ODE5OTNhODkzNGExOWE5NDlhNWUxNGQyMTA0YTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDkwMDY0OSwgLTc2LjU4MDU5MDEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhNTEwYzFhM2UzNTQyODlhOGYyY2Y1M2M5ZmY4NDQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3NTg3MWUxMDI0MjRhOWU4ZGU5ZTgwZTg0MjQyNTQzID0gJChgPGRpdiBpZD0iaHRtbF8yNzU4NzFlMTAyNDI0YTllOGRlOWU4MGU4NDI0MjU0MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGFrZXdvb2QgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhNTEwYzFhM2UzNTQyODlhOGYyY2Y1M2M5ZmY4NDQxLnNldENvbnRlbnQoaHRtbF8yNzU4NzFlMTAyNDI0YTllOGRlOWU4MGU4NDI0MjU0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kOTQ4MTk5M2E4OTM0YTE5YTk0OWE1ZTE0ZDIxMDRhNS5iaW5kUG9wdXAocG9wdXBfZWE1MTBjMWEzZTM1NDI4OWE4ZjJjZjUzYzlmZjg0NDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiNGVmZDM5M2JkNTRmNDNiM2RiMWI5Nzk2ZGI4NjM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA3MDY4NTMsIC03Ni41Nzk3NzM0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjM1YzhmMjkxZTU0NDhiYTRhZTEzNTAxZjA0Mzk5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODNiMjVlZmZlNDQ0ZjY2YWQyZmYzNDRmMDhkN2E4NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjgzYjI1ZWZmZTQ0NGY2NmFkMmZmMzQ0ZjA4ZDdhODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZvcnQgV29ydGhpbmd0b24gRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGIzNWM4ZjI5MWU1NDQ4YmE0YWUxMzUwMWYwNDM5OTEuc2V0Q29udGVudChodG1sXzI4M2IyNWVmZmU0NDRmNjZhZDJmZjM0NGYwOGQ3YTg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRiNGVmZDM5M2JkNTRmNDNiM2RiMWI5Nzk2ZGI4NjM3LmJpbmRQb3B1cChwb3B1cF8wYjM1YzhmMjkxZTU0NDhiYTRhZTEzNTAxZjA0Mzk5MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjI2YTk2NTQ3YzI5NGRkNGFlNzFiYjcyOWEzYzk4Y2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNjYzMDI0OCwgLTc2LjU2OTkwMDgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4MTI0OGMzYWI5YjRmNDhiZWExZmE1NzA2YWI1NGMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JmNjU5ODU0YjVkZjQ1NmZhZGE4MTVmMDU4MDhiYmI4ID0gJChgPGRpdiBpZD0iaHRtbF9iZjY1OTg1NGI1ZGY0NTZmYWRhODE1ZjA1ODA4YmJiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWNoaWV2ZW1lbnQgQWNhZGVteSBhdCBIYXJib3IgQ2l0eSBIaWdoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODEyNDhjM2FiOWI0ZjQ4YmVhMWZhNTcwNmFiNTRjMC5zZXRDb250ZW50KGh0bWxfYmY2NTk4NTRiNWRmNDU2ZmFkYTgxNWYwNTgwOGJiYjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjI2YTk2NTQ3YzI5NGRkNGFlNzFiYjcyOWEzYzk4Y2UuYmluZFBvcHVwKHBvcHVwXzc4MTI0OGMzYWI5YjRmNDhiZWExZmE1NzA2YWI1NGMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYWQxZDM5MzI1NGI0YTM4ODczNGM1ZGRiY2YyMGUwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM1MDc0Mzg2LCAtNzYuNTYyNzI5MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGQ2ZmZhMGI4YmQ5NDk4MThlMjFjYzk2MWZlNmIzNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGQ3ZGRkNWJhNTg3NDcxMjk4YjcwNjcwODg1ZTlmNjUgPSAkKGA8ZGl2IGlkPSJodG1sX2RkN2RkZDViYTU4NzQ3MTI5OGI3MDY3MDg4NWU5ZjY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VLk0uQy5TLiBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQ2ZmZhMGI4YmQ5NDk4MThlMjFjYzk2MWZlNmIzNzYuc2V0Q29udGVudChodG1sX2RkN2RkZDViYTU4NzQ3MTI5OGI3MDY3MDg4NWU5ZjY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFhZDFkMzkzMjU0YjRhMzg4NzM0YzVkZGJjZjIwZTA4LmJpbmRQb3B1cChwb3B1cF84ZDZmZmEwYjhiZDk0OTgxOGUyMWNjOTYxZmU2YjM3NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTg2YTNkNmEwNmVmNGJlZWIyN2U0NDM5MjQ3ZjYwOTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zNjg2ODc3NiwgLTc1LjU2MjYxNTkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxYjVkNDU5ZmRhYTRlMDRiODdkMmM4ZGFkNTRlMThiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3MDA4MzcwZTU1MDQ1NGM5ZjdkNzZmNGI1NDI3ZjhjID0gJChgPGRpdiBpZD0iaHRtbF85NzAwODM3MGU1NTA0NTRjOWY3ZDc2ZjRiNTQyN2Y4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RW1tYW51ZWwgV2VzbGV5YW4gRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxYjVkNDU5ZmRhYTRlMDRiODdkMmM4ZGFkNTRlMThiLnNldENvbnRlbnQoaHRtbF85NzAwODM3MGU1NTA0NTRjOWY3ZDc2ZjRiNTQyN2Y4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xODZhM2Q2YTA2ZWY0YmVlYjI3ZTQ0MzkyNDdmNjA5Ni5iaW5kUG9wdXAocG9wdXBfMzFiNWQ0NTlmZGFhNGUwNGI4N2QyYzhkYWQ1NGUxOGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y1N2NlOGNkNmQ5MjQwMzk5YmFjNjkyM2U5MGFkMmY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzU5NTcyNTQsIC03Ni41NTgyOTY3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOWZkMjUyNzEyODA0ZjQxODg4NWEzODg2NzFlNjhlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjU2Njc3NTYyZmM0MWZjOGEyZTIyMzgxN2RiNDIxNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGY1NjY3NzU2MmZjNDFmYzhhMmUyMjM4MTdkYjQyMTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhbWlsdG9uIEVsZW1lbnRhcnkvTWlkZGxlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOWZkMjUyNzEyODA0ZjQxODg4NWEzODg2NzFlNjhlNy5zZXRDb250ZW50KGh0bWxfZGY1NjY3NzU2MmZjNDFmYzhhMmUyMjM4MTdkYjQyMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjU3Y2U4Y2Q2ZDkyNDAzOTliYWM2OTIzZTkwYWQyZjYuYmluZFBvcHVwKHBvcHVwXzA5ZmQyNTI3MTI4MDRmNDE4ODg1YTM4ODY3MWU2OGU3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMGFiNWFjZTA2ZDM0OTQwYTM5YWI3MmMyZDA0YjgyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjYzMzQ3NzA0LCAtNzguNzUzMjQ3ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjUwNjdhYmIzNDNiNGNkNjgyNGI0NzFjZDIwZjVmMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjQxMDFmOGFiZjA3NDliNWIzNTMzNTdmZjZjNTFjZjYgPSAkKGA8ZGl2IGlkPSJodG1sX2I0MTAxZjhhYmYwNzQ5YjViMzUzMzU3ZmY2YzUxY2Y2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb3VudGFpbiBWaWV3IEFwYXJ0bWVudHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1MDY3YWJiMzQzYjRjZDY4MjRiNDcxY2QyMGY1ZjI3LnNldENvbnRlbnQoaHRtbF9iNDEwMWY4YWJmMDc0OWI1YjM1MzM1N2ZmNmM1MWNmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMGFiNWFjZTA2ZDM0OTQwYTM5YWI3MmMyZDA0YjgyNy5iaW5kUG9wdXAocG9wdXBfNjUwNjdhYmIzNDNiNGNkNjgyNGI0NzFjZDIwZjVmMjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY4ZDhlMDEwYTc3MDRjMWM5NWJmOTJlZWFhOGZkODllID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzY0NzQxMDksIC03Ni41NzIxOTIzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MDlkYjViMWIzZjg0N2E5OTUyMWU4MDRkODMzNjI2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTdjNGQzNjY4ZDA0NmM5YTkzNDA2MGRlYWIwYjQ1NCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDE3YzRkMzY2OGQwNDZjOWE5MzQwNjBkZWFiMGI0NTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJlZ2luYWxkIEYuIExld2lzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDlkYjViMWIzZjg0N2E5OTUyMWU4MDRkODMzNjI2YS5zZXRDb250ZW50KGh0bWxfNDE3YzRkMzY2OGQwNDZjOWE5MzQwNjBkZWFiMGI0NTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjhkOGUwMTBhNzcwNGMxYzk1YmY5MmVlYWE4ZmQ4OWUuYmluZFBvcHVwKHBvcHVwXzkwOWRiNWIxYjNmODQ3YTk5NTIxZTgwNGQ4MzM2MjZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNTJhYzRkNjZkMGQ0ZTdlOGIzNzIxMTI4ZTUzOTQwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzMzc2MjIsIC03Ni42NjEwMTgxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZTFiYTk4MGE1NWU0NDgxOGFlNGEwZWU2NjU0YjNlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOWQxMDZhMTFhNTE0ZmU5YmQ3NjRkMDg0YzQ3YTJlYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTlkMTA2YTExYTUxNGZlOWJkNzY0ZDA4NGM0N2EyZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdvc3BlbCBNZXNzZW5nZXJzIENvbW0uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZTFiYTk4MGE1NWU0NDgxOGFlNGEwZWU2NjU0YjNlNi5zZXRDb250ZW50KGh0bWxfMTlkMTA2YTExYTUxNGZlOWJkNzY0ZDA4NGM0N2EyZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTUyYWM0ZDY2ZDBkNGU3ZThiMzcyMTEyOGU1Mzk0MDcuYmluZFBvcHVwKHBvcHVwX2NlMWJhOTgwYTU1ZTQ0ODE4YWU0YTBlZTY2NTRiM2U2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NzJkZWJkOTRhYzE0ZWQ0YTRjOGY1NzU5YjRkZDFhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzMzQ4Nzg3LCAtNzYuNjY0ODM0MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWNkODVjOWUxNzIwNGNhZGE4OGY4ZmViZWE0NzBkMGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWVlNzM2MmE1MGVjNDE0MDlhMzYzYzZhZjQ4ODMwN2QgPSAkKGA8ZGl2IGlkPSJodG1sX2VlZTczNjJhNTBlYzQxNDA5YTM2M2M2YWY0ODgzMDdkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DcmVhdGl2ZSBDaXR5IFB1YmxpYyBDaGFydGVyIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWNkODVjOWUxNzIwNGNhZGE4OGY4ZmViZWE0NzBkMGYuc2V0Q29udGVudChodG1sX2VlZTczNjJhNTBlYzQxNDA5YTM2M2M2YWY0ODgzMDdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU3MmRlYmQ5NGFjMTRlZDRhNGM4ZjU3NTliNGRkMWFlLmJpbmRQb3B1cChwb3B1cF85Y2Q4NWM5ZTE3MjA0Y2FkYTg4ZjhmZWJlYTQ3MGQwZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDYxOTVlZWRlODU1NDFiNGI2OGZlZmYxNjg0ZDMxYzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41MjEwMTQzNywgLTc2LjkxOTU0MDE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1MDcxNmE1NTVhMzQ4YWJiNzNmODE3OGI2OWM4ZDUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4ZjJlMWM3ZTgxYzRjYjc5NTcwNTIyZWRhMmZjMDMwID0gJChgPGRpdiBpZD0iaHRtbF8yOGYyZTFjN2U4MWM0Y2I3OTU3MDUyMmVkYTJmYzAzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2FuZHltb3VudCBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNTA3MTZhNTU1YTM0OGFiYjczZjgxNzhiNjljOGQ1My5zZXRDb250ZW50KGh0bWxfMjhmMmUxYzdlODFjNGNiNzk1NzA1MjJlZGEyZmMwMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDYxOTVlZWRlODU1NDFiNGI2OGZlZmYxNjg0ZDMxYzkuYmluZFBvcHVwKHBvcHVwXzE1MDcxNmE1NTVhMzQ4YWJiNzNmODE3OGI2OWM4ZDUzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNzVmNzc5ZWM3ZmY0Zjg2YWNjMGRmMmU0ZGViN2Q4ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjYxMzk3ODYxLCAtNzYuOTA5NTU1NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTgzZjY1NmZmZGUyNDNhMTlkMmFlZWM1MTFkZTIzNDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWQxMmY0OWNjOTg2NDYyNmEyODBlMTc1ZmNlMDAyODYgPSAkKGA8ZGl2IGlkPSJodG1sXzlkMTJmNDljYzk4NjQ2MjZhMjgwZTE3NWZjZTAwMjg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aGVybiBNYXJ5bGFuZCBGb29kIEJhbms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4M2Y2NTZmZmRlMjQzYTE5ZDJhZWVjNTExZGUyMzQ5LnNldENvbnRlbnQoaHRtbF85ZDEyZjQ5Y2M5ODY0NjI2YTI4MGUxNzVmY2UwMDI4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNzVmNzc5ZWM3ZmY0Zjg2YWNjMGRmMmU0ZGViN2Q4ZS5iaW5kUG9wdXAocG9wdXBfOTgzZjY1NmZmZGUyNDNhMTlkMmFlZWM1MTFkZTIzNDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkYTA4Zjc2ZTQxZTRiMDM5OTg3NGFkMWE5MDJlZGQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzIwNjE3MTIsIC03Ni42NTQyMDc4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZDE5YThmZTY5ZGM0YTExYWRlMTVlNjhiN2FmYjE3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZjlmZjUxZDk5NDI0ZTZlYWMxZTliYTM2NzA1MDFmMCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2Y5ZmY1MWQ5OTQyNGU2ZWFjMWU5YmEzNjcwNTAxZjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vdW50IExlYmFub24gQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JkMTlhOGZlNjlkYzRhMTFhZGUxNWU2OGI3YWZiMTdmLnNldENvbnRlbnQoaHRtbF9jZjlmZjUxZDk5NDI0ZTZlYWMxZTliYTM2NzA1MDFmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZGEwOGY3NmU0MWU0YjAzOTk4NzRhZDFhOTAyZWRkOS5iaW5kUG9wdXAocG9wdXBfYmQxOWE4ZmU2OWRjNGExMWFkZTE1ZTY4YjdhZmIxN2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3MGUwM2QxMDM0ZDRjYTk5NWNhODI0MTUzODVhNWJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzQ0OTg3NjYsIC03Ni42NjMzNzkyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzRlYjJmYTFhNmE0ZGEwYTFiN2RiNDdmZWQ2ZjFhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZWVkNzg1MGZiMzE0Y2M5Yjc5M2U4OTFhMDliZGI2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYmVlZDc4NTBmYjMxNGNjOWI3OTNlODkxYTA5YmRiNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVkZ2Vjb21iZSBDaXJjbGUgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc0ZWIyZmExYTZhNGRhMGExYjdkYjQ3ZmVkNmYxYWYuc2V0Q29udGVudChodG1sX2JlZWQ3ODUwZmIzMTRjYzliNzkzZTg5MWEwOWJkYjZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3MGUwM2QxMDM0ZDRjYTk5NWNhODI0MTUzODVhNWJlLmJpbmRQb3B1cChwb3B1cF84NzRlYjJmYTFhNmE0ZGEwYTFiN2RiNDdmZWQ2ZjFhZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGJiMjc4NjIzYjQwNDZiZTlmY2U4YjM2Yzg5ZjIxZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMjM4OTksIC03Ni42NjAxMjE5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZWYyYmYxMDIwYTc0ZGNlYmFmODhiZTAxZGRjOTRmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOTFmZWFmODQxNTg0NjJiYWE0NGE5ZWMwODgyN2EyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDkxZmVhZjg0MTU4NDYyYmFhNDRhOWVjMDg4MjdhMjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdWwgSGFydmVzdCBDaHVyY2ggJiBNaW5pc3RyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmVmMmJmMTAyMGE3NGRjZWJhZjg4YmUwMWRkYzk0Zjcuc2V0Q29udGVudChodG1sXzA5MWZlYWY4NDE1ODQ2MmJhYTQ0YTllYzA4ODI3YTI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiYjI3ODYyM2I0MDQ2YmU5ZmNlOGIzNmM4OWYyMWZhLmJpbmRQb3B1cChwb3B1cF82ZWYyYmYxMDIwYTc0ZGNlYmFmODhiZTAxZGRjOTRmNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQ4MjU4Yjk4NThiNDU4N2I5MjcxZjdkYzQyYjRkNWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNDc3MDI5NSwgLTc2LjY3MDcyNTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmMDBiODI1ODc1MDQyOGNiZGYxZGI1Nzc2YzE5YjUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlNmFiYjlmZmVhNjRmYjg5OTljODY4ZjM0NWNhNzhjID0gJChgPGRpdiBpZD0iaHRtbF9lZTZhYmI5ZmZlYTY0ZmI4OTk5Yzg2OGYzNDVjYTc4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHJhbnNmb3JtaW5nIExpZmUgT3V0cmVhY2ggTWluPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZjAwYjgyNTg3NTA0MjhjYmRmMWRiNTc3NmMxOWI1MS5zZXRDb250ZW50KGh0bWxfZWU2YWJiOWZmZWE2NGZiODk5OWM4NjhmMzQ1Y2E3OGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGQ4MjU4Yjk4NThiNDU4N2I5MjcxZjdkYzQyYjRkNWEuYmluZFBvcHVwKHBvcHVwX2RmMDBiODI1ODc1MDQyOGNiZGYxZGI1Nzc2YzE5YjUxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMjYyODg0OTRlYWU0OGJkYTZjMmEzODY5YjlmYjRlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMyMzQyODc4LCAtNzYuNjY4ODYyODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjBlMWViOWQxNzlkNGFhMDhjYzYyNDBmZDI4NzQ2ZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODAxMmQyYzYzNGZhNDEwZTlkODNhNzE5OWZlYjFhOTggPSAkKGA8ZGl2IGlkPSJodG1sXzgwMTJkMmM2MzRmYTQxMGU5ZDgzYTcxOTlmZWIxYTk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGFyaXRhYmxlIERvbmF0aW9ucyBDLkQuTy5NLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjBlMWViOWQxNzlkNGFhMDhjYzYyNDBmZDI4NzQ2ZDAuc2V0Q29udGVudChodG1sXzgwMTJkMmM2MzRmYTQxMGU5ZDgzYTcxOTlmZWIxYTk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QyNjI4ODQ5NGVhZTQ4YmRhNmMyYTM4NjliOWZiNGUxLmJpbmRQb3B1cChwb3B1cF9mMGUxZWI5ZDE3OWQ0YWEwOGNjNjI0MGZkMjg3NDZkMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjI3YjdiYmRkMjFhNDhiZWE1NDE1NjE4YjM3YzJiYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMjU4MTQxNCwgLTc2LjY3NDI3MDU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiNWZkZDAwMGNkMDRiMGNhNDA4ZThiMjAyZjkwYmNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiNzExYzhlOGE1MTRiNGI4ZmMwNDgxNjY3MzM2OTU4ID0gJChgPGRpdiBpZD0iaHRtbF82YjcxMWM4ZThhNTE0YjRiOGZjMDQ4MTY2NzMzNjk1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VW5pdGVkIEhvdXNlIG9mIFByYXllcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmI1ZmRkMDAwY2QwNGIwY2E0MDhlOGIyMDJmOTBiY2Uuc2V0Q29udGVudChodG1sXzZiNzExYzhlOGE1MTRiNGI4ZmMwNDgxNjY3MzM2OTU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YyN2I3YmJkZDIxYTQ4YmVhNTQxNTYxOGIzN2MyYmI2LmJpbmRQb3B1cChwb3B1cF9iYjVmZGQwMDBjZDA0YjBjYTQwOGU4YjIwMmY5MGJjZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWNjOWVlZTk1OTNjNDI4MGE4MTA3OTg1YThjNDZkZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40NTQ3MzMzNCwgLTc3LjQ1MDY4NDcwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1MWZkNjAwODU5YjQ1ZWQ5ZDQxMDU4NzlmZDM0MDQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2OGYzZjE4ZTdhNTRhNTg5YzNjYjNjNzM4NWYzMGQ4ID0gJChgPGRpdiBpZD0iaHRtbF9jNjhmM2YxOGU3YTU0YTU4OWMzY2IzYzczODVmMzBkOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2hpdHRpZXIgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1MWZkNjAwODU5YjQ1ZWQ5ZDQxMDU4NzlmZDM0MDQxLnNldENvbnRlbnQoaHRtbF9jNjhmM2YxOGU3YTU0YTU4OWMzY2IzYzczODVmMzBkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lY2M5ZWVlOTU5M2M0MjgwYTgxMDc5ODVhOGM0NmRkNy5iaW5kUG9wdXAocG9wdXBfZDUxZmQ2MDA4NTliNDVlZDlkNDEwNTg3OWZkMzQwNDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAyMGRkMjkzZDVkZDRmMjlhOGQyNzU0NDgwM2NhMWU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzUwNTgzNTksIC03Ni42ODUzNTAyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hODViNjQxNmJiMzg0OWY3YjgyYmJjZTJlYzhkNjYxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NDFlZjk4NjQ3ODU0NmNmYmVhYjI1MjgwYjZiMWQ0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTQxZWY5ODY0Nzg1NDZjZmJlYWIyNTI4MGI2YjFkNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFybGluZ3RvbiBFbGVtZW50YXJ5L01pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4NWI2NDE2YmIzODQ5ZjdiODJiYmNlMmVjOGQ2NjFjLnNldENvbnRlbnQoaHRtbF85NDFlZjk4NjQ3ODU0NmNmYmVhYjI1MjgwYjZiMWQ0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMjBkZDI5M2Q1ZGQ0ZjI5YThkMjc1NDQ4MDNjYTFlNC5iaW5kUG9wdXAocG9wdXBfYTg1YjY0MTZiYjM4NDlmN2I4MmJiY2UyZWM4ZDY2MWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxYjk2NWZlODZlODQ2Mjg5ZTYwN2E1Y2JkNzhmNTA0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzQ4NzgzMywgLTc2LjY4ODU0OTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxNTk4NjEwZDk3YzRjZTFiOGZiMjViMTliOTViNjkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkZmE3NWZiNWI0ODQ1ZmZiM2ZhZWQwNjZhNWExODUzID0gJChgPGRpdiBpZD0iaHRtbF80ZGZhNzVmYjViNDg0NWZmYjNmYWVkMDY2YTVhMTg1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmV0aC1FbCBUZW1wbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxNTk4NjEwZDk3YzRjZTFiOGZiMjViMTliOTViNjkwLnNldENvbnRlbnQoaHRtbF80ZGZhNzVmYjViNDg0NWZmYjNmYWVkMDY2YTVhMTg1Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMWI5NjVmZTg2ZTg0NjI4OWU2MDdhNWNiZDc4ZjUwNC5iaW5kUG9wdXAocG9wdXBfODE1OTg2MTBkOTdjNGNlMWI4ZmIyNWIxOWI5NWI2OTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiZGY5NzY4MDczYjQ4MWM5Zjk2YTIyZGQ3OGFjZDBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjQwNjI2NiwgLTc2Ljg2OTE3MzA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4NWFmOWYxYWExZjQ0NzFhMjZmNjYzNzM5YzllMzJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc3Yzg3ZjVmYThlNDQ2ZWVhZWI0NTI0MTEzYmQyMjU1ID0gJChgPGRpdiBpZD0iaHRtbF83N2M4N2Y1ZmE4ZTQ0NmVlYWViNDUyNDExM2JkMjI1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGggQ2Fycm9sbCBNaWRkbGUgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODVhZjlmMWFhMWY0NDcxYTI2ZjY2MzczOWM5ZTMyYi5zZXRDb250ZW50KGh0bWxfNzdjODdmNWZhOGU0NDZlZWFlYjQ1MjQxMTNiZDIyNTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWJkZjk3NjgwNzNiNDgxYzlmOTZhMjJkZDc4YWNkMGMuYmluZFBvcHVwKHBvcHVwX2U4NWFmOWYxYWExZjQ0NzFhMjZmNjYzNzM5YzllMzJiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGUyNTA1Y2YwNzQ0YTBiOTBlNzUwMTYwZGZhZWU2NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzMzkzNzEzLCAtNzYuNjgzNDI2MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2VlMWIwNzcwZGM0NDRkNTg0ZTBlNWUxYjc2MDY1MmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjFjNWU2NWQ5NTU3NDMyYTg2MTRlMjA5ZDZmODE1MjYgPSAkKGA8ZGl2IGlkPSJodG1sXzIxYzVlNjVkOTU1NzQzMmE4NjE0ZTIwOWQ2ZjgxNTI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYWx2YXJ5IEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZWUxYjA3NzBkYzQ0NGQ1ODRlMGU1ZTFiNzYwNjUyYS5zZXRDb250ZW50KGh0bWxfMjFjNWU2NWQ5NTU3NDMyYTg2MTRlMjA5ZDZmODE1MjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjhlMjUwNWNmMDc0NGEwYjkwZTc1MDE2MGRmYWVlNjUuYmluZFBvcHVwKHBvcHVwX2NlZTFiMDc3MGRjNDQ0ZDU4NGUwZTVlMWI3NjA2NTJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzQ4NmIxZmIxYTg0YTVkYmU3YTZhNzIyZjRlNTJjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzMDM3MDU0LCAtNzYuNjY4MzI0MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmNiZTg5MDNhYTE1NDM2ZTkxYWJiNmQ2OTRhYmM3NDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDRlNGZjZmYxYTI0NDg5MDg4YTQyNjhhZjM2YThmMzcgPSAkKGA8ZGl2IGlkPSJodG1sXzA0ZTRmY2ZmMWEyNDQ4OTA4OGE0MjY4YWYzNmE4ZjM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eci4gTmF0aGFuIFBpdHRzIEFzaGJ1cnRvbiBFTVM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JjYmU4OTAzYWExNTQzNmU5MWFiYjZkNjk0YWJjNzQ3LnNldENvbnRlbnQoaHRtbF8wNGU0ZmNmZjFhMjQ0ODkwODhhNDI2OGFmMzZhOGYzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNzQ4NmIxZmIxYTg0YTVkYmU3YTZhNzIyZjRlNTJjNC5iaW5kUG9wdXAocG9wdXBfYmNiZTg5MDNhYTE1NDM2ZTkxYWJiNmQ2OTRhYmM3NDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjYjBhNjEzYTQwMzRmZmFhNmM5MDQ0NTk4MWZhNjk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzQzNzU0NjgsIC03Ni42ODgzNjYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzNjM0YjE3MjNjODQ0MTlhOGU1YzFlNzI5MWMzYzE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4ZmE1ZGQyOGQ5MjRlODZhYWY1YjcwMzY1NDEwMmJmID0gJChgPGRpdiBpZD0iaHRtbF9lOGZhNWRkMjhkOTI0ZTg2YWFmNWI3MDM2NTQxMDJiZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEludGVyIEZhaXRoIEFjYWRlbXkgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzYzNGIxNzIzYzg0NDE5YThlNWMxZTcyOTFjM2MxNS5zZXRDb250ZW50KGh0bWxfZThmYTVkZDI4ZDkyNGU4NmFhZjViNzAzNjU0MTAyYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmNiMGE2MTNhNDAzNGZmYWE2YzkwNDQ1OTgxZmE2OTYuYmluZFBvcHVwKHBvcHVwXzkzNjM0YjE3MjNjODQ0MTlhOGU1YzFlNzI5MWMzYzE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjVhZTQzMzI4ZTA0MmUwYWMxNDNhNzBmZjgyYzk4OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM1OTgwMDMyLCAtNzYuNzEzMTU4NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGE5YzM5Yzg5YjMwNDU5YmE2MWYzOWEwN2U0MjM3YjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODQ2YmEwNGExMzNiNDc1NTgzMmMxMzZkY2RlMjU3ZjYgPSAkKGA8ZGl2IGlkPSJodG1sXzg0NmJhMDRhMTMzYjQ3NTU4MzJjMTM2ZGNkZTI1N2Y2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWxicm9vayBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTljMzljODliMzA0NTliYTYxZjM5YTA3ZTQyMzdiMy5zZXRDb250ZW50KGh0bWxfODQ2YmEwNGExMzNiNDc1NTgzMmMxMzZkY2RlMjU3ZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGI1YWU0MzMyOGUwNDJlMGFjMTQzYTcwZmY4MmM5ODkuYmluZFBvcHVwKHBvcHVwXzRhOWMzOWM4OWIzMDQ1OWJhNjFmMzlhMDdlNDIzN2IzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNDdmNDI2YTYxMTA0ZGMyYWYxOTYzYmMyMDQ4MWExNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjE2OTYyODYsIC03NS4zODcyNjcyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNWYwNjY1OWE3Mzc0MzNkYTk2NTUwODllYjRiZDhkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOTFlNWJmMDRhZmQ0NTlkOTkyN2Q5ZjkyOTIzYmExMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjkxZTViZjA0YWZkNDU5ZDk5MjdkOWY5MjkyM2JhMTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNub3cgSGlsbCBFY3VtZW5pY2FsIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNWYwNjY1OWE3Mzc0MzNkYTk2NTUwODllYjRiZDhkNS5zZXRDb250ZW50KGh0bWxfZjkxZTViZjA0YWZkNDU5ZDk5MjdkOWY5MjkyM2JhMTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDQ3ZjQyNmE2MTEwNGRjMmFmMTk2M2JjMjA0ODFhMTYuYmluZFBvcHVwKHBvcHVwX2Y1ZjA2NjU5YTczNzQzM2RhOTY1NTA4OWViNGJkOGQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yM2NmNDg4NzAzYzE0YmMzYTNkOTY5ZGM3YzhiMDVlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzNzAxMjYxLCAtNzYuNjg0NzE1OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmI2N2M2NTY1MzA3NGUyOGFjNzA3NjczNzFhNzZjZDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDFlYzIzNjgwYjk3NDBmYzgxMzcyY2FlYzJhODMxZjAgPSAkKGA8ZGl2IGlkPSJodG1sX2QxZWMyMzY4MGI5NzQwZmM4MTM3MmNhZWMyYTgzMWYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HZW9yZ2UgVy5GIE1jTWVjaGVuIE1pZGRsZS9IaWdoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjY3YzY1NjUzMDc0ZTI4YWM3MDc2NzM3MWE3NmNkNS5zZXRDb250ZW50KGh0bWxfZDFlYzIzNjgwYjk3NDBmYzgxMzcyY2FlYzJhODMxZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjNjZjQ4ODcwM2MxNGJjM2EzZDk2OWRjN2M4YjA1ZTIuYmluZFBvcHVwKHBvcHVwX2JiNjdjNjU2NTMwNzRlMjhhYzcwNzY3MzcxYTc2Y2Q1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDQ3ZWM0MGRkNmI0ZjRlOWM5MzBlNTIwZTIyNmJmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM0MjU4NTE5LCAtNzYuNjgwNDg0MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTBiNWQzMjA0YjRiNGVlMWEzMDBjN2YzMTVmODA2ZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjFmYmQ5Mjk1MjYwNGNjY2FjOTU0OTk4YWVlMDZhMjQgPSAkKGA8ZGl2IGlkPSJodG1sX2YxZmJkOTI5NTI2MDRjY2NhYzk1NDk5OGFlZTA2YTI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYW5nc3RvbiBIdWdoZXMgQ29tbXVuaXR5IFJlc291cmNlIENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTBiNWQzMjA0YjRiNGVlMWEzMDBjN2YzMTVmODA2Zjcuc2V0Q29udGVudChodG1sX2YxZmJkOTI5NTI2MDRjY2NhYzk1NDk5OGFlZTA2YTI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0NDdlYzQwZGQ2YjRmNGU5YzkzMGU1MjBlMjI2YmZhLmJpbmRQb3B1cChwb3B1cF85MGI1ZDMyMDRiNGI0ZWUxYTMwMGM3ZjMxNWY4MDZmNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWVmNTNlYjAwZDJkNDkwNzkxYzI5NDJkZjQ2ZWJjMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42Nzc0MTc1LCAtNzUuOTY2MjM2NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Y5MzYxMmE3NWZkNDIwNWEzZDBkMDIzMGRmMGE2NzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWUxMjQ2YTVmOGMzNDRhNmEyYzVlZTYzZWM1NWM1MTggPSAkKGA8ZGl2IGlkPSJodG1sXzllMTI0NmE1ZjhjMzQ0YTZhMmM1ZWU2M2VjNTVjNTE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BZ2FwZSBQcm9ncmFtPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZjkzNjEyYTc1ZmQ0MjA1YTNkMGQwMjMwZGYwYTY3MC5zZXRDb250ZW50KGh0bWxfOWUxMjQ2YTVmOGMzNDRhNmEyYzVlZTYzZWM1NWM1MTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWVmNTNlYjAwZDJkNDkwNzkxYzI5NDJkZjQ2ZWJjMGUuYmluZFBvcHVwKHBvcHVwXzNmOTM2MTJhNzVmZDQyMDVhM2QwZDAyMzBkZjBhNjcwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZmMyYjNhNmZmODg0NDMyOWFlODdlZDM1YzE2NjZhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI3MDkxMDcxLCAtNzYuNzMxMDI3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85N2Y3ZTgzYmRkM2M0ZDVlYjg5Nzg2MGM2YzZmOTQ2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZjJmMWE1NzdjMTA0ZDhiOTdjNGJjNWIxNDk3NGQyOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNGYyZjFhNTc3YzEwNGQ4Yjk3YzRiYzViMTQ5NzRkMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdG9uc3ZpbGxlIEVtZXJnZW5jeSBBc3Npc3RhbmNlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85N2Y3ZTgzYmRkM2M0ZDVlYjg5Nzg2MGM2YzZmOTQ2YS5zZXRDb250ZW50KGh0bWxfNGYyZjFhNTc3YzEwNGQ4Yjk3YzRiYzViMTQ5NzRkMjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWZjMmIzYTZmZjg4NDQzMjlhZTg3ZWQzNWMxNjY2YTIuYmluZFBvcHVwKHBvcHVwXzk3ZjdlODNiZGQzYzRkNWViODk3ODYwYzZjNmY5NDZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MTBjNTFjZTA0Njk0ZTFlYjhhYjU0ODFmYzllZmFhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY0NjY0NzMsIC03Ny43MTUzNjYyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYzA3YTg1YTJiYTM0NDkyODVlY2IyYmE1OWRmNjdmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNzllYjFjMjAwYjE0YWU2YTQyMTFjNTcyNzg2NTE2NSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjc5ZWIxYzIwMGIxNGFlNmE0MjExYzU3Mjc4NjUxNjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldheSBTdGF0aW9uIE5vcnRoIFBvaW50PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYzA3YTg1YTJiYTM0NDkyODVlY2IyYmE1OWRmNjdmOC5zZXRDb250ZW50KGh0bWxfYjc5ZWIxYzIwMGIxNGFlNmE0MjExYzU3Mjc4NjUxNjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzEwYzUxY2UwNDY5NGUxZWI4YWI1NDgxZmM5ZWZhYTguYmluZFBvcHVwKHBvcHVwX2RjMDdhODVhMmJhMzQ0OTI4NWVjYjJiYTU5ZGY2N2Y4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80Y2U2ZTg3ZTUwMDE0MTZiYTlhMjIwYzFmOTIxZWYxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY0MjQ0NTkxLCAtNzcuNzIzMzI2MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjE2MTA2MmQ3YzRhNDViYjhjNTEyYTk2MzQwZWI3MDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQ3YWU2NTBiZjY0NDllYThhZTNkYzkwYTAxYjQ4NjYgPSAkKGA8ZGl2IGlkPSJodG1sXzRkN2FlNjUwYmY2NDQ5ZWE4YWUzZGM5MGEwMWI0ODY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NdC4gSG9wZSwgSW5jLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjE2MTA2MmQ3YzRhNDViYjhjNTEyYTk2MzQwZWI3MDMuc2V0Q29udGVudChodG1sXzRkN2FlNjUwYmY2NDQ5ZWE4YWUzZGM5MGEwMWI0ODY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRjZTZlODdlNTAwMTQxNmJhOWEyMjBjMWY5MjFlZjE5LmJpbmRQb3B1cChwb3B1cF9mMTYxMDYyZDdjNGE0NWJiOGM1MTJhOTYzNDBlYjcwMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzkxMTI4NjY0Y2E1NDYyMTkyZDk0ODExMmY3NjMwYTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNDc3ODE4MywgLTc2LjY3NjE5MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDRhNWY3NTZkMTg0NGY5MzhhMDkwZjI1ZjhjZjcxZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODIzMjQ1OWFjYzJjNDdhZGJkOTFjYjIzYzVlNmNhZTUgPSAkKGA8ZGl2IGlkPSJodG1sXzgyMzI0NTlhY2MyYzQ3YWRiZDkxY2IyM2M1ZTZjYWU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXJ5bGFuZCBDaHVyY2ggb2YgR29kIGluIENocmlzdCBJbmM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ0YTVmNzU2ZDE4NDRmOTM4YTA5MGYyNWY4Y2Y3MWY1LnNldENvbnRlbnQoaHRtbF84MjMyNDU5YWNjMmM0N2FkYmQ5MWNiMjNjNWU2Y2FlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOTExMjg2NjRjYTU0NjIxOTJkOTQ4MTEyZjc2MzBhNS5iaW5kUG9wdXAocG9wdXBfNDRhNWY3NTZkMTg0NGY5MzhhMDkwZjI1ZjhjZjcxZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlMmNjMGE2ZmMyNzQ2ZTY4NWE5YmM5MTcyOWRiYjk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzQ4NzMyMTIsIC03Ni42NzgxNjkzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDlhNGQyNjFhMDM0MDZkYWUwZDIwMTYxZTRlNmQxMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85N2JkNTZiYjVhOWE0NDFjODIwZjJkODc0NTViY2ZlNSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTdiZDU2YmI1YTlhNDQxYzgyMGYyZDg3NDU1YmNmZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldvcmQgYW5kIFByYWlzZSBGYWl0aCBNaW5pc3RyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmQ5YTRkMjYxYTAzNDA2ZGFlMGQyMDE2MWU0ZTZkMTAuc2V0Q29udGVudChodG1sXzk3YmQ1NmJiNWE5YTQ0MWM4MjBmMmQ4NzQ1NWJjZmU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlMmNjMGE2ZmMyNzQ2ZTY4NWE5YmM5MTcyOWRiYjk1LmJpbmRQb3B1cChwb3B1cF82ZDlhNGQyNjFhMDM0MDZkYWUwZDIwMTYxZTRlNmQxMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTAyMDRiODhjODBkNDIxMzhhMTY5OTFhMmM1ZmQ3YjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNDM0ODcyMSwgLTc2LjY4NDI2NjU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiNWQ1NjI4MGMzMTQzOWU4MzQzNmFmNWY0NWJkM2QzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4Y2Y0OGM5MzA3YjQ5Mjc4YTgzZGFjYmFjNmI3NDc2ID0gJChgPGRpdiBpZD0iaHRtbF9kOGNmNDhjOTMwN2I0OTI3OGE4M2RhY2JhYzZiNzQ3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGl2aW5lIERlbGl2ZXJhbmNlIEFwb3N0b2xpYyBGYWl0aCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiNWQ1NjI4MGMzMTQzOWU4MzQzNmFmNWY0NWJkM2QzLnNldENvbnRlbnQoaHRtbF9kOGNmNDhjOTMwN2I0OTI3OGE4M2RhY2JhYzZiNzQ3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMDIwNGI4OGM4MGQ0MjEzOGExNjk5MWEyYzVmZDdiNS5iaW5kUG9wdXAocG9wdXBfMGI1ZDU2MjgwYzMxNDM5ZTgzNDM2YWY1ZjQ1YmQzZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5N2I4ZGM0M2EwNjQ4MWFiOWE2N2I0ODFhZjYzYTBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzQ4OTExNTcsIC03Ni43MTAxMDIyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NjA0Y2RjMDQ4MGU0MTE5OTllY2E3ZTY4MDM0MGM2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTM5Zjc4NmQyMTk0ZDFmOGYwY2M3OTRjZjQyZjE0OSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWUzOWY3ODZkMjE5NGQxZjhmMGNjNzk0Y2Y0MmYxNDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBQc2FsbWlzdCBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDYwNGNkYzA0ODBlNDExOTk5ZWNhN2U2ODAzNDBjNmYuc2V0Q29udGVudChodG1sXzFlMzlmNzg2ZDIxOTRkMWY4ZjBjYzc5NGNmNDJmMTQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM5N2I4ZGM0M2EwNjQ4MWFiOWE2N2I0ODFhZjYzYTBmLmJpbmRQb3B1cChwb3B1cF80NjA0Y2RjMDQ4MGU0MTE5OTllY2E3ZTY4MDM0MGM2ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM2OWZkOTE2N2E2NGQ2YmI1YTkyOTQ2NGYxODBiMDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC43NTM3ODY0OCwgLTc1LjgyNTc3MTg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NkYmJlYTk5MWU3ODQ2NGU5ODZhYmQ3YmEzYzM5NWY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4M2Q0N2UzNTE1MDRhMDdiZGZmYjFmZDdkMmY3ZDIzID0gJChgPGRpdiBpZD0iaHRtbF8yODNkNDdlMzUxNTA0YTA3YmRmZmIxZmQ3ZDJmN2QyMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sb25lbCBSaWNoYXJkc29uIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZGJiZWE5OTFlNzg0NjRlOTg2YWJkN2JhM2MzOTVmNS5zZXRDb250ZW50KGh0bWxfMjgzZDQ3ZTM1MTUwNGEwN2JkZmZiMWZkN2QyZjdkMjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzM2OWZkOTE2N2E2NGQ2YmI1YTkyOTQ2NGYxODBiMDguYmluZFBvcHVwKHBvcHVwX2NkYmJlYTk5MWU3ODQ2NGU5ODZhYmQ3YmEzYzM5NWY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMDFkMDVkZTQwYzc0OGFlOTQ2ODcxNDBmMzUyZGJhZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM4NzUyMDQzLCAtNzYuNTM5NDg0NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTg3MTg5YTg2YWQ2NDA2M2IxNjljY2IzZGVkZmFjZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2IwNDQ1MDYzMWI0NDIxZmEzMDNmZThiNDg5NjhmNjAgPSAkKGA8ZGl2IGlkPSJodG1sX2NiMDQ0NTA2MzFiNDQyMWZhMzAzZmU4YjQ4OTY4ZjYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXJrdmlsbGUgSGlnaCBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4NzE4OWE4NmFkNjQwNjNiMTY5Y2NiM2RlZGZhY2YyLnNldENvbnRlbnQoaHRtbF9jYjA0NDUwNjMxYjQ0MjFmYTMwM2ZlOGI0ODk2OGY2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMDFkMDVkZTQwYzc0OGFlOTQ2ODcxNDBmMzUyZGJhZi5iaW5kUG9wdXAocG9wdXBfMTg3MTg5YTg2YWQ2NDA2M2IxNjljY2IzZGVkZmFjZjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1YWNkNGU3ZGM3MTQ1MTM4MTNiMmEyZWVkOGZiOWRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzU5MTMzNjIsIC03Ni42OTIwODM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NkNmRhYzk1ZjkwNDRhM2M5MTQ4ZjI5MGRmYzUzZDcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1Yzc3NzU5Zjc0NDQ3ZWZhMmQ0MjMxOGQ0Mzg0NjJlID0gJChgPGRpdiBpZD0iaHRtbF8yNWM3Nzc1OWY3NDQ0N2VmYTJkNDIzMThkNDM4NDYyZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UHJvamVjdCBNb3pvbmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkNmRhYzk1ZjkwNDRhM2M5MTQ4ZjI5MGRmYzUzZDcyLnNldENvbnRlbnQoaHRtbF8yNWM3Nzc1OWY3NDQ0N2VmYTJkNDIzMThkNDM4NDYyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NWFjZDRlN2RjNzE0NTEzODEzYjJhMmVlZDhmYjlkYy5iaW5kUG9wdXAocG9wdXBfY2Q2ZGFjOTVmOTA0NGEzYzkxNDhmMjkwZGZjNTNkNzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjY2JiZWNlNmJkZTRjNWJhN2M2MTk5YThmYzE5NmIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzU5OTU1NTQsIC03Ni43MDc0NTc5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZjVkMjk3OWRmMTE0MGI5YThhODVlNWRlNzRhZWI2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMTFhOTAwZDI1Zjk0YzI5YWQ1MmYxODQ1ZDU4MWY2YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTExYTkwMGQyNWY5NGMyOWFkNTJmMTg0NWQ1ODFmNmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFoYXZhcyBZaXNyYWVsIENoYXJpdHkgRnVuZDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGY1ZDI5NzlkZjExNDBiOWE4YTg1ZTVkZTc0YWViNjMuc2V0Q29udGVudChodG1sXzExMWE5MDBkMjVmOTRjMjlhZDUyZjE4NDVkNTgxZjZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBjY2JiZWNlNmJkZTRjNWJhN2M2MTk5YThmYzE5NmIwLmJpbmRQb3B1cChwb3B1cF80ZjVkMjk3OWRmMTE0MGI5YThhODVlNWRlNzRhZWI2MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDQ5YjM1MDY0NjhhNDU0NmIxYjllZWYxNmQwYjIxMmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNjQ4MTg5OSwgLTc2LjcwMjkyNTc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjYWUwZmJjNzc0NzQ2OWJiMzU2OWMwOTcyYjg3NGU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4NzZmMDQwMTExMTQ3NTg4OGJhOWMxMjc3MzRkZDlkID0gJChgPGRpdiBpZD0iaHRtbF9mODc2ZjA0MDExMTE0NzU4ODhiYTljMTI3NzM0ZGQ5ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9yZXN0IFBhcmsgU2VuaW9yIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xY2FlMGZiYzc3NDc0NjliYjM1NjljMDk3MmI4NzRlNC5zZXRDb250ZW50KGh0bWxfZjg3NmYwNDAxMTExNDc1ODg4YmE5YzEyNzczNGRkOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDQ5YjM1MDY0NjhhNDU0NmIxYjllZWYxNmQwYjIxMmYuYmluZFBvcHVwKHBvcHVwXzFjYWUwZmJjNzc0NzQ2OWJiMzU2OWMwOTcyYjg3NGU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OGNjOWU5ODQ4ZGM0MTQyODU1ZTY4NTViMzlkYTA2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwNDY1OTk3LCAtNzYuNjU1NjE4NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTMwYmY3YjY1M2E2NDI2MGJhNTE3MzEzMzNiMGQ2NWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBhMWIzMzYyNGZjNDU1ZmIxMTczYjJhNjhlZWI0MTkgPSAkKGA8ZGl2IGlkPSJodG1sX2UwYTFiMzM2MjRmYzQ1NWZiMTE3M2IyYTY4ZWViNDE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Kb25haCBob3VzZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTMwYmY3YjY1M2E2NDI2MGJhNTE3MzEzMzNiMGQ2NWYuc2V0Q29udGVudChodG1sX2UwYTFiMzM2MjRmYzQ1NWZiMTE3M2IyYTY4ZWViNDE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk4Y2M5ZTk4NDhkYzQxNDI4NTVlNjg1NWIzOWRhMDY2LmJpbmRQb3B1cChwb3B1cF9hMzBiZjdiNjUzYTY0MjYwYmE1MTczMTMzM2IwZDY1ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTVmOGM1ZjFmODAyNDI1MThmMTYxYWViYWYwYTdkZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42MzczMzkwNSwgLTc3LjcyMjQ0MDQwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1OWNhNmNiYzE1MzQ3MGE5ZTlmMzk4NDNhNTA2ZDBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3ZThiMWFhNTJiNzQwZWY4Zjg4NTM4M2Q4ZGRjZTNmID0gJChgPGRpdiBpZD0iaHRtbF9lN2U4YjFhYTUyYjc0MGVmOGY4ODUzODNkOGRkY2UzZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHkgUGxhY2UtIFNlbmlvciBMaXZpbmcgQWx0ZXJuYXRpdmVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNTljYTZjYmMxNTM0NzBhOWU5ZjM5ODQzYTUwNmQwZi5zZXRDb250ZW50KGh0bWxfZTdlOGIxYWE1MmI3NDBlZjhmODg1MzgzZDhkZGNlM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTVmOGM1ZjFmODAyNDI1MThmMTYxYWViYWYwYTdkZTguYmluZFBvcHVwKHBvcHVwX2E1OWNhNmNiYzE1MzQ3MGE5ZTlmMzk4NDNhNTA2ZDBmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZTk3Y2Y5YjdiYzI0YWQ3OGJkM2U2ZDQyZTdhNzdhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwMzU5ODc2LCAtNzYuNjcwNjc3MDk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmJkOTViZGMzY2Y0NGQyNWFiZTAwMThlMzljMjRjMjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjQ0MDhhMGFlM2RjNGM1OTg1OGQzNzhkODU2NTZkOWMgPSAkKGA8ZGl2IGlkPSJodG1sX2I0NDA4YTBhZTNkYzRjNTk4NThkMzc4ZDg1NjU2ZDljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZWxtb250IEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZiZDk1YmRjM2NmNDRkMjVhYmUwMDE4ZTM5YzI0YzI2LnNldENvbnRlbnQoaHRtbF9iNDQwOGEwYWUzZGM0YzU5ODU4ZDM3OGQ4NTY1NmQ5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZTk3Y2Y5YjdiYzI0YWQ3OGJkM2U2ZDQyZTdhNzdhNC5iaW5kUG9wdXAocG9wdXBfZmJkOTViZGMzY2Y0NGQyNWFiZTAwMThlMzljMjRjMjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3MzI2YTQ3ODQ5NTRmN2E5NmMxNzRkNDM4NTE2N2JhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTcyNjA2NDIsIC03Ni41NjMwMjUzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iM2I2MDUyNTk3OTk0ZGJhODVmZmNhOTJiMzZhYzZiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hY2U5OTY1YTJkOGM0OWZhOTM1ZDE3ZTYyMDFiOWVhNSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWNlOTk2NWEyZDhjNDlmYTkzNWQxN2U2MjAxYjllYTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFubmFwb2xpcyBIaWdoIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjNiNjA1MjU5Nzk5NGRiYTg1ZmZjYTkyYjM2YWM2YjQuc2V0Q29udGVudChodG1sX2FjZTk5NjVhMmQ4YzQ5ZmE5MzVkMTdlNjIwMWI5ZWE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3MzI2YTQ3ODQ5NTRmN2E5NmMxNzRkNDM4NTE2N2JhLmJpbmRQb3B1cChwb3B1cF9iM2I2MDUyNTk3OTk0ZGJhODVmZmNhOTJiMzZhYzZiNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWI4Y2FjZTAwOGI4NDM5NDkyNDEzMTliOWViYTNlNTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNTM2NTExOSwgLTc2LjYyMDUzNDkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwZTI0ZDA1YTUzZjRhNzZiNmZiZTlmYjM0NThkNGYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0NmJhZTE5Y2VhNzQ3M2U4M2E2NzhhMTVmNzhlZjdkID0gJChgPGRpdiBpZD0iaHRtbF9jNDZiYWUxOWNlYTc0NzNlODNhNjc4YTE1Zjc4ZWY3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3IEVyYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjBlMjRkMDVhNTNmNGE3NmI2ZmJlOWZiMzQ1OGQ0ZjIuc2V0Q29udGVudChodG1sX2M0NmJhZTE5Y2VhNzQ3M2U4M2E2NzhhMTVmNzhlZjdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzliOGNhY2UwMDhiODQzOTQ5MjQxMzE5YjllYmEzZTUyLmJpbmRQb3B1cChwb3B1cF82MGUyNGQwNWE1M2Y0YTc2YjZmYmU5ZmIzNDU4ZDRmMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzI4MjdmN2U1MWVkNDBlMzhmNjI4Njk1N2Y1ZmYwOTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDUxOTY2MiwgLTc2LjY2Mzc0NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmE0ODFlOWY5YjUxNGE0MDg3OGYzYzcwMmFmOTljMzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGJiNjgxODQ5MjcxNGMzNDkyYTk0ZmQ5YTQ4NTNjMDEgPSAkKGA8ZGl2IGlkPSJodG1sX2RiYjY4MTg0OTI3MTRjMzQ5MmE5NGZkOWE0ODUzYzAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BZ2FwZSBIb3VzZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmE0ODFlOWY5YjUxNGE0MDg3OGYzYzcwMmFmOTljMzguc2V0Q29udGVudChodG1sX2RiYjY4MTg0OTI3MTRjMzQ5MmE5NGZkOWE0ODUzYzAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMyODI3ZjdlNTFlZDQwZTM4ZjYyODY5NTdmNWZmMDkyLmJpbmRQb3B1cChwb3B1cF8yYTQ4MWU5ZjliNTE0YTQwODc4ZjNjNzAyYWY5OWMzOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2I3N2E4YTM2NjM5NDM0ZThiZmI4NGVjMjhjZWJhNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNDM1MTY5OSwgLTc2LjY2MDkwNTg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIzYmY2MGUxN2U3NDQ5YTViZTI5ZDQ1ZDZiODhjMDlkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjYzgyNTI0OWI4ODRiNzNiNGFkM2I2NTkzZTg2YjQ4ID0gJChgPGRpdiBpZD0iaHRtbF8yY2M4MjUyNDliODg0YjczYjRhZDNiNjU5M2U4NmI0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIENsZW1lbnQgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzYmY2MGUxN2U3NDQ5YTViZTI5ZDQ1ZDZiODhjMDlkLnNldENvbnRlbnQoaHRtbF8yY2M4MjUyNDliODg0YjczYjRhZDNiNjU5M2U4NmI0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYjc3YThhMzY2Mzk0MzRlOGJmYjg0ZWMyOGNlYmE3My5iaW5kUG9wdXAocG9wdXBfMjNiZjYwZTE3ZTc0NDlhNWJlMjlkNDVkNmI4OGMwOWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjOGY1OWRjYjQyZjQ2MDk5N2MyNmVmODk4ODBhYmU1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA2NDY2MjEsIC03Ni42NzIxMjYwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMDI4YzA2N2Q3ZDU0MGZlYTBmYmYzMDE3MmM0N2ZjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YmM2MTUyMDQ4MmU0MzU1YThiODgxZTMyYjBmZDUxYyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWJjNjE1MjA0ODJlNDM1NWE4Yjg4MWUzMmIwZmQ1MWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkplc3VzIFNhdmVzIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwMjhjMDY3ZDdkNTQwZmVhMGZiZjMwMTcyYzQ3ZmM5LnNldENvbnRlbnQoaHRtbF85YmM2MTUyMDQ4MmU0MzU1YThiODgxZTMyYjBmZDUxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYzhmNTlkY2I0MmY0NjA5OTdjMjZlZjg5ODgwYWJlNS5iaW5kUG9wdXAocG9wdXBfMTAyOGMwNjdkN2Q1NDBmZWEwZmJmMzAxNzJjNDdmYzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwOGQ2NmZjNmIzYzQzYmFhNDYzNmM0ZGFkZWYzNTdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMDI4NzE1OTksIC03NS44MDY3NTQ2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NmQzZGFkMGU5N2E0MGU1YTBkMTE4Njk1NzVlNDEyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTU5MDFkOWYwN2I0OTY0YjU1NWViMDkxZGZkOWY4OCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzU1OTAxZDlmMDdiNDk2NGI1NTVlYjA5MWRmZDlmODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxpdmluZyBIb3BlIE1pbmlzdHJpZXMgb2YgdGhlIEVhc3Rlcm4gU2hvcmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2ZDNkYWQwZTk3YTQwZTVhMGQxMTg2OTU3NWU0MTIzLnNldENvbnRlbnQoaHRtbF8zNTU5MDFkOWYwN2I0OTY0YjU1NWViMDkxZGZkOWY4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMDhkNjZmYzZiM2M0M2JhYTQ2MzZjNGRhZGVmMzU3Zi5iaW5kUG9wdXAocG9wdXBfNjZkM2RhZDBlOTdhNDBlNWEwZDExODY5NTc1ZTQxMjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmOGQxOTc3MTQyNzQ0OGQ4OWViZTNjMzJiNWY3MjQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzY4OTIwNTQsIC03NS42NTA4OTg1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNTBiMTg5ZDZhMWY0MjAzOWE4YTBhZTc2NTlhYWFhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MzliZGE0ZTNjNmI0ZGE1YjA4MDNiZjY3ZTkzNjgzNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjM5YmRhNGUzYzZiNGRhNWIwODAzYmY2N2U5MzY4MzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNyb3NzIFBvaW50ZSBDaHVyY2ggb2YgTmF6YXJlbmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1MGIxODlkNmExZjQyMDM5YThhMGFlNzY1OWFhYWFmLnNldENvbnRlbnQoaHRtbF82MzliZGE0ZTNjNmI0ZGE1YjA4MDNiZjY3ZTkzNjgzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZjhkMTk3NzE0Mjc0NDhkODllYmUzYzMyYjVmNzI0Mi5iaW5kUG9wdXAocG9wdXBfYTUwYjE4OWQ2YTFmNDIwMzlhOGEwYWU3NjU5YWFhYWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QyZDE2NDk1NTAwYzQ0Yzg5YzI2OTM5NWQ3YWJlZDNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTkzMDM5MzIsIC03OS4zNDQ5NDYxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YTBhMDIzZDNjYzk0NzBlYTVkZjllMTdhZWQyOTYyZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOGU2ZmFmMWU3MjA0NDQ0YjA5OWJlZGE0YmUyZTA0NSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjhlNmZhZjFlNzIwNDQ0NGIwOTliZWRhNGJlMmUwNDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhbHZhcnkgVGFiZXJuYWNsZSBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhMGEwMjNkM2NjOTQ3MGVhNWRmOWUxN2FlZDI5NjJkLnNldENvbnRlbnQoaHRtbF9iOGU2ZmFmMWU3MjA0NDQ0YjA5OWJlZGE0YmUyZTA0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMmQxNjQ5NTUwMGM0NGM4OWMyNjkzOTVkN2FiZWQzZC5iaW5kUG9wdXAocG9wdXBfNWEwYTAyM2QzY2M5NDcwZWE1ZGY5ZTE3YWVkMjk2MmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlN2I4MmQ0MTkxNTQwYTE5Y2UyMGE3MDBkNzk3Y2JhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjk1Nzk2ODUsIC03Ni44MTE1ODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1NThlM2IyNWJlODQ2YjNiMmU5MjZiMDhhNjM4Njk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5NDZhNzc2ODBlZTQ4MWRiZDFiMzA2MGRkNjdhNTM2ID0gJChgPGRpdiBpZD0iaHRtbF80OTQ2YTc3NjgwZWU0ODFkYmQxYjMwNjBkZDY3YTUzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2hhbG9tIE1pcmFjbGUgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTU4ZTNiMjViZTg0NmIzYjJlOTI2YjA4YTYzODY5OC5zZXRDb250ZW50KGh0bWxfNDk0NmE3NzY4MGVlNDgxZGJkMWIzMDYwZGQ2N2E1MzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWU3YjgyZDQxOTE1NDBhMTljZTIwYTcwMGQ3OTdjYmEuYmluZFBvcHVwKHBvcHVwXzY1NThlM2IyNWJlODQ2YjNiMmU5MjZiMDhhNjM4Njk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NDQ1YjVhZmRkZTY0NGU1OTRjNWY3YzQyNzhmYzQ4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwNzk3ODcxLCAtNzYuNjUyNTU3NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTE5NWFkOWMxNDdkNGYxNmJhMTQ2YzliZGVkZjJjYmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDEwYTFmMWE5NTFkNDJkYWExZGRkZTE1MTJjZjE1YTUgPSAkKGA8ZGl2IGlkPSJodG1sXzAxMGExZjFhOTUxZDQyZGFhMWRkZGUxNTEyY2YxNWE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GYWl0aCBIb3BlICYgQ2hhcml0eSBDaHJpc3RpYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxOTVhZDljMTQ3ZDRmMTZiYTE0NmM5YmRlZGYyY2JjLnNldENvbnRlbnQoaHRtbF8wMTBhMWYxYTk1MWQ0MmRhYTFkZGRlMTUxMmNmMTVhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NDQ1YjVhZmRkZTY0NGU1OTRjNWY3YzQyNzhmYzQ4MC5iaW5kUG9wdXAocG9wdXBfOTE5NWFkOWMxNDdkNGYxNmJhMTQ2YzliZGVkZjJjYmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxNmY2YWM4MzliNjRkNjQ5YzlkYzhmMTBjY2I4MDVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzExNzMxMTQsIC03Ni42NTcxMjU5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNTQ4NGI4ZDk4Njc0ZjM0YTJjOGU3NjU0YzgwYzI0NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NmM4MjJjYmVkYWE0OTc1OWE3NjIxZDdhMjQzYWJiOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDZjODIyY2JlZGFhNDk3NTlhNzYyMWQ3YTI0M2FiYjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbGxpYW0gUy4gQmFlciBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1NDg0YjhkOTg2NzRmMzRhMmM4ZTc2NTRjODBjMjQ1LnNldENvbnRlbnQoaHRtbF80NmM4MjJjYmVkYWE0OTc1OWE3NjIxZDdhMjQzYWJiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMTZmNmFjODM5YjY0ZDY0OWM5ZGM4ZjEwY2NiODA1YS5iaW5kUG9wdXAocG9wdXBfYzU0ODRiOGQ5ODY3NGYzNGEyYzhlNzY1NGM4MGMyNDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjOWQ1MDQ1ZTIzZjQ3YmQ4NWY4MTM1ZDc5NGUxZTYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzEyMTU5NDYsIC03Ni42NzU0NjI1OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTViZTFiNDVhZTQ0MjgwODRkMmRkZmQ0ZWNiYWE0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOWE1Y2VlZDgyZjI0OGVmODdkMTIyODczNDk4ZjI0OSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTlhNWNlZWQ4MmYyNDhlZjg3ZDEyMjg3MzQ5OGYyNDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk10LiBNb3JpYWggQkM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5NWJlMWI0NWFlNDQyODA4NGQyZGRmZDRlY2JhYTQ5LnNldENvbnRlbnQoaHRtbF9lOWE1Y2VlZDgyZjI0OGVmODdkMTIyODczNDk4ZjI0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYzlkNTA0NWUyM2Y0N2JkODVmODEzNWQ3OTRlMWU2Mi5iaW5kUG9wdXAocG9wdXBfZTk1YmUxYjQ1YWU0NDI4MDg0ZDJkZGZkNGVjYmFhNDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwNmM3MjQzODMyODQwNmViMDBhZmJjZTQzODE0MTE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTA3NjEzMzUsIC03NS44MzEwMjAxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzE5N2EwODk0ZGU0NGE0YjQxZTAzMjRmNDQ2NzQ3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZjMyYmRmYWViOTE0MTVmOGMyYmRkNjViYWMzZGU3NiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmYzMmJkZmFlYjkxNDE1ZjhjMmJkZDY1YmFjM2RlNzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoZXNhcGVha2UgQ2l0eSBFY3VtZW5pY2FsIEFzYzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2MxOTdhMDg5NGRlNDRhNGI0MWUwMzI0ZjQ0Njc0NzIuc2V0Q29udGVudChodG1sX2ZmMzJiZGZhZWI5MTQxNWY4YzJiZGQ2NWJhYzNkZTc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwNmM3MjQzODMyODQwNmViMDBhZmJjZTQzODE0MTE3LmJpbmRQb3B1cChwb3B1cF8zYzE5N2EwODk0ZGU0NGE0YjQxZTAzMjRmNDQ2NzQ3MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjUwMmM3MDhkMjNlNGQ4YmIxMWNhYzVhZmQ3YjhhY2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMTMwNDc3OSwgLTc2LjY2MDM5NzkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0OTIxYTdlZjM5YzRiMzE4YzYzN2NkMDZlZTg1OWZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5ZTk4NjM0MTcyZTQzMDM4MzM4ZGY2YmI4MTg1M2ZiID0gJChgPGRpdiBpZD0iaHRtbF9hOWU5ODYzNDE3MmU0MzAzODMzOGRmNmJiODE4NTNmYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHJ1ZSBXYXkgQ2h1cmNoIG9mIEdvZCBGL1A8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0OTIxYTdlZjM5YzRiMzE4YzYzN2NkMDZlZTg1OWZkLnNldENvbnRlbnQoaHRtbF9hOWU5ODYzNDE3MmU0MzAzODMzOGRmNmJiODE4NTNmYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNTAyYzcwOGQyM2U0ZDhiYjExY2FjNWFmZDdiOGFjZC5iaW5kUG9wdXAocG9wdXBfMjQ5MjFhN2VmMzljNGIzMThjNjM3Y2QwNmVlODU5ZmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FhOTViZWMxZjkzOTRlNmE5NzFkM2U0YzcxMmI3ZTI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzg0NzQyMTYsIC03NS42MjQ4Mzg4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzYxZGI2NzJhNzM0NDNjYjRlNjdiZmQ2YjJiZDE3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yY2EyZTIxMjAzZDk0NzhmOGRhOWUzMjMwOWRhZWNkOSA9ICQoYDxkaXYgaWQ9Imh0bWxfMmNhMmUyMTIwM2Q5NDc4ZjhkYTllMzIzMDlkYWVjZDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNhbGlzYnVyeSBFbWVyZ2VuY3kgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzYxZGI2NzJhNzM0NDNjYjRlNjdiZmQ2YjJiZDE3OS5zZXRDb250ZW50KGh0bWxfMmNhMmUyMTIwM2Q5NDc4ZjhkYTllMzIzMDlkYWVjZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWE5NWJlYzFmOTM5NGU2YTk3MWQzZTRjNzEyYjdlMjYuYmluZFBvcHVwKHBvcHVwXzNjNjFkYjY3MmE3MzQ0M2NiNGU2N2JmZDZiMmJkMTc5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80N2E3ZTBiNWU3NzY0NzIyOTAzYjMyODIzM2U0ZWQ5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljc4OTY5MDk0LCAtNzYuMDgwODkzOTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjM1OGM1NjVmNDYzNGI3MDk2YmJkNGE5YzdlYzg3MjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDNlYWQwMDdkYjAxNGNhNThhOTE3Yjg1OWM2N2YxNzQgPSAkKGA8ZGl2IGlkPSJodG1sXzAzZWFkMDA3ZGIwMTRjYTU4YTkxN2I4NTljNjdmMTc0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0b24gRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzNThjNTY1ZjQ2MzRiNzA5NmJiZDRhOWM3ZWM4NzIyLnNldENvbnRlbnQoaHRtbF8wM2VhZDAwN2RiMDE0Y2E1OGE5MTdiODU5YzY3ZjE3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80N2E3ZTBiNWU3NzY0NzIyOTAzYjMyODIzM2U0ZWQ5ZC5iaW5kUG9wdXAocG9wdXBfZjM1OGM1NjVmNDYzNGI3MDk2YmJkNGE5YzdlYzg3MjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2ODkzNzYyNTNmMjQzYmM5OGU5OGNhY2FiMTg3MTg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMDQwMjU0NDIsIC03NS43NTg5NDIzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZmIxMTFiZWRlODM0ZjFlODFjN2NhZDc4ZDA4OTM3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzhmNjM4MTczMDc0ODIwYTJkNDJmZDEzNzhkN2U1NiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDc4ZjYzODE3MzA3NDgyMGEyZDQyZmQxMzc4ZDdlNTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcmlvbiBTYXJhaCBQZXl0b24gU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZmIxMTFiZWRlODM0ZjFlODFjN2NhZDc4ZDA4OTM3ZC5zZXRDb250ZW50KGh0bWxfNDc4ZjYzODE3MzA3NDgyMGEyZDQyZmQxMzc4ZDdlNTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzY4OTM3NjI1M2YyNDNiYzk4ZTk4Y2FjYWIxODcxODYuYmluZFBvcHVwKHBvcHVwX2VmYjExMWJlZGU4MzRmMWU4MWM3Y2FkNzhkMDg5MzdkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ODEwOWFiZGUxODc0NjNlYjUyNDc1OGFiZmI4NzY0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY5ODA4MzQ1LCAtNzguMTk1MzYyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84M2I1MjQwMTZhYjc0Y2I4OWVjY2IyZGY4NmFlNmExMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMmRlYjIxNTFlZWY0YWIwOGU2ZmYxNTdmY2UzYmNmNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDJkZWIyMTUxZWVmNGFiMDhlNmZmMTU3ZmNlM2JjZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhbmNvY2sgTWlkZGxlIFNlbmlvciBIaWdoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84M2I1MjQwMTZhYjc0Y2I4OWVjY2IyZGY4NmFlNmExMS5zZXRDb250ZW50KGh0bWxfZDJkZWIyMTUxZWVmNGFiMDhlNmZmMTU3ZmNlM2JjZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjgxMDlhYmRlMTg3NDYzZWI1MjQ3NThhYmZiODc2NGEuYmluZFBvcHVwKHBvcHVwXzgzYjUyNDAxNmFiNzRjYjg5ZWNjYjJkZjg2YWU2YTExKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZmY0NGQ0N2UzZDI0MGQ2OGM3NjliNDQzMmIzMjliZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxMjMyMzQ3LCAtNzYuNjU2MDgwMzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODg1NjNlNmJjZjY3NGE1Y2IwMTA0MTNlYjhiNGRhZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjhiODhiYjU4YzU4NGVjYjk2N2UzYzcyNDMzN2E2Y2QgPSAkKGA8ZGl2IGlkPSJodG1sX2Y4Yjg4YmI1OGM1ODRlY2I5NjdlM2M3MjQzMzdhNmNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Sb2JlcnQgVy4gQ29sZW1hbiBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODU2M2U2YmNmNjc0YTVjYjAxMDQxM2ViOGI0ZGFlZS5zZXRDb250ZW50KGh0bWxfZjhiODhiYjU4YzU4NGVjYjk2N2UzYzcyNDMzN2E2Y2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGZmNDRkNDdlM2QyNDBkNjhjNzY5YjQ0MzJiMzI5YmYuYmluZFBvcHVwKHBvcHVwXzg4NTYzZTZiY2Y2NzRhNWNiMDEwNDEzZWI4YjRkYWVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83M2I0ZjJjNGYxYTY0ZWMwOTBhM2YzMDkzYmU2YzQxYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwOTQ3MzQ4LCAtNzYuNjU3MTk0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTc5ZGQ5NjBlMGI0OTJjOThhNTcwYTQ0MTU1MTc3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NmE4MDZhNDFjMTc0NjljYWIyYjBmZmE3ZTdhNjFjOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzZhODA2YTQxYzE3NDY5Y2FiMmIwZmZhN2U3YTYxYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvcHBpbiBTdGF0ZSBVbml2ZXJzaXR5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTc5ZGQ5NjBlMGI0OTJjOThhNTcwYTQ0MTU1MTc3Yy5zZXRDb250ZW50KGh0bWxfNzZhODA2YTQxYzE3NDY5Y2FiMmIwZmZhN2U3YTYxYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzNiNGYyYzRmMWE2NGVjMDkwYTNmMzA5M2JlNmM0MWIuYmluZFBvcHVwKHBvcHVwXzExNzlkZDk2MGUwYjQ5MmM5OGE1NzBhNDQxNTUxNzdjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hODAzZWI2M2IxN2Y0NmFhODYwYWNlYjk5NmRlOTFjNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljc3Njk2OTQ4LCAtNzYuMDUyNzQxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZTk1YjZlMzlmZTA0NjZlYmQ4MGRiODk0ODQ1NzJmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZGI5YjhjYWFjNzA0YWI1YWFjNzNiOTMyZDI4MzgxOCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2RiOWI4Y2FhYzcwNGFiNWFhYzczYjkzMmQyODM4MTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvY2lldHkgb2YgU3QgVmluY2VudCBEZSBQYXVsPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZTk1YjZlMzlmZTA0NjZlYmQ4MGRiODk0ODQ1NzJmYS5zZXRDb250ZW50KGh0bWxfN2RiOWI4Y2FhYzcwNGFiNWFhYzczYjkzMmQyODM4MTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTgwM2ViNjNiMTdmNDZhYTg2MGFjZWI5OTZkZTkxYzUuYmluZFBvcHVwKHBvcHVwX2JlOTViNmUzOWZlMDQ2NmViZDgwZGI4OTQ4NDU3MmZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OTE0Mzc1ZTliZjQ0OWQ5ODI3NWEzMjcxNmNhYjE4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU5OTE0NTQ5LCAtNzcuODE5NzQyNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWQ5MTFmNDc5N2FhNGY1ZWIwMzQ3MDI1MzdlNzY2MTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWI1OTBhYjg1NjhiNDNhZWFmY2I4OTM5NTkwNzNkMDAgPSAkKGA8ZGl2IGlkPSJodG1sXzFiNTkwYWI4NTY4YjQzYWVhZmNiODkzOTU5MDczZDAwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb25yaXNlIENhZmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFkOTExZjQ3OTdhYTRmNWViMDM0NzAyNTM3ZTc2NjE4LnNldENvbnRlbnQoaHRtbF8xYjU5MGFiODU2OGI0M2FlYWZjYjg5Mzk1OTA3M2QwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OTE0Mzc1ZTliZjQ0OWQ5ODI3NWEzMjcxNmNhYjE4ZC5iaW5kUG9wdXAocG9wdXBfMWQ5MTFmNDc5N2FhNGY1ZWIwMzQ3MDI1MzdlNzY2MTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdjZTVjYTZlM2ExNzQ1OWU4YWY1MTc4MzlkY2ZiOTk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzQ3ODc4NTEsIC03NS41OTUwODE0OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDEzNWVlYTA5ZTI0ZWY2OTBkZmU5OWM3ODhiNGJmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NGNmMjI4ZjFlOTU0MjhmYjNlMWQ1OWYyNWFjOGU5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTRjZjIyOGYxZTk1NDI4ZmIzZTFkNTlmMjVhYzhlOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkphbWVzIE0uIEJlbm5ldHQgSGlnaCBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwMTM1ZWVhMDllMjRlZjY5MGRmZTk5Yzc4OGI0YmY0LnNldENvbnRlbnQoaHRtbF81NGNmMjI4ZjFlOTU0MjhmYjNlMWQ1OWYyNWFjOGU5MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83Y2U1Y2E2ZTNhMTc0NTllOGFmNTE3ODM5ZGNmYjk5NS5iaW5kUG9wdXAocG9wdXBfZjAxMzVlZWEwOWUyNGVmNjkwZGZlOTljNzg4YjRiZjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3NjdhMGUwYWFhOTRhYmFhMTAxOTMyMTYyNjRmOGM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTg2Nzg4NzcsIC03Ni45ODQ3NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTNiM2U1YjhhOGJkNDM3YmI1MTRiZjBkNjkwODlmY2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI3NmM2Mzk2OTFjNDgwOWIzZjdiMDM4Nzc3MTUyMTQgPSAkKGA8ZGl2IGlkPSJodG1sXzYyNzZjNjM5NjkxYzQ4MDliM2Y3YjAzODc3NzE1MjE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXJyb2xsIENvLiBTYWx2YXRpb24gQXJteTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTNiM2U1YjhhOGJkNDM3YmI1MTRiZjBkNjkwODlmY2Uuc2V0Q29udGVudChodG1sXzYyNzZjNjM5NjkxYzQ4MDliM2Y3YjAzODc3NzE1MjE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y3NjdhMGUwYWFhOTRhYmFhMTAxOTMyMTYyNjRmOGM0LmJpbmRQb3B1cChwb3B1cF85M2IzZTViOGE4YmQ0MzdiYjUxNGJmMGQ2OTA4OWZjZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmU5OGVhMWI5NTI4NGM4YThiOGNiNjVmN2FiN2RlY2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xODMzNjM2NCwgLTc1Ljg1ODE5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83N2Y0NDA2ZjdiMzY0MjBiYWY1MWMxMWFlYjkxYjQ3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDkzYjZkMDJmYmE0N2JjODU4N2E5NGM0OWE0NTVjYiA9ICQoYDxkaXYgaWQ9Imh0bWxfODQ5M2I2ZDAyZmJhNDdiYzg1ODdhOTRjNDlhNDU1Y2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN1ZGxlcnN2aWxsZSBFbGVtZW50YXJ5IFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzdmNDQwNmY3YjM2NDIwYmFmNTFjMTFhZWI5MWI0N2Yuc2V0Q29udGVudChodG1sXzg0OTNiNmQwMmZiYTQ3YmM4NTg3YTk0YzQ5YTQ1NWNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlOThlYTFiOTUyODRjOGE4YjhjYjY1ZjdhYjdkZWNiLmJpbmRQb3B1cChwb3B1cF83N2Y0NDA2ZjdiMzY0MjBiYWY1MWMxMWFlYjkxYjQ3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmY5ZWUxNjQxNzQ5NGU4NzgzMjllMTI4MGI0MjkwMjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41MzYxNTkyNSwgLTc2LjA5OTY5MDU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdiNzkxZWNhOWIwYzRkMDM5NTRmNTM1NTVlZDBjMjI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiMTdiNzJhNGRmYTQ1OWY4MDliZjQ2ZGZmMTVmYzRmID0gJChgPGRpdiBpZD0iaHRtbF9iYjE3YjcyYTRkZmE0NTlmODA5YmY0NmRmZjE1ZmM0ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2FsdmF0aW9uIEFybXkgb2YgSGFyZm9yZCBDTy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiNzkxZWNhOWIwYzRkMDM5NTRmNTM1NTVlZDBjMjI2LnNldENvbnRlbnQoaHRtbF9iYjE3YjcyYTRkZmE0NTlmODA5YmY0NmRmZjE1ZmM0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZjllZTE2NDE3NDk0ZTg3ODMyOWUxMjgwYjQyOTAyMS5iaW5kUG9wdXAocG9wdXBfN2I3OTFlY2E5YjBjNGQwMzk1NGY1MzU1NWVkMGMyMjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxNmIyNTk0ZTdmYTQwNTQ4NzdiOTYyNGJmNzUwOGE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzAxNDgwOTMsIC03Ny4zMjgyMjMwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMGI2YWIwZmI2Y2Y0ZWRlODY3ZTZmMjllZTYxMTA0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDQ0MmM3NjZmNDI0MDg0YTZmNmEwZjNjMDAwN2I1MSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDQ0NDJjNzY2ZjQyNDA4NGE2ZjZhMGYzYzAwMDdiNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVtbWl0c2J1cmcgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjBiNmFiMGZiNmNmNGVkZTg2N2U2ZjI5ZWU2MTEwNDEuc2V0Q29udGVudChodG1sXzQ0NDQyYzc2NmY0MjQwODRhNmY2YTBmM2MwMDA3YjUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxNmIyNTk0ZTdmYTQwNTQ4NzdiOTYyNGJmNzUwOGE3LmJpbmRQb3B1cChwb3B1cF8yMGI2YWIwZmI2Y2Y0ZWRlODY3ZTZmMjllZTYxMTA0MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjBjYjNiNDkyZmU0NDkyYThlOTI3OTYzMTkxYWYwMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDkyODc1NSwgLTc2LjY2MDUxMTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhMmIzMjIzZDU3ZDQ4ZTFiZjM3NTg1ZWQwZDVhNDdlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjNWNiNTE5ZmNmYTQyODQ5MTJiMDI5YzZkOWI4YjgyID0gJChgPGRpdiBpZD0iaHRtbF8yYzVjYjUxOWZjZmE0Mjg0OTEyYjAyOWM2ZDliOGI4MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TXQuIEhlYnJvbiBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWEyYjMyMjNkNTdkNDhlMWJmMzc1ODVlZDBkNWE0N2Uuc2V0Q29udGVudChodG1sXzJjNWNiNTE5ZmNmYTQyODQ5MTJiMDI5YzZkOWI4YjgyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IwY2IzYjQ5MmZlNDQ5MmE4ZTkyNzk2MzE5MWFmMDA1LmJpbmRQb3B1cChwb3B1cF85YTJiMzIyM2Q1N2Q0OGUxYmYzNzU4NWVkMGQ1YTQ3ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODY2MDA5MzEzZDUyNDU2Yzg0YzM0NDYyYWNkODEwYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDU4MTg1LCAtNzYuNjY4MjQyMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDE0MTc2ZTFiODk2NDFiNjlmMDAxNThjZjAyMDQxN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTZlOWNkMzAwMThmNDQ0YWIxMTkwZGU0MTBkMDE2ZmMgPSAkKGA8ZGl2IGlkPSJodG1sXzE2ZTljZDMwMDE4ZjQ0NGFiMTE5MGRlNDEwZDAxNmZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaGl0ZXN0b25lIEJhcHRpc3QgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxNDE3NmUxYjg5NjQxYjY5ZjAwMTU4Y2YwMjA0MTdjLnNldENvbnRlbnQoaHRtbF8xNmU5Y2QzMDAxOGY0NDRhYjExOTBkZTQxMGQwMTZmYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NjYwMDkzMTNkNTI0NTZjODRjMzQ0NjJhY2Q4MTBiNi5iaW5kUG9wdXAocG9wdXBfMDE0MTc2ZTFiODk2NDFiNjlmMDAxNThjZjAyMDQxN2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmMTAxYTU5MTRjMzRiYmE4Mzg5ZmE1NDJkMGExZGZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNjMwMDMyMjEsIC03NS44NjMwMzk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84M2IwZGJlMmRlNWQ0MmZkODIyNWM5MmFmYzJiYmI5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGQ0Y2FmMDU1OWU0ZTI2OTYwZjE0NjMwMmI0MTBmZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDhkNGNhZjA1NTllNGUyNjk2MGYxNDYzMDJiNDEwZmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1cmxvY2sgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzYjBkYmUyZGU1ZDQyZmQ4MjI1YzkyYWZjMmJiYjkwLnNldENvbnRlbnQoaHRtbF80OGQ0Y2FmMDU1OWU0ZTI2OTYwZjE0NjMwMmI0MTBmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZjEwMWE1OTE0YzM0YmJhODM4OWZhNTQyZDBhMWRmYi5iaW5kUG9wdXAocG9wdXBfODNiMGRiZTJkZTVkNDJmZDgyMjVjOTJhZmMyYmJiOTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjNjNjN2NiZDA1MjQ5ZWE4Y2Q2OTM0YTU2OGM0OWZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjUzNjc0NjUsIC03OC43Njk4NTkwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YzllYmVhNWUxYmM0MGJiYTY1Y2IyOTEyNTliZGZmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMzRmYzg5MTJkZTU0Yzk5OWI0MzRlMzVmOTFhMmQwMyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTM0ZmM4OTEyZGU1NGM5OTliNDM0ZTM1ZjkxYTJkMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkludGVyZmFpdGggQ29tbXVuaXR5IFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM5ZWJlYTVlMWJjNDBiYmE2NWNiMjkxMjU5YmRmZjguc2V0Q29udGVudChodG1sX2EzNGZjODkxMmRlNTRjOTk5YjQzNGUzNWY5MWEyZDAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBjNjNjN2NiZDA1MjQ5ZWE4Y2Q2OTM0YTU2OGM0OWZjLmJpbmRQb3B1cChwb3B1cF85YzllYmVhNWUxYmM0MGJiYTY1Y2IyOTEyNTliZGZmOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk1MjFhZDUyMDMyNDQ0NGE5NmYxNDdhZmY0ZjdiYzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNDgwNjY5MiwgLTc2LjA2OTQ0ODQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxNGEyYWY4N2ZhMjRkNmNhNTJmNjE2NTBjMTc3YjMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1Y2YyNTI0MDhiYzQzODFhYzQ1NmRkMTlkNGE5NzNmID0gJChgPGRpdiBpZD0iaHRtbF9iNWNmMjUyNDA4YmM0MzgxYWM0NTZkZDE5ZDRhOTczZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T3VyIE1vdGhlciBvZiBTb3Jyb3dzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTRhMmFmODdmYTI0ZDZjYTUyZjYxNjUwYzE3N2IzMy5zZXRDb250ZW50KGh0bWxfYjVjZjI1MjQwOGJjNDM4MWFjNDU2ZGQxOWQ0YTk3M2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTk1MjFhZDUyMDMyNDQ0NGE5NmYxNDdhZmY0ZjdiYzMuYmluZFBvcHVwKHBvcHVwXzAxNGEyYWY4N2ZhMjRkNmNhNTJmNjE2NTBjMTc3YjMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNWI2OWVhNmIxOWI0ODgzYjVlNDU0N2VlZmFhZWNmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxMDA0NDUwMDAwMDAwNCwgLTc2LjY3MTMxNTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhMjUyNTVlMTE0NzQ4ZjZhYzQyMWY4YmMxZWQ3MGFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhMDE5MDhmZmQ5ZTQyZGZiMTZmNzk5NTk2ZDk3NzRkID0gJChgPGRpdiBpZD0iaHRtbF9kYTAxOTA4ZmZkOWU0MmRmYjE2Zjc5OTU5NmQ5Nzc0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHJpbml0eSBQcmVzYnl0ZXJpYW4gQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTI1MjU1ZTExNDc0OGY2YWM0MjFmOGJjMWVkNzBhZS5zZXRDb250ZW50KGh0bWxfZGEwMTkwOGZmZDllNDJkZmIxNmY3OTk1OTZkOTc3NGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDViNjllYTZiMTliNDg4M2I1ZTQ1NDdlZWZhYWVjZmEuYmluZFBvcHVwKHBvcHVwXzJhMjUyNTVlMTE0NzQ4ZjZhYzQyMWY4YmMxZWQ3MGFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjNmYmJiOTIyMGQ0YzBiYTE3NGUzYWE1OGVmZTU5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxOTM2NzU1LCAtNzYuNjczODMxMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTdlZGM1M2M5M2JiNDgxMTk1MjRiNWVkNTRjNDJhN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTQzNDYyOWIwNDIxNDJjYjhjMGJmODc2NGQ0NWM5YWEgPSAkKGA8ZGl2IGlkPSJodG1sXzk0MzQ2MjliMDQyMTQyY2I4YzBiZjg3NjRkNDVjOWFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IaWx0b24gRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3ZWRjNTNjOTNiYjQ4MTE5NTI0YjVlZDU0YzQyYTdjLnNldENvbnRlbnQoaHRtbF85NDM0NjI5YjA0MjE0MmNiOGMwYmY4NzY0ZDQ1YzlhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMjNmYmJiOTIyMGQ0YzBiYTE3NGUzYWE1OGVmZTU5MS5iaW5kUG9wdXAocG9wdXBfNTdlZGM1M2M5M2JiNDgxMTk1MjRiNWVkNTRjNDJhN2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIyNDA1NzYwMjk4YTQ2MTY5ZjZhOWUzNjVmMTRmYjI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDQ0MDUyMDksIC03Ny41NDg4NzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZTdkNGY2MDllYmU0YzE3OGI4M2QwNmE4ZjNmMjNhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jY2IzMmJiYzZhYmY0MWU1ODk1ZDc0MmYyODllNGE4ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2NiMzJiYmM2YWJmNDFlNTg5NWQ3NDJmMjg5ZTRhOGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pZGRsZXRvd24gRm9vZCBCYW5rPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZTdkNGY2MDllYmU0YzE3OGI4M2QwNmE4ZjNmMjNhZi5zZXRDb250ZW50KGh0bWxfY2NiMzJiYmM2YWJmNDFlNTg5NWQ3NDJmMjg5ZTRhOGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjI0MDU3NjAyOThhNDYxNjlmNmE5ZTM2NWYxNGZiMjguYmluZFBvcHVwKHBvcHVwX2VlN2Q0ZjYwOWViZTRjMTc4YjgzZDA2YThmM2YyM2FmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZjRmNGYyNjZiYzQ0YzUyYWI5ZWM5YjRkMWQxMDU0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjY4OTY1NTc3LCAtNzUuNzgwMDc4NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjU0MGQzYTdjODg1NDJmMzk1MjgyYmJlY2I1OTc3MzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDVlY2MwMTUyN2FhNDI2NTg1YzA1MmQxNTBhMzdhNmIgPSAkKGA8ZGl2IGlkPSJodG1sXzQ1ZWNjMDE1MjdhYTQyNjU4NWMwNTJkMTUwYTM3YTZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GZWRlcmFsc2J1cmcgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1NDBkM2E3Yzg4NTQyZjM5NTI4MmJiZWNiNTk3NzM5LnNldENvbnRlbnQoaHRtbF80NWVjYzAxNTI3YWE0MjY1ODVjMDUyZDE1MGEzN2E2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZjRmNGYyNjZiYzQ0YzUyYWI5ZWM5YjRkMWQxMDU0YS5iaW5kUG9wdXAocG9wdXBfYjU0MGQzYTdjODg1NDJmMzk1MjgyYmJlY2I1OTc3MzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhMzVhMmFhY2QyMDQxNTc5ZmZlYzYzMTU0ZjllOTk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNjMxMTk0OTIsIC03NS44NjE5MjU3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YjljOTRjNTc0MTY0MmM4YjBjY2M1MTY4ZWNhYzE1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTA4OGMzYWQ2ZDM0ODJiOGY0NTQ2ODAxYzY3MDI1MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWUwODhjM2FkNmQzNDgyYjhmNDU0NjgwMWM2NzAyNTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vdmVhYmxlIEZlYXN0L0h1cmxvY2s8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViOWM5NGM1NzQxNjQyYzhiMGNjYzUxNjhlY2FjMTViLnNldENvbnRlbnQoaHRtbF8xZTA4OGMzYWQ2ZDM0ODJiOGY0NTQ2ODAxYzY3MDI1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YTM1YTJhYWNkMjA0MTU3OWZmZWM2MzE1NGY5ZTk5Ni5iaW5kUG9wdXAocG9wdXBfNWI5Yzk0YzU3NDE2NDJjOGIwY2NjNTE2OGVjYWMxNWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3ZTVlZGQ1NjRhYzQ1MTk4YmM3ZDAwYjdjNDlhNzI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNjMxMTk0OTIsIC03NS44NjE5MjU3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNzg0ZWI3OTk0M2M0OTY1YWIxMTc5OGE4YzQyMmUxYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZTQ5NmIzMTBjMTI0NDYzYmUxYzJlMzdhMmY0NzIyYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNGU0OTZiMzEwYzEyNDQ2M2JlMWMyZTM3YTJmNDcyMmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBBbmRyZXcncyBFcGlzY29wYWwgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNzg0ZWI3OTk0M2M0OTY1YWIxMTc5OGE4YzQyMmUxYS5zZXRDb250ZW50KGh0bWxfNGU0OTZiMzEwYzEyNDQ2M2JlMWMyZTM3YTJmNDcyMmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjdlNWVkZDU2NGFjNDUxOThiYzdkMDBiN2M0OWE3MjYuYmluZFBvcHVwKHBvcHVwXzM3ODRlYjc5OTQzYzQ5NjVhYjExNzk4YThjNDIyZTFhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NWRmYWM0YjBkMjA0ZmNiYjM1NWVhZjI1M2NhODg5NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU2MDUzMjksIC03Ni4wNzEzNDc0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYzc5NDIzMTFlYWY0NzBlODg4NjJiODNhMGRkYzIxOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjcwZTE3YWRhMjQ0MzY4YTQ4OGEzOWU2ZTE0ODQ1ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTI3MGUxN2FkYTI0NDM2OGE0ODhhMzllNmUxNDg0NWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBWaWN0b3J5IENvbW11bml0eSAxMDA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjNzk0MjMxMWVhZjQ3MGU4ODg2MmI4M2EwZGRjMjE4LnNldENvbnRlbnQoaHRtbF85MjcwZTE3YWRhMjQ0MzY4YTQ4OGEzOWU2ZTE0ODQ1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NWRmYWM0YjBkMjA0ZmNiYjM1NWVhZjI1M2NhODg5NS5iaW5kUG9wdXAocG9wdXBfZGM3OTQyMzExZWFmNDcwZTg4ODYyYjgzYTBkZGMyMTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwODQyNTMxNjllZTQxNjNhYzZlNTIxMDMyOTIwOWYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjEzNDYxNTYsIC03Ni4wNjM1NTA1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTk2OTA2NGJkOGI0ZWQ4YTQ4NGVmYWI4YzJjYWM2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOWJjMTJiZjkzNmM0YTFhOGZjNGQ5MTdlYzY5NTczZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDliYzEyYmY5MzZjNGExYThmYzRkOTE3ZWM2OTU3M2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoZXN0ZXJ0b3duIFNldmVudGggRGF5IEFkdmVudGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxOTY5MDY0YmQ4YjRlZDhhNDg0ZWZhYjhjMmNhYzZlLnNldENvbnRlbnQoaHRtbF8wOWJjMTJiZjkzNmM0YTFhOGZjNGQ5MTdlYzY5NTczZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MDg0MjUzMTY5ZWU0MTYzYWM2ZTUyMTAzMjkyMDlmMi5iaW5kUG9wdXAocG9wdXBfZDE5NjkwNjRiZDhiNGVkOGE0ODRlZmFiOGMyY2FjNmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlM2JlYTU5ODU2ZDQ2YzA5NmNmMmM1N2IzMjk2YmJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMjA0MjU5NzcsIC03NS42OTI5NjgzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMGE5MThlYTNkMTk0NGY2ODc3NzE5OWFkYWY1MGJkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MDJjNmYyYmM2N2I0ZDBhOTE1ZmZiMjc2YmE2MzM4NyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzAyYzZmMmJjNjdiNGQwYTkxNWZmYjI3NmJhNjMzODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhpZ2hlciBDYWxsaW5nIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwYTkxOGVhM2QxOTQ0ZjY4Nzc3MTk5YWRhZjUwYmQ0LnNldENvbnRlbnQoaHRtbF83MDJjNmYyYmM2N2I0ZDBhOTE1ZmZiMjc2YmE2MzM4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZTNiZWE1OTg1NmQ0NmMwOTZjZjJjNTdiMzI5NmJiZi5iaW5kUG9wdXAocG9wdXBfMjBhOTE4ZWEzZDE5NDRmNjg3NzcxOTlhZGFmNTBiZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlNTYwMzNjODI5NzRjODFiMDAzOWM4MTgyZGM3NjJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMTk4OTk3MTgsIC03NS42ODk1NTgwOTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MWViYmI4OTkyMTE0YmRiYmMxZjVhNDI2Zjg5OTNkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNTY4ZDQwMDZiMDk0YjgyOGZiNDg0NjkzODYwMGQ4MCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDU2OGQ0MDA2YjA5NGI4MjhmYjQ4NDY5Mzg2MDBkODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdGhvbGljIENoYXJpdGllcy1TZXRvbiBDbnRyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MWViYmI4OTkyMTE0YmRiYmMxZjVhNDI2Zjg5OTNkZS5zZXRDb250ZW50KGh0bWxfZDU2OGQ0MDA2YjA5NGI4MjhmYjQ4NDY5Mzg2MDBkODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGU1NjAzM2M4Mjk3NGM4MWIwMDM5YzgxODJkYzc2MmQuYmluZFBvcHVwKHBvcHVwXzYxZWJiYjg5OTIxMTRiZGJiYzFmNWE0MjZmODk5M2RlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YmVlNGY1NWMzMDU0MzlkYmNlZThiY2M5YmNlNzU2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjE5OTQxNzA1LCAtNzUuNjg3NjE1NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGJlYzU4YTVmODY0NDFlZGI0NzU0NmY4YmExMmI5ZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmMzYjNiNWQxZWRhNDVhNmJjZjY5MmVmMmY4NzFiYjYgPSAkKGA8ZGl2IGlkPSJodG1sX2ZjM2IzYjVkMWVkYTQ1YTZiY2Y2OTJlZjJmODcxYmI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NdC4gQ2FybWVsIEJhcHRpc3QtUEFOVFJZPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYmVjNThhNWY4NjQ0MWVkYjQ3NTQ2ZjhiYTEyYjllZS5zZXRDb250ZW50KGh0bWxfZmMzYjNiNWQxZWRhNDVhNmJjZjY5MmVmMmY4NzFiYjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWJlZTRmNTVjMzA1NDM5ZGJjZWU4YmNjOWJjZTc1NjkuYmluZFBvcHVwKHBvcHVwXzBiZWM1OGE1Zjg2NDQxZWRiNDc1NDZmOGJhMTJiOWVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOTlkOTk3MjEyMjY0ZDAwOTA4MzczNzRmOTBlMzA0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQ2MjAwNTkyLCAtNzYuODI4MTE2NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2FjMDUxMDAyMWYxNDVmYTkyYmNhZmQ3OGUzYjRmZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGY2MGI1OTg3Y2M0NDQ0Yzk0MTEwODUwZGE1OWM3YTYgPSAkKGA8ZGl2IGlkPSJodG1sXzRmNjBiNTk4N2NjNDQ0NGM5NDExMDg1MGRhNTljN2E2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SZWlzdGVyc3Rvd24gVU1DPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYWMwNTEwMDIxZjE0NWZhOTJiY2FmZDc4ZTNiNGZmNS5zZXRDb250ZW50KGh0bWxfNGY2MGI1OTg3Y2M0NDQ0Yzk0MTEwODUwZGE1OWM3YTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDk5ZDk5NzIxMjI2NGQwMDkwODM3Mzc0ZjkwZTMwNGQuYmluZFBvcHVwKHBvcHVwXzNhYzA1MTAwMjFmMTQ1ZmE5MmJjYWZkNzhlM2I0ZmY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNjI2MjUyOWQzOGE0OWJiYTQyYzc0YjhkN2EwOGVhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI2MzYwNzIyLCAtNzYuNzE2NTM3MzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTI5ZGRmNGFhZjcwNDM0ZjgwYjc1ZGNjZGY2ZjY3OWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTdmM2E1NGFmOTA1NDRjMWI5ZWQzOTc1NWZhYmUyNjIgPSAkKGA8ZGl2IGlkPSJodG1sX2E3ZjNhNTRhZjkwNTQ0YzFiOWVkMzk3NTVmYWJlMjYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0c2lkZSBNZW4gUmVzb3VyY2UgQ2VudGVyLUNBTjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTI5ZGRmNGFhZjcwNDM0ZjgwYjc1ZGNjZGY2ZjY3OWUuc2V0Q29udGVudChodG1sX2E3ZjNhNTRhZjkwNTQ0YzFiOWVkMzk3NTVmYWJlMjYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM2MjYyNTI5ZDM4YTQ5YmJhNDJjNzRiOGQ3YTA4ZWFlLmJpbmRQb3B1cChwb3B1cF8xMjlkZGY0YWFmNzA0MzRmODBiNzVkY2NkZjZmNjc5ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzM0MTU5NzQ1NjhiNDM0ZGIyNGNhNmVhYWNlYTAzOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMTY4NDM3MiwgLTc2LjY4MzEwMTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NkMGM2MWQzODhlMjQ3ZmFiYzE0MmMxMmEwZDYwZTQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiOTQ0YmIyZjhmMjQ3MTJhNGRlZjAwOWNmMzkwM2QyID0gJChgPGRpdiBpZD0iaHRtbF8wYjk0NGJiMmY4ZjI0NzEyYTRkZWYwMDljZjM5MDNkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2luZHNvciBIaWxscyBFbGVtL01pZGRsZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2QwYzYxZDM4OGUyNDdmYWJjMTQyYzEyYTBkNjBlNDQuc2V0Q29udGVudChodG1sXzBiOTQ0YmIyZjhmMjQ3MTJhNGRlZjAwOWNmMzkwM2QyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzNDE1OTc0NTY4YjQzNGRiMjRjYTZlYWFjZWEwMzlhLmJpbmRQb3B1cChwb3B1cF9jZDBjNjFkMzg4ZTI0N2ZhYmMxNDJjMTJhMGQ2MGU0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTNjMDhkMmQ0NDg2NDk1ZGI2NjZlOTA2MDJiZDA3YjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTc0NjcwMiwgLTc2LjY1OTQ5NTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4YmMwOWZjNjZiNTQ5MGI5ZmI0MDRjZGU3MzAyZGJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxZjUzMzJiYjRkZjRkZTc4NjU4YzRiNDU2OTY5Mjc5ID0gJChgPGRpdiBpZD0iaHRtbF82MWY1MzMyYmI0ZGY0ZGU3ODY1OGM0YjQ1Njk2OTI3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RW1wb3dlcm1lbnQgQWNhZGVteTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYThiYzA5ZmM2NmI1NDkwYjlmYjQwNGNkZTczMDJkYmIuc2V0Q29udGVudChodG1sXzYxZjUzMzJiYjRkZjRkZTc4NjU4YzRiNDU2OTY5Mjc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzYzA4ZDJkNDQ4NjQ5NWRiNjY2ZTkwNjAyYmQwN2I3LmJpbmRQb3B1cChwb3B1cF9hOGJjMDlmYzY2YjU0OTBiOWZiNDA0Y2RlNzMwMmRiYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRkMzI0MGQ0YzVlNDdmOGE2ZWMzNzk0ZjVmZWE0ZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zNzc2NzA5NCwgLTc1LjUyMTMxMDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkNjM2YTEzYjJlNjRhMzg4ZjdiZDZjNWRjZjM4ZGU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlM2JmODg5ZDE1NTQ4OGE5ZmVkNGJmZDI2NTkxOTdmID0gJChgPGRpdiBpZD0iaHRtbF83ZTNiZjg4OWQxNTU0ODhhOWZlZDRiZmQyNjU5MTk3ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVhdmVyIFJ1biBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZDYzNmExM2IyZTY0YTM4OGY3YmQ2YzVkY2YzOGRlOS5zZXRDb250ZW50KGh0bWxfN2UzYmY4ODlkMTU1NDg4YTlmZWQ0YmZkMjY1OTE5N2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODRkMzI0MGQ0YzVlNDdmOGE2ZWMzNzk0ZjVmZWE0ZmEuYmluZFBvcHVwKHBvcHVwXzNkNjM2YTEzYjJlNjRhMzg4ZjdiZDZjNWRjZjM4ZGU5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzZmNmU4MjYzM2Y0ZWIzYmQwODFjNmQwOThjMTMzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM3NjM4OTI2LCAtNzUuNTA2MzU5NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTUwNWYyNjQ0YmU3NGI3ZTgxYjk5OTMxZmU0ZGE1M2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmEzZTM0YmQ0MDVjNDhhM2E3MGZlZWU2Y2QxZjhhY2EgPSAkKGA8ZGl2IGlkPSJodG1sXzJhM2UzNGJkNDA1YzQ4YTNhNzBmZWVlNmNkMWY4YWNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UZWxhbW9uIENvcnBvcmF0aW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NTA1ZjI2NDRiZTc0YjdlODFiOTk5MzFmZTRkYTUzYS5zZXRDb250ZW50KGh0bWxfMmEzZTM0YmQ0MDVjNDhhM2E3MGZlZWU2Y2QxZjhhY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjc2ZjZlODI2MzNmNGViM2JkMDgxYzZkMDk4YzEzM2UuYmluZFBvcHVwKHBvcHVwXzU1MDVmMjY0NGJlNzRiN2U4MWI5OTkzMWZlNGRhNTNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZjAzYmQ4ZTA3YzQ0OTkxOWMyNWQ0MzI3MDY3NWMxYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQ4NDMwOTk1LCAtNzkuMDQ1MzAwMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGUzNTY0MGE2ZWZjNDU5ZmJhNTg5NjVkNzg2YTIzMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWU4NWZjMGMxY2Y1NGViYTk1OWFiYjhmMzk4YzNjNjEgPSAkKGA8ZGl2IGlkPSJodG1sXzFlODVmYzBjMWNmNTRlYmE5NTlhYmI4ZjM5OGMzYzYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UcmktVG93biBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGUzNTY0MGE2ZWZjNDU5ZmJhNTg5NjVkNzg2YTIzMTYuc2V0Q29udGVudChodG1sXzFlODVmYzBjMWNmNTRlYmE5NTlhYmI4ZjM5OGMzYzYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZmMDNiZDhlMDdjNDQ5OTE5YzI1ZDQzMjcwNjc1YzFiLmJpbmRQb3B1cChwb3B1cF9kZTM1NjQwYTZlZmM0NTlmYmE1ODk2NWQ3ODZhMjMxNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjcwZTQ5ZTkyM2M3NDllOThjNDExZGQ0ODgxNzk5NDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTkxNjE0NywgLTc2LjYzNTU4Mzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczMjkxNGI1YjY1NzRiNTBiNjMxYjAzNGY4OWI4ZTZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkMGYxM2NiYWRkNjQ4ZjFhNWI3MjJmNTBlODMwNmQxID0gJChgPGRpdiBpZD0iaHRtbF9iZDBmMTNjYmFkZDY0OGYxYTViNzIyZjUwZTgzMDZkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIEphbWVzIEVwaXMuIENocmNoIE91dHJlYWNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzI5MTRiNWI2NTc0YjUwYjYzMWIwMzRmODliOGU2YS5zZXRDb250ZW50KGh0bWxfYmQwZjEzY2JhZGQ2NDhmMWE1YjcyMmY1MGU4MzA2ZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjcwZTQ5ZTkyM2M3NDllOThjNDExZGQ0ODgxNzk5NDAuYmluZFBvcHVwKHBvcHVwXzczMjkxNGI1YjY1NzRiNTBiNjMxYjAzNGY4OWI4ZTZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZmVhZmJjMGI0OGY0NTdiOTRiNTVlZTBiODA1NDgxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM3MzU2Mjg1LCAtNzUuNTAyNjAwNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWY3OTg0YzdjNzBkNGI3YjgwMmVjMTJhMzcwNDIzNmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmE5OGI1MjY0Y2Q0NGJjOTgxYmRiN2Q4MDhlNWRiYzggPSAkKGA8ZGl2IGlkPSJodG1sX2ZhOThiNTI2NGNkNDRiYzk4MWJkYjdkODA4ZTVkYmM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Xb3IgV2ljIENvbW11bml0eSBDb2xsZWdlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Zjc5ODRjN2M3MGQ0YjdiODAyZWMxMmEzNzA0MjM2YS5zZXRDb250ZW50KGh0bWxfZmE5OGI1MjY0Y2Q0NGJjOTgxYmRiN2Q4MDhlNWRiYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGZlYWZiYzBiNDhmNDU3Yjk0YjU1ZWUwYjgwNTQ4MWMuYmluZFBvcHVwKHBvcHVwXzVmNzk4NGM3YzcwZDRiN2I4MDJlYzEyYTM3MDQyMzZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZDZlOTIwZjkzNTc0MmE2YjhlMTg2MTcxMzA1ZjAyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwMDc2NzEzLCAtNzYuNjQ1OTE4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NmEzOTJiZjRhOWU0YmU0OTI1ZTg2YjAzNGI4NzM1MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZTZmOGY1NTliNWY0ZTE1OTc5NGRhYzUwYjY3ZjRiNCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWU2ZjhmNTU5YjVmNGUxNTk3OTRkYWM1MGI2N2Y0YjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk10LiBQaXNnYWggQ01FLiBDaHVyY2ggUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NmEzOTJiZjRhOWU0YmU0OTI1ZTg2YjAzNGI4NzM1MS5zZXRDb250ZW50KGh0bWxfOWU2ZjhmNTU5YjVmNGUxNTk3OTRkYWM1MGI2N2Y0YjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGQ2ZTkyMGY5MzU3NDJhNmI4ZTE4NjE3MTMwNWYwMmIuYmluZFBvcHVwKHBvcHVwXzY2YTM5MmJmNGE5ZTRiZTQ5MjVlODZiMDM0Yjg3MzUxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNTBiYzYxMWYwMDg0MmQ2OWFkOGYzYTlkOWRkZjY3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY2MTg5NzYyLCAtNzYuODg1MDcyMDk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWQ1ZTcxZjFlOGRkNDkzNDk5MDhhZmE5YzQ1MTllYzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWIxN2MzNDAyNDg2NGNkM2IwNGRiYzBhYTkwNjcxMzggPSAkKGA8ZGl2IGlkPSJodG1sX2FiMTdjMzQwMjQ4NjRjZDNiMDRkYmMwYWE5MDY3MTM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UcmVlIG9mIEZyaWVuZHMgRm91bmRhdGlvbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWQ1ZTcxZjFlOGRkNDkzNDk5MDhhZmE5YzQ1MTllYzAuc2V0Q29udGVudChodG1sX2FiMTdjMzQwMjQ4NjRjZDNiMDRkYmMwYWE5MDY3MTM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q1MGJjNjExZjAwODQyZDY5YWQ4ZjNhOWQ5ZGRmNjc0LmJpbmRQb3B1cChwb3B1cF9hZDVlNzFmMWU4ZGQ0OTM0OTkwOGFmYTljNDUxOWVjMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjZlMGIwYzg1MjFiNGRkOWE2ODgxNTJiZDI1ZTUxYTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNDU4MzQ1NywgLTc2LjYyNzI2OTA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiMWM1ZDJlYWJkNjRiYzY5ZWI5OTc2OTY3NTRkYTc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiODMwODZmYjhkODQ0ZWFhYmZjYmI4MGMxODk1NWViID0gJChgPGRpdiBpZD0iaHRtbF9hYjgzMDg2ZmI4ZDg0NGVhYWJmY2JiODBjMTg5NTVlYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hlcnJ5IEhpbGwgVU1DIEtpdGNoZW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiMWM1ZDJlYWJkNjRiYzY5ZWI5OTc2OTY3NTRkYTc0LnNldENvbnRlbnQoaHRtbF9hYjgzMDg2ZmI4ZDg0NGVhYWJmY2JiODBjMTg5NTVlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NmUwYjBjODUyMWI0ZGQ5YTY4ODE1MmJkMjVlNTFhNy5iaW5kUG9wdXAocG9wdXBfMGIxYzVkMmVhYmQ2NGJjNjllYjk5NzY5Njc1NGRhNzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyZDdlMTQ4ZTAyMjQ3MWI4NzdjNjYyZWVlMjdmOGI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzcxMjgzNDQsIC03NS41OTA0NjcxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjVlODk3MDliYWY0MWEwOWYyZTZiMDM2NjJlZjIyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YzA4MDU1ODAyZWI0MzlmODcxYmYwYTAzYjFjZjA4ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWMwODA1NTgwMmViNDM5Zjg3MWJmMGEwM2IxY2YwOGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNhbGlzYnVyeSBVcmJhbiBNaW5pc3RyaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjVlODk3MDliYWY0MWEwOWYyZTZiMDM2NjJlZjIyMS5zZXRDb250ZW50KGh0bWxfOWMwODA1NTgwMmViNDM5Zjg3MWJmMGEwM2IxY2YwOGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTJkN2UxNDhlMDIyNDcxYjg3N2M2NjJlZWUyN2Y4YjUuYmluZFBvcHVwKHBvcHVwXzA2NWU4OTcwOWJhZjQxYTA5ZjJlNmIwMzY2MmVmMjIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NjIzMDk5MTgyZTM0OWQxODFjODg3NDkzYThjMTE5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5OTg3Mjg4LCAtNzYuNjMwMTU5MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODRjZGNkOTE2YWQxNGJmN2I1YjJmOGVkNzkzYTdmOGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmFiNTcxMDUwOWU0NDIzYzk1NjA2ZTZjMmYyZDFiYjIgPSAkKGA8ZGl2IGlkPSJodG1sXzZhYjU3MTA1MDllNDQyM2M5NTYwNmU2YzJmMmQxYmIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GdXJtYW4gTC4gVGVtcGxldG9uIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0Y2RjZDkxNmFkMTRiZjdiNWIyZjhlZDc5M2E3ZjhlLnNldENvbnRlbnQoaHRtbF82YWI1NzEwNTA5ZTQ0MjNjOTU2MDZlNmMyZjJkMWJiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NjIzMDk5MTgyZTM0OWQxODFjODg3NDkzYThjMTE5Yi5iaW5kUG9wdXAocG9wdXBfODRjZGNkOTE2YWQxNGJmN2I1YjJmOGVkNzkzYTdmOGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzOGMyZWRhMWIwODRiZmI4NDlhNmY0NjFlY2VhZWIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA5MjQzMDYsIC03Ni42MjQ4MTYwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNGVhN2ZmYjAwNWI0ZjgxODY5MGMwMjRhYTZlYTE5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMTlmMjk5ZDQxMTg0YzBlOGMxYmEwNzA2MTcxMGNlMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTE5ZjI5OWQ0MTE4NGMwZThjMWJhMDcwNjE3MTBjZTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vdW50IFJveWFsIEVsZW0vTWlkZGxlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNGVhN2ZmYjAwNWI0ZjgxODY5MGMwMjRhYTZlYTE5Yi5zZXRDb250ZW50KGh0bWxfMTE5ZjI5OWQ0MTE4NGMwZThjMWJhMDcwNjE3MTBjZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTM4YzJlZGExYjA4NGJmYjg0OWE2ZjQ2MWVjZWFlYjAuYmluZFBvcHVwKHBvcHVwX2M0ZWE3ZmZiMDA1YjRmODE4NjkwYzAyNGFhNmVhMTliKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OGVjYjQ4MjY2Njc0MzE0OTI4MjU0YzFkOTZjYmRlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwMjY1MjE3LCAtNzYuNjI3ODA2MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDhjMzFlYTIxYWY4NGExMWIxZDhlYTQ4YTBlOTQ2MjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDhlMTg2ZjBmNDhhNDNiMjk0Y2FmZWU1ZWNjOTU0ZjYgPSAkKGA8ZGl2IGlkPSJodG1sXzQ4ZTE4NmYwZjQ4YTQzYjI5NGNhZmVlNWVjYzk1NGY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Cb29rZXIgVCBXYXNoaW5ndG9uIE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4YzMxZWEyMWFmODRhMTFiMWQ4ZWE0OGEwZTk0NjI0LnNldENvbnRlbnQoaHRtbF80OGUxODZmMGY0OGE0M2IyOTRjYWZlZTVlY2M5NTRmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OGVjYjQ4MjY2Njc0MzE0OTI4MjU0YzFkOTZjYmRlMi5iaW5kUG9wdXAocG9wdXBfZDhjMzFlYTIxYWY4NGExMWIxZDhlYTQ4YTBlOTQ2MjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdhMDZjYzI5NDA4YTQ2YzZiOWVjOGZmZmJiMmQ4OWNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTkyOTU4ODMsIC03Ny44MTMyODY2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZjVhZWM0N2JjMmE0MDBiYWMzZmZiODJiMjQ3ZjgwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTNkYTFlMjkxODQ0NDc5OWZjZGE1Y2JiMzk3ZWMyYSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTkzZGExZTI5MTg0NDQ3OTlmY2RhNWNiYjM5N2VjMmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNwcmluZ2ZpZWxkIE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmNWFlYzQ3YmMyYTQwMGJhYzNmZmI4MmIyNDdmODBiLnNldENvbnRlbnQoaHRtbF85OTNkYTFlMjkxODQ0NDc5OWZjZGE1Y2JiMzk3ZWMyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YTA2Y2MyOTQwOGE0NmM2YjllYzhmZmZiYjJkODljYy5iaW5kUG9wdXAocG9wdXBfNGY1YWVjNDdiYzJhNDAwYmFjM2ZmYjgyYjI0N2Y4MGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3OTY0YTVlOTc0YTQ2OGQ5OTYyNDlkZjIxNDEwY2MxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzAyNjUyMTcsIC03Ni42Mjc4MDYwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDRmZWI1NDM0N2Y0YjA0YjBjNzI0MGYzNDc4NDk5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYmVhZWIyMmI5YWI0ODhmODM0MWY3YTMzZGRiYmI4MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWJlYWViMjJiOWFiNDg4ZjgzNDFmN2EzM2RkYmJiODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJlbmFpc3NhbmNlIEFjYWRlbXkgIzQzMzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQ0ZmViNTQzNDdmNGIwNGIwYzcyNDBmMzQ3ODQ5OTYuc2V0Q29udGVudChodG1sX2FiZWFlYjIyYjlhYjQ4OGY4MzQxZjdhMzNkZGJiYjgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI3OTY0YTVlOTc0YTQ2OGQ5OTYyNDlkZjIxNDEwY2MxLmJpbmRQb3B1cChwb3B1cF8wNDRmZWI1NDM0N2Y0YjA0YjBjNzI0MGYzNDc4NDk5NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjljODNlNzJhOTcwNGNlZTg5MTJhNTgzZThjYmVmMTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDMzOTg1OSwgLTc2LjY0MzE3NjA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmYTFkYmI5ZDdjNTQzZjE4OGNiNmMxMjJmOTZmMmVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4ZWNlNTYwZGU5MDQ1MjViYzc3MzA5ZDE5MjMyZGM2ID0gJChgPGRpdiBpZD0iaHRtbF9kOGVjZTU2MGRlOTA0NTI1YmM3NzMwOWQxOTIzMmRjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R2lsbW9yIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmYTFkYmI5ZDdjNTQzZjE4OGNiNmMxMjJmOTZmMmVkLnNldENvbnRlbnQoaHRtbF9kOGVjZTU2MGRlOTA0NTI1YmM3NzMwOWQxOTIzMmRjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOWM4M2U3MmE5NzA0Y2VlODkxMmE1ODNlOGNiZWYxNS5iaW5kUG9wdXAocG9wdXBfMmZhMWRiYjlkN2M1NDNmMTg4Y2I2YzEyMmY5NmYyZWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5ZGQ2YzA0M2JmYzRiNGU4NGI3MzViZjk2ZGQyMzU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzAxNDA2MzMsIC03Ni42MzE5NzEyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjRhMTkyYjFkMTg0YzgyOTA4ZTk3MDRkYmM4MTlmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDg3YmRkZTc1ZTg0NWZmOWYwYTEzYjk5NzU0ZDhhNiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjQ4N2JkZGU3NWU4NDVmZjlmMGExM2I5OTc1NGQ4YTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByb3ZpZGVuY2UgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiNGExOTJiMWQxODRjODI5MDhlOTcwNGRiYzgxOWYxLnNldENvbnRlbnQoaHRtbF9mNDg3YmRkZTc1ZTg0NWZmOWYwYTEzYjk5NzU0ZDhhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OWRkNmMwNDNiZmM0YjRlODRiNzM1YmY5NmRkMjM1OS5iaW5kUG9wdXAocG9wdXBfMGI0YTE5MmIxZDE4NGM4MjkwOGU5NzA0ZGJjODE5ZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3MDg2OWNmYTk3NzQ5ZTU4NWIxZTQ4ODQ2NjZkZmE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA2MjY3NTEsIC03Ni42MjUwODcxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDQ4ZGY4MDAyNjE0OWUxOWJkZDg3MWM2NDFmMjNlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MDliMDAzZThjMjI0M2RkYTE3NGRlZWZjNTZjYWIyZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDA5YjAwM2U4YzIyNDNkZGExNzRkZWVmYzU2Y2FiMmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1lbW9yaWFsIEVwaXNjb3BhbCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkNDhkZjgwMDI2MTQ5ZTE5YmRkODcxYzY0MWYyM2U0LnNldENvbnRlbnQoaHRtbF80MDliMDAzZThjMjI0M2RkYTE3NGRlZWZjNTZjYWIyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNzA4NjljZmE5Nzc0OWU1ODViMWU0ODg0NjY2ZGZhOS5iaW5kUG9wdXAocG9wdXBfZGQ0OGRmODAwMjYxNDllMTliZGQ4NzFjNjQxZjIzZTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiNGU1N2QwNmRkMDQyNWZiMWRiZGY0YzAyNTFjOTZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA2MzU2MDUsIC03Ni42NDM0MDU5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Nzc5NDY2YTlhZDg0NDY3YjM4YTAzN2Q1YTRjODZkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjQ0ZTAyMWNjNmU0NzY3OWNjODRhN2VkZWY2NmU2NSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmY0NGUwMjFjYzZlNDc2NzljYzg0YTdlZGVmNjZlNjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBHcmVnb3J5IHRoZSBHcmVhdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3Nzk0NjZhOWFkODQ0NjdiMzhhMDM3ZDVhNGM4NmQ0LnNldENvbnRlbnQoaHRtbF82ZjQ0ZTAyMWNjNmU0NzY3OWNjODRhN2VkZWY2NmU2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYjRlNTdkMDZkZDA0MjVmYjFkYmRmNGMwMjUxYzk2YS5iaW5kUG9wdXAocG9wdXBfODc3OTQ2NmE5YWQ4NDQ2N2IzOGEwMzdkNWE0Yzg2ZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1ODk5NDEwM2FhMjQ1ZWVhZTg2ZDU4ZjM5MjEyNmQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA2NzM0ODMsIC03Ni42Mjk4MjA2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ODJjMTM3YzE2NjU0ZjAwYTk5ODE4OTMyYWM1OGU0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YmU0ZTU3ZmY1NTM0Y2IwYmQyNzA1MjcwNWEzNWJjMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNWJlNGU1N2ZmNTUzNGNiMGJkMjcwNTI3MDVhMzViYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkV1dGF3IE1hcnNoYnVybiBFbGVtIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDgyYzEzN2MxNjY1NGYwMGE5OTgxODkzMmFjNThlNDguc2V0Q29udGVudChodG1sXzViZTRlNTdmZjU1MzRjYjBiZDI3MDUyNzA1YTM1YmMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE1ODk5NDEwM2FhMjQ1ZWVhZTg2ZDU4ZjM5MjEyNmQzLmJpbmRQb3B1cChwb3B1cF80ODJjMTM3YzE2NjU0ZjAwYTk5ODE4OTMyYWM1OGU0OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmZkOTRlNDZhY2ViNDU2Y2I2ODJkOGJmZTIwNzRmY2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNDU3NTk1MywgLTc2LjUwODQ5Nzk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2MTY3NTJjNjA5NDQ3NTU4YzRhMTlkNGRlYTE2OGQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkYWU1YWYxMTgwNzRjM2I4NjE2NzU0YmZkNjExZmQ4ID0gJChgPGRpdiBpZD0iaHRtbF81ZGFlNWFmMTE4MDc0YzNiODYxNjc1NGJmZDYxMWZkOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2F0ZXJzZWRnZSBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzYxNjc1MmM2MDk0NDc1NThjNGExOWQ0ZGVhMTY4ZDcuc2V0Q29udGVudChodG1sXzVkYWU1YWYxMTgwNzRjM2I4NjE2NzU0YmZkNjExZmQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmZDk0ZTQ2YWNlYjQ1NmNiNjgyZDhiZmUyMDc0ZmNjLmJpbmRQb3B1cChwb3B1cF83NjE2NzUyYzYwOTQ0NzU1OGM0YTE5ZDRkZWExNjhkNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmUzZTAyYjk0ZDhiNDc3Y2EwYWI5MjNmNWI5MmNkMmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zOTgyMDA1MiwgLTc2LjU5NDg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjMTdiNjgxOGViMzRiZDA5ZDcyNTgyNmY5NTBiYTllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3MzNmMGQ5ZGU3NzRjZjU5MTM3YWMxZGE0ZDJhZTU0ID0gJChgPGRpdiBpZD0iaHRtbF8xNzMzZjBkOWRlNzc0Y2Y1OTEzN2FjMWRhNGQyYWU1NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW91bnQgQ2FsdmFyeSBBTUUgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYzE3YjY4MThlYjM0YmQwOWQ3MjU4MjZmOTUwYmE5ZS5zZXRDb250ZW50KGh0bWxfMTczM2YwZDlkZTc3NGNmNTkxMzdhYzFkYTRkMmFlNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmUzZTAyYjk0ZDhiNDc3Y2EwYWI5MjNmNWI5MmNkMmQuYmluZFBvcHVwKHBvcHVwX2FjMTdiNjgxOGViMzRiZDA5ZDcyNTgyNmY5NTBiYTllKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZmRiYjE2MzZhMzQ0NGI1YmI2M2RkY2EwN2NjNDg5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY0MTQwMTE5LCAtNzcuNzE5MDM0MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODA4YzI3YzgxOGI3NDRmNTk4OWNlYjJjZGQ4ZDBkMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmZlZmZhYTI3Njk0NDljYzkxNjkzZjM1NmQxOGY2MmYgPSAkKGA8ZGl2IGlkPSJodG1sX2JmZWZmYWEyNzY5NDQ5Y2M5MTY5M2YzNTZkMThmNjJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BY3RzOTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODA4YzI3YzgxOGI3NDRmNTk4OWNlYjJjZGQ4ZDBkMTMuc2V0Q29udGVudChodG1sX2JmZWZmYWEyNzY5NDQ5Y2M5MTY5M2YzNTZkMThmNjJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNmZGJiMTYzNmEzNDQ0YjViYjYzZGRjYTA3Y2M0ODljLmJpbmRQb3B1cChwb3B1cF84MDhjMjdjODE4Yjc0NGY1OTg5Y2ViMmNkZDhkMGQxMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjZiNDcwZjU4ZDBhNDFmODgwZmJhZTc3ZjU0M2Q2MTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDYzNjg0OSwgLTc2LjYzMDkyMzMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjMmE4ZjRjZTlkODRjODY5ZWQ4M2Y0ZGRkMDFkZGI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmMmRlOGJjNjA1OTQ0ZDlhMmM1Yjk4YzFmNzg4N2IyID0gJChgPGRpdiBpZD0iaHRtbF82ZjJkZThiYzYwNTk0NGQ5YTJjNWI5OGMxZjc4ODdiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RmFtaWx5IENvbm5lY3Rpb25zPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YzJhOGY0Y2U5ZDg0Yzg2OWVkODNmNGRkZDAxZGRiNC5zZXRDb250ZW50KGh0bWxfNmYyZGU4YmM2MDU5NDRkOWEyYzViOThjMWY3ODg3YjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjZiNDcwZjU4ZDBhNDFmODgwZmJhZTc3ZjU0M2Q2MTYuYmluZFBvcHVwKHBvcHVwXzdjMmE4ZjRjZTlkODRjODY5ZWQ4M2Y0ZGRkMDFkZGI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZjBmZjcxN2FjMjI0MjMxYjRhNTljZmNhZTNlNGMyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwNjM2ODQ5LCAtNzYuNjMwOTIzMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDhjZWExYmM3NTY0NGQwOGJhM2RiMWQyOTg1MjUyN2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzU4NGZlOTUyOWNhNDE5NmJlNzhkYTkwNGJjZDc2OGMgPSAkKGA8ZGl2IGlkPSJodG1sXzM1ODRmZTk1MjljYTQxOTZiZTc4ZGE5MDRiY2Q3NjhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXluZSBNZW1vcmlhbCBPdXRyZWFjaCBQcm9ncmFtPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOGNlYTFiYzc1NjQ0ZDA4YmEzZGIxZDI5ODUyNTI3YS5zZXRDb250ZW50KGh0bWxfMzU4NGZlOTUyOWNhNDE5NmJlNzhkYTkwNGJjZDc2OGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGYwZmY3MTdhYzIyNDIzMWI0YTU5Y2ZjYWUzZTRjMjIuYmluZFBvcHVwKHBvcHVwX2Q4Y2VhMWJjNzU2NDRkMDhiYTNkYjFkMjk4NTI1MjdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NDUxMmM1NjlmMzU0YWE1ODQ4ZjJhMDEzMDc4Njc3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5NjM3NjQ5LCAtNzYuNjQ2NjUxMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzlkMmMwMDk5NTg4NGNhMGE2NDU1YzZmMjZjMWU5MDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjcwZTU4MjE1ZmY1NDk1ZTg2YWYwZjA1MTA4ZTA4MTkgPSAkKGA8ZGl2IGlkPSJodG1sXzI3MGU1ODIxNWZmNTQ5NWU4NmFmMGYwNTEwOGUwODE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Sb290cyAmIEJyYW5jaGVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OWQyYzAwOTk1ODg0Y2EwYTY0NTVjNmYyNmMxZTkwOS5zZXRDb250ZW50KGh0bWxfMjcwZTU4MjE1ZmY1NDk1ZTg2YWYwZjA1MTA4ZTA4MTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQ1MTJjNTY5ZjM1NGFhNTg0OGYyYTAxMzA3ODY3N2UuYmluZFBvcHVwKHBvcHVwXzc5ZDJjMDA5OTU4ODRjYTBhNjQ1NWM2ZjI2YzFlOTA5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDExNDYzODkxMjQ0MGIyYWNiNTIxY2JmMjFiMzU3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM4MzYxNzg0LCAtNzUuNTkyOTkyOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmRjNGVkNzRkZDM2NGMyNjg4MjlmYTdkODk2OTkyMmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjIxZGQ4ZGIyZmUyNDkxNDhjY2EyNmFiMThlMGI3YmQgPSAkKGA8ZGl2IGlkPSJodG1sXzYyMWRkOGRiMmZlMjQ5MTQ4Y2NhMjZhYjE4ZTBiN2JkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZWVyJ3MgSGVhZCBIb3NwaXRhbCBEaWFseXNpczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmRjNGVkNzRkZDM2NGMyNjg4MjlmYTdkODk2OTkyMmIuc2V0Q29udGVudChodG1sXzYyMWRkOGRiMmZlMjQ5MTQ4Y2NhMjZhYjE4ZTBiN2JkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkMTE0NjM4OTEyNDQwYjJhY2I1MjFjYmYyMWIzNTdiLmJpbmRQb3B1cChwb3B1cF82ZGM0ZWQ3NGRkMzY0YzI2ODgyOWZhN2Q4OTY5OTIyYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjI2YzVhNzU3OGFkNDRiZTgzM2JjN2YyNTZjNGQ3YzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMDk3ODE0MywgLTc2LjY0OTEzNTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlM2Q0MGI4NDM4MjRmMmQ5YWNiOTc2N2QzMWY4MWZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiYTdhYzg5ZjA0ZDQzNGFiNWM2MzFmNWRjY2UxYWYwID0gJChgPGRpdiBpZD0iaHRtbF9mYmE3YWM4OWYwNGQ0MzRhYjVjNjMxZjVkY2NlMWFmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbiBQb3NzaWJsZSBNaW5pc3RyaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZTNkNDBiODQzODI0ZjJkOWFjYjk3NjdkMzFmODFmZC5zZXRDb250ZW50KGh0bWxfZmJhN2FjODlmMDRkNDM0YWI1YzYzMWY1ZGNjZTFhZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjI2YzVhNzU3OGFkNDRiZTgzM2JjN2YyNTZjNGQ3YzQuYmluZFBvcHVwKHBvcHVwXzFlM2Q0MGI4NDM4MjRmMmQ5YWNiOTc2N2QzMWY4MWZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYjFiYzcwMzhhNjQ0ZmMxOGM5NjczMTUzNTFmNTYxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwOTY3NjUxLCAtNzYuNjUwMjAwMDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDgwZDBiMmU2MWMwNDcyNjg1MzVlZTJiM2EzOTQ0OWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWU4NjI3MzU1OThmNDM1YWJmMjdhZGZjZDU3MzVkMGYgPSAkKGA8ZGl2IGlkPSJodG1sX2FlODYyNzM1NTk4ZjQzNWFiZjI3YWRmY2Q1NzM1ZDBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaHJpc3RpYW4gTWVtb3JpYWwgQ2h1cmNoIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODBkMGIyZTYxYzA0NzI2ODUzNWVlMmIzYTM5NDQ5YS5zZXRDb250ZW50KGh0bWxfYWU4NjI3MzU1OThmNDM1YWJmMjdhZGZjZDU3MzVkMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmIxYmM3MDM4YTY0NGZjMThjOTY3MzE1MzUxZjU2MTYuYmluZFBvcHVwKHBvcHVwX2Q4MGQwYjJlNjFjMDQ3MjY4NTM1ZWUyYjNhMzk0NDlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODg2Y2U2N2RhMTk0OGFjOWQwZTk3NjBiNTZhYjA5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxMDk1NjEyLCAtNzYuNjMyNjk4NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2U1ODE1NDBjYWYzNGMwNmJkYTMwOTk2MWQ5Nzk0ZGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTE3ZWE0YTk2ZmY5NDdkODgzNThiZGY0YTE0OTRlMjAgPSAkKGA8ZGl2IGlkPSJodG1sXzkxN2VhNGE5NmZmOTQ3ZDg4MzU4YmRmNGExNDk0ZTIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eb3JvdGh5IEkuIEhlaWdodCBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZTU4MTU0MGNhZjM0YzA2YmRhMzA5OTYxZDk3OTRkZi5zZXRDb250ZW50KGh0bWxfOTE3ZWE0YTk2ZmY5NDdkODgzNThiZGY0YTE0OTRlMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODg4NmNlNjdkYTE5NDhhYzlkMGU5NzYwYjU2YWIwOTguYmluZFBvcHVwKHBvcHVwX2NlNTgxNTQwY2FmMzRjMDZiZGEzMDk5NjFkOTc5NGRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOWRhOWQ3NzJhODY0YzMxYmU1MTdiYTQyMTJlZDYzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxMjM2MDYxLCAtNzYuNjQ4MzM3OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWMwMDI0YjlkNzA5NDliZWE0NjQ4ZDc5MWRjMGFmNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNkODUwMjhiZTE4NDI4YWEwNWI0OWU1OTEyMzdmMGMgPSAkKGA8ZGl2IGlkPSJodG1sXzkzZDg1MDI4YmUxODQyOGFhMDViNDllNTkxMjM3ZjBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXcgU2hpbG9oIEJhcHRpc3QgQ2h1cmNoIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YzAwMjRiOWQ3MDk0OWJlYTQ2NDhkNzkxZGMwYWY1OS5zZXRDb250ZW50KGh0bWxfOTNkODUwMjhiZTE4NDI4YWEwNWI0OWU1OTEyMzdmMGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTlkYTlkNzcyYTg2NGMzMWJlNTE3YmE0MjEyZWQ2M2YuYmluZFBvcHVwKHBvcHVwXzljMDAyNGI5ZDcwOTQ5YmVhNDY0OGQ3OTFkYzBhZjU5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNjk4MDk0NDEzOGQ0MTc3ODNiYjA1MWY5MzQzYmVlOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjIzNjEzNzM1LCAtNzYuNjA1OTUxMzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjk2NTRjM2MzZTkzNDU4YjgwOGNmMmRkMTAxYThlMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmM3YjE3YjFmOGQyNGM3Y2ExZTMzNTZkZDJlZDMwODEgPSAkKGA8ZGl2IGlkPSJodG1sX2ZjN2IxN2IxZjhkMjRjN2NhMWUzMzU2ZGQyZWQzMDgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MaWxpZXMgUGxhY2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5NjU0YzNjM2U5MzQ1OGI4MDhjZjJkZDEwMWE4ZTFhLnNldENvbnRlbnQoaHRtbF9mYzdiMTdiMWY4ZDI0YzdjYTFlMzM1NmRkMmVkMzA4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNjk4MDk0NDEzOGQ0MTc3ODNiYjA1MWY5MzQzYmVlOS5iaW5kUG9wdXAocG9wdXBfYjk2NTRjM2MzZTkzNDU4YjgwOGNmMmRkMTAxYThlMWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmNjgyNDI1NTM0ZTQwNGFiZjU5NTc1NGUzMTFhZDc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjMzODA3ODksIC03Ni41OTgyNzc0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTg5ZTRjNGI4ZGI0MWRkYThjNzhjNWQ0ZDU4OTQ2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MzYxYzc0NDA2ZTg0MDY0ODNkZTI0NTFmZTY3ZDNiNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTM2MWM3NDQwNmU4NDA2NDgzZGUyNDUxZmU2N2QzYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhbHRpbW9yZSBEcmVhbSBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1ODllNGM0YjhkYjQxZGRhOGM3OGM1ZDRkNTg5NDZiLnNldENvbnRlbnQoaHRtbF81MzYxYzc0NDA2ZTg0MDY0ODNkZTI0NTFmZTY3ZDNiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZjY4MjQyNTUzNGU0MDRhYmY1OTU3NTRlMzExYWQ3Ny5iaW5kUG9wdXAocG9wdXBfMzU4OWU0YzRiOGRiNDFkZGE4Yzc4YzVkNGQ1ODk0NmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmOGY2M2MyYjQ2MDRlODE4NDNkNWRiZTc2OTNlMmFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzE1NTE3MTMsIC03Ni42NTQ5MDA4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMDMzODhkYzA2OTI0MTI1YTBlZmQ0MGRhZDM4NzZlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMDQ3N2NiYjI1ZWI0MmJmODdkOTE1Zjk5YmVlMzNmYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjA0NzdjYmIyNWViNDJiZjg3ZDkxNWY5OWJlZTMzZmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyZWRlcmljayBEb3VnbGFzcyBIaWdoIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzAzMzg4ZGMwNjkyNDEyNWEwZWZkNDBkYWQzODc2ZWMuc2V0Q29udGVudChodG1sXzIwNDc3Y2JiMjVlYjQyYmY4N2Q5MTVmOTliZWUzM2ZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmOGY2M2MyYjQ2MDRlODE4NDNkNWRiZTc2OTNlMmFiLmJpbmRQb3B1cChwb3B1cF9jMDMzODhkYzA2OTI0MTI1YTBlZmQ0MGRhZDM4NzZlYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDAxMGM3YWFlYzI5NDE2ZGFjNTI1YzM1NTQxN2NhMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41MDM2MjUwOSwgLTc2Ljc3MTkwNTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0ZDVkN2EwMWI1ZjRjZGQ4ZTgyNjM0MTAxNTE5ZTFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxNWVkMmEzYzgzNDQyMTA5ZjY0NjVmZTYwMjM2ZDZjID0gJChgPGRpdiBpZD0iaHRtbF82MTVlZDJhM2M4MzQ0MjEwOWY2NDY1ZmU2MDIzNmQ2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U28uIE1EIFRyaS1Dby4gQ29tbS4gQWN0aW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNGQ1ZDdhMDFiNWY0Y2RkOGU4MjYzNDEwMTUxOWUxYS5zZXRDb250ZW50KGh0bWxfNjE1ZWQyYTNjODM0NDIxMDlmNjQ2NWZlNjAyMzZkNmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDAxMGM3YWFlYzI5NDE2ZGFjNTI1YzM1NTQxN2NhMDUuYmluZFBvcHVwKHBvcHVwXzE0ZDVkN2EwMWI1ZjRjZGQ4ZTgyNjM0MTAxNTE5ZTFhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yY2Q0MzkwMzNhZTI0ZmZlODIzZTY0ZDRjMTM1NDhiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI0NDQyNzM0LCAtNzYuNjQ4OTI2MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmQyZTM3YjNlMzE0NGIwZDg5ZjI2YTE1NmQwNGI1OWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDlkMGRiZGYyZTg0NGQ5MzhkY2ViZWRmY2UyZDQwZjAgPSAkKGA8ZGl2IGlkPSJodG1sXzA5ZDBkYmRmMmU4NDRkOTM4ZGNlYmVkZmNlMmQ0MGYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYW5kc2Rvd25lIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZDJlMzdiM2UzMTQ0YjBkODlmMjZhMTU2ZDA0YjU5ZS5zZXRDb250ZW50KGh0bWxfMDlkMGRiZGYyZTg0NGQ5MzhkY2ViZWRmY2UyZDQwZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmNkNDM5MDMzYWUyNGZmZTgyM2U2NGQ0YzEzNTQ4YjIuYmluZFBvcHVwKHBvcHVwX2ZkMmUzN2IzZTMxNDRiMGQ4OWYyNmExNTZkMDRiNTllKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85M2QzMTcwZWE3ZTU0NWYyOGVjMmJmYjBiNGMyOTViOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwNTk2Mjc5OTk5OTk5NiwgLTc2LjYzMTM4ODM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4ZjdmZmFiZjNjMzQzZmM5MmY3OWMzODA4ZTQ4MDdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0MDQ2OWJiODk1NzQzMjc5YjI5Y2VhOGY2ZjRkMGZlID0gJChgPGRpdiBpZD0iaHRtbF85NDA0NjliYjg5NTc0MzI3OWIyOWNlYThmNmY0ZDBmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T3BlbiBEb29yPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OGY3ZmZhYmYzYzM0M2ZjOTJmNzljMzgwOGU0ODA3Zi5zZXRDb250ZW50KGh0bWxfOTQwNDY5YmI4OTU3NDMyNzliMjljZWE4ZjZmNGQwZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTNkMzE3MGVhN2U1NDVmMjhlYzJiZmIwYjRjMjk1YjguYmluZFBvcHVwKHBvcHVwXzQ4ZjdmZmFiZjNjMzQzZmM5MmY3OWMzODA4ZTQ4MDdmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZjE3N2ZmYzg5ZjY0ODI3ODgzYmUyMWNmYzQ1N2IyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU5MzA1ODA3LCAtNzcuMTMzMzg1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNDY2OTE3OTY0MzY0NDE3OTY5NjZhY2JmY2QyOWMyOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYWExZjNiYzk2NDY0YjM1YjQyNTdkMzM3MTdkMzViMSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2FhMWYzYmM5NjQ2NGIzNWI0MjU3ZDMzNzE3ZDM1YjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyYW5jaXMgU2NvdHQgS2V5IEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNDY2OTE3OTY0MzY0NDE3OTY5NjZhY2JmY2QyOWMyOC5zZXRDb250ZW50KGh0bWxfY2FhMWYzYmM5NjQ2NGIzNWI0MjU3ZDMzNzE3ZDM1YjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmYxNzdmZmM4OWY2NDgyNzg4M2JlMjFjZmM0NTdiMmEuYmluZFBvcHVwKHBvcHVwX2M0NjY5MTc5NjQzNjQ0MTc5Njk2NmFjYmZjZDI5YzI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NDBjZmM0YjI3NmI0NzNlOGZkNTU0MDJiODNmN2JhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjcxMTkwMSwgLTc1Ljc3NjkxMDk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3NjlhN2ZmMDhmNDRjN2Q4Mjk0ODI4NDgzZmYzZTM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1YmE1MDE2ZDE2OTQzOTc4OGFhOWQyY2Y0NDkxNDc5ID0gJChgPGRpdiBpZD0iaHRtbF8yNWJhNTAxNmQxNjk0Mzk3ODhhYTlkMmNmNDQ5MTQ3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V29yZCBvZiBMaWZlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNzY5YTdmZjA4ZjQ0YzdkODI5NDgyODQ4M2ZmM2UzOS5zZXRDb250ZW50KGh0bWxfMjViYTUwMTZkMTY5NDM5Nzg4YWE5ZDJjZjQ0OTE0NzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDQwY2ZjNGIyNzZiNDczZThmZDU1NDAyYjgzZjdiYTIuYmluZFBvcHVwKHBvcHVwX2M3NjlhN2ZmMDhmNDRjN2Q4Mjk0ODI4NDgzZmYzZTM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZTYzNDRiYmJjNWM0MzQzYmQyNzhiNmM4NmM3NjAyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQ2ODk5MDk5OTk5OTk5NSwgLTc2Ljk0MjE5OTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0Mzk2Mzk4MjE0NjRkMzRiMjUyNWMzNTQ1ZGZhMGEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAzYzMwMThjYjMyZDRjOTViZDAxYTQzNWQ2YjFhOTYyID0gJChgPGRpdiBpZD0iaHRtbF8wM2MzMDE4Y2IzMmQ0Yzk1YmQwMWE0MzVkNmIxYTk2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWVjaGFuaWNzdmlsbGUgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQzOTYzOTgyMTQ2NGQzNGIyNTI1YzM1NDVkZmEwYTIuc2V0Q29udGVudChodG1sXzAzYzMwMThjYjMyZDRjOTViZDAxYTQzNWQ2YjFhOTYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzllNjM0NGJiYmM1YzQzNDNiZDI3OGI2Yzg2Yzc2MDI5LmJpbmRQb3B1cChwb3B1cF8xNDM5NjM5ODIxNDY0ZDM0YjI1MjVjMzU0NWRmYTBhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzhiZGNlYThjMjJkNGRiZTg2ZmUyOGM3MTljNWEyYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42MzM3Njc1OCwgLTc3LjcxOTI3MTc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyODE4YzM0ZjkzZTRkMGM5N2Y1YWM2OGNmMGRiYjA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4N2YzMjkzOTFkMTQ0YzViYWFlYmI3ODhiOGE5MTEzID0gJChgPGRpdiBpZD0iaHRtbF9iODdmMzI5MzkxZDE0NGM1YmFhZWJiNzg4YjhhOTExMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVzdGVyIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyODE4YzM0ZjkzZTRkMGM5N2Y1YWM2OGNmMGRiYjA2LnNldENvbnRlbnQoaHRtbF9iODdmMzI5MzkxZDE0NGM1YmFhZWJiNzg4YjhhOTExMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOGJkY2VhOGMyMmQ0ZGJlODZmZTI4YzcxOWM1YTJjMi5iaW5kUG9wdXAocG9wdXBfYjI4MThjMzRmOTNlNGQwYzk3ZjVhYzY4Y2YwZGJiMDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkNmZlMGU0NDJkMTQ2N2JiNDMwODk0NmE3NWNkYTM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzYxODA0MzUsIC03Ny41MzQxMDYyOTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDUzYmRjOGE1Y2I0NjUyODhjNDY5MzNlN2RhNjRjYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OTdiODUyOGNhMmQ0MDUyODkxMzE1MGFmZDNmYmVjYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjk3Yjg1MjhjYTJkNDA1Mjg5MTMxNTBhZmQzZmJlY2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkplZmZlcnNvbiBGb29kIEJhbms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwNTNiZGM4YTVjYjQ2NTI4OGM0NjkzM2U3ZGE2NGNjLnNldENvbnRlbnQoaHRtbF82OTdiODUyOGNhMmQ0MDUyODkxMzE1MGFmZDNmYmVjYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZDZmZTBlNDQyZDE0NjdiYjQzMDg5NDZhNzVjZGEzNy5iaW5kUG9wdXAocG9wdXBfODA1M2JkYzhhNWNiNDY1Mjg4YzQ2OTMzZTdkYTY0Y2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1ZDgxYjc4N2Y0MTQ5YjU5YTA5M2MyN2RkYWRiOWZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA1NDU0MDgsIC03Ni42MzYwMTU0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOTc2NmY4ODU0NzI0NmZkYjUxMjI2YmZmY2VjY2MzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NWM4NTRiY2UxNDY0YzJkOWY4NzMzZDcxNzA4ZTU0YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjVjODU0YmNlMTQ2NGMyZDlmODczM2Q3MTcwOGU1NGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBMaWZlIEZlbGxvd3NoaXAgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOTc2NmY4ODU0NzI0NmZkYjUxMjI2YmZmY2VjY2MzNy5zZXRDb250ZW50KGh0bWxfNjVjODU0YmNlMTQ2NGMyZDlmODczM2Q3MTcwOGU1NGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTVkODFiNzg3ZjQxNDliNTlhMDkzYzI3ZGRhZGI5ZmYuYmluZFBvcHVwKHBvcHVwX2Q5NzY2Zjg4NTQ3MjQ2ZmRiNTEyMjZiZmZjZWNjYzM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMzIwNGNiNWNlYmQ0NDc1OWI1ZmMyNTc1YTc1YjNiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5NTg0NTcwMDAwMDAxLCAtNzYuNjM0MTU4NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzYzMGUzOTRlZmMzNDVkMWI4NjRmMDgzNDYzOGY2MWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjhiNTgyMjA3YTgyNGY0YjgxOTQ4MGQ2MjE1NjdiNmYgPSAkKGA8ZGl2IGlkPSJodG1sXzY4YjU4MjIwN2E4MjRmNGI4MTk0ODBkNjIxNTY3YjZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Fbm9uIEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NjMwZTM5NGVmYzM0NWQxYjg2NGYwODM0NjM4ZjYxZC5zZXRDb250ZW50KGh0bWxfNjhiNTgyMjA3YTgyNGY0YjgxOTQ4MGQ2MjE1NjdiNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTMyMDRjYjVjZWJkNDQ3NTliNWZjMjU3NWE3NWIzYmEuYmluZFBvcHVwKHBvcHVwXzc2MzBlMzk0ZWZjMzQ1ZDFiODY0ZjA4MzQ2MzhmNjFkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjkxMzU2ZjIyMjg0YmM2ODc1YzI3NmFiNWJmZTI2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5OTQxNTU0LCAtNzYuNjM0MTkwNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGIzYWY4M2U1NTIyNDI0ZWFmMGYwMWYyMTE3MDY3MDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmMwZWUxYmM5NzAxNDQxNTg5ODc2OTRmZWIyYmE0MjkgPSAkKGA8ZGl2IGlkPSJodG1sX2JjMGVlMWJjOTcwMTQ0MTU4OTg3Njk0ZmViMmJhNDI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYWNlZG9uaWEgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiM2FmODNlNTUyMjQyNGVhZjBmMDFmMjExNzA2NzA5LnNldENvbnRlbnQoaHRtbF9iYzBlZTFiYzk3MDE0NDE1ODk4NzY5NGZlYjJiYTQyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNjkxMzU2ZjIyMjg0YmM2ODc1YzI3NmFiNWJmZTI2ZS5iaW5kUG9wdXAocG9wdXBfMGIzYWY4M2U1NTIyNDI0ZWFmMGYwMWYyMTE3MDY3MDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2ZjQzOWQ0M2VkODQ3NzI4ZWIzZjI4YjQyYjdmNjc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjI5NzAzNTcsIC03Ni41ODg4MTYyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MTJiOTljNjhkN2M0ZDAzYWFiZTE2ZGEzYWMxNTQ4YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZDQwNGQzMDUzNTA0ODQ4YjI4YjcxYTQ0Y2Y0YThjYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmQ0MDRkMzA1MzUwNDg0OGIyOGI3MWE0NGNmNGE4Y2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBQYXVsIEx1dGhlcmFuIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTEyYjk5YzY4ZDdjNGQwM2FhYmUxNmRhM2FjMTU0OGEuc2V0Q29udGVudChodG1sX2ZkNDA0ZDMwNTM1MDQ4NDhiMjhiNzFhNDRjZjRhOGNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc2ZjQzOWQ0M2VkODQ3NzI4ZWIzZjI4YjQyYjdmNjc2LmJpbmRQb3B1cChwb3B1cF85MTJiOTljNjhkN2M0ZDAzYWFiZTE2ZGEzYWMxNTQ4YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQ2NGU1ODkxNmY5NDRmOTk3ODZkYjgyYmEzY2FmZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNTg3MjY4MSwgLTc1LjgzNzkwNDk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmOTRmMzljYzI4MzQzNWI4ZDY2YmQ3MWJkMTUxNjgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiZjQ2NmZmMTZlOTQxMmM4MWVlYjc0ZGI2OTQ0YjUyID0gJChgPGRpdiBpZD0iaHRtbF84YmY0NjZmZjE2ZTk0MTJjODFlZWI3NGRiNjk0NGI1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlsbGluZ3Rvbi1DcnVtcHRvbiBGb29kIFBhbnRyeSBvZiBBc2J1cnkgVU1DPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZjk0ZjM5Y2MyODM0MzViOGQ2NmJkNzFiZDE1MTY4My5zZXRDb250ZW50KGh0bWxfOGJmNDY2ZmYxNmU5NDEyYzgxZWViNzRkYjY5NDRiNTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGQ2NGU1ODkxNmY5NDRmOTk3ODZkYjgyYmEzY2FmZTQuYmluZFBvcHVwKHBvcHVwX2RmOTRmMzljYzI4MzQzNWI4ZDY2YmQ3MWJkMTUxNjgzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YTE2YjNhZjYxNzI0NjYyYjY0NmFhNzk5ZTI5OWE3OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5NzkwNTEzLCAtNzYuNjM3MjU1NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjk3ZWI0ZGFhNmZiNDRmNzhlY2MzMTk1NTVlMjUwZDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTZhNDU4M2Q1OGJmNGQzMjk2ZGE4MzQ0MDVhYWNmZDUgPSAkKGA8ZGl2IGlkPSJodG1sXzE2YTQ1ODNkNThiZjRkMzI5NmRhODM0NDA1YWFjZmQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVhdGVyIEhvcGUgQ09HSUMsIEluYzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjk3ZWI0ZGFhNmZiNDRmNzhlY2MzMTk1NTVlMjUwZDUuc2V0Q29udGVudChodG1sXzE2YTQ1ODNkNThiZjRkMzI5NmRhODM0NDA1YWFjZmQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdhMTZiM2FmNjE3MjQ2NjJiNjQ2YWE3OTllMjk5YTc5LmJpbmRQb3B1cChwb3B1cF9iOTdlYjRkYWE2ZmI0NGY3OGVjYzMxOTU1NWUyNTBkNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGZkZWM1Mzc2MmQ1NDVhNWEwYWM3NjJlYWE1YzU0ZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTc4ODgzOCwgLTc2LjY0NDIzOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmI2ZGU5Y2UyYTAxNDlmNzkxYzA4NjIzZGUxMzk3NjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI1NmQxODUzZGRmNDk5NWI2MGE3ZjVjZGRiNDAzOWQgPSAkKGA8ZGl2IGlkPSJodG1sXzYyNTZkMTg1M2RkZjQ5OTViNjBhN2Y1Y2RkYjQwMzlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXcgTW91bnQgWmlvbiBPdXRyZWFjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmI2ZGU5Y2UyYTAxNDlmNzkxYzA4NjIzZGUxMzk3NjAuc2V0Q29udGVudChodG1sXzYyNTZkMTg1M2RkZjQ5OTViNjBhN2Y1Y2RkYjQwMzlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhmZGVjNTM3NjJkNTQ1YTVhMGFjNzYyZWFhNWM1NGYwLmJpbmRQb3B1cChwb3B1cF9mYjZkZTljZTJhMDE0OWY3OTFjMDg2MjNkZTEzOTc2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWZjODYyODM5YWRhNDA2Yjk5MjcyMjI4NjU3MzBhNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMTk0NzUyMDAwMDAwMSwgLTc2LjYxNTkxNTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDc3YzMxOTE2OWI0NGI1MTk5ZDA2YTk3ZjlmNjU3ZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmNiYzQ4NDZiNDc0NDIzNGE3NDE5OWI2OWUyNjQ1ZjEgPSAkKGA8ZGl2IGlkPSJodG1sX2JjYmM0ODQ2YjQ3NDQyMzRhNzQxOTliNjllMjY0NWYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXJnYXJldCBCcmVudCBFbGVtLyBNaWRkbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3N2MzMTkxNjliNDRiNTE5OWQwNmE5N2Y5ZjY1N2RiLnNldENvbnRlbnQoaHRtbF9iY2JjNDg0NmI0NzQ0MjM0YTc0MTk5YjY5ZTI2NDVmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZmM4NjI4MzlhZGE0MDZiOTkyNzIyMjg2NTczMGE3My5iaW5kUG9wdXAocG9wdXBfZDc3YzMxOTE2OWI0NGI1MTk5ZDA2YTk3ZjlmNjU3ZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzNTY0YjIwN2M1ZjQ5YjQ4NDI1YjMxZjMyMmZjZTFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjEyNzU1MDYsIC03Ny43MzQ0OTI5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWZkZjMzMWExODk0YTQ0YmFmZGRmNTE4ZjUzMDkxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzMxZTIwZGQwZjI0ZWU0YjhjZWNjNTZhOTZmYTFkOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTczMWUyMGRkMGYyNGVlNGI4Y2VjYzU2YTk2ZmExZDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFudGlldGFtIEFjYWRlbXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlZmRmMzMxYTE4OTRhNDRiYWZkZGY1MThmNTMwOTEzLnNldENvbnRlbnQoaHRtbF9lNzMxZTIwZGQwZjI0ZWU0YjhjZWNjNTZhOTZmYTFkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MzU2NGIyMDdjNWY0OWI0ODQyNWIzMWYzMjJmY2UxZC5iaW5kUG9wdXAocG9wdXBfN2VmZGYzMzFhMTg5NGE0NGJhZmRkZjUxOGY1MzA5MTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiZTdhZmY0YWM0NzQ0YzA4NjU2NjdlN2UwOGFjM2M3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzE1MTU5NTcsIC03Ni42MTg2Mzg3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZmRiMTliMGVjYTk0MGY2OWEzNDJjYjkyYzdmZWFkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hY2U5OWU2YTc5ZDc0NGFmODAwMmQ1ZTM0MWE0ODVmZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWNlOTllNmE3OWQ3NDRhZjgwMDJkNWUzNDFhNDg1ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyYW5jaXNjYW4gQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmRiMTliMGVjYTk0MGY2OWEzNDJjYjkyYzdmZWFkZC5zZXRDb250ZW50KGh0bWxfYWNlOTllNmE3OWQ3NDRhZjgwMDJkNWUzNDFhNDg1ZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2JlN2FmZjRhYzQ3NDRjMDg2NTY2N2U3ZTA4YWMzYzcuYmluZFBvcHVwKHBvcHVwXzJmZGIxOWIwZWNhOTQwZjY5YTM0MmNiOTJjN2ZlYWRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMmNmZGYyMDM5MWU0YWM2OWMyNTg3YzdlYWMzZGQ1ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxNzk0NTQ1LCAtNzYuNjE0OTI0NTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2ZmNmY5MjYzNDEzNDEzYjgwYzc0NjQ3NzQxZGQ4NzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDdlMDcyOGE4NTYyNDg2MDhkMTg5NTFjMjJjZWIyNjcgPSAkKGA8ZGl2IGlkPSJodG1sXzA3ZTA3MjhhODU2MjQ4NjA4ZDE4OTUxYzIyY2ViMjY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Xb21lbiBFbXBvd2VyaW5nIFdvbWVuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZmY2ZjkyNjM0MTM0MTNiODBjNzQ2NDc3NDFkZDg3OS5zZXRDb250ZW50KGh0bWxfMDdlMDcyOGE4NTYyNDg2MDhkMTg5NTFjMjJjZWIyNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTJjZmRmMjAzOTFlNGFjNjljMjU4N2M3ZWFjM2RkNWQuYmluZFBvcHVwKHBvcHVwX2NmZjZmOTI2MzQxMzQxM2I4MGM3NDY0Nzc0MWRkODc5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMDA4NjdmZTIyYTk0MDVhYmRjNmMzMGVhOGFiYWE2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM0NDQ2MzI4LCAtNzcuNDc0Nzc0OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I0NTI5ZDdhNTUwNDFhYmJkNjMyMTg0ZWEyYzkyMGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWM5NTA2NmE2NTIxNDk2YThmOTNhYzQzNDA0NDcxZmUgPSAkKGA8ZGl2IGlkPSJodG1sX2FjOTUwNjZhNjUyMTQ5NmE4ZjkzYWM0MzQwNDQ3MWZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbW1hbnVlbCBUcmluaXR5IEx1dGhlcmFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjQ1MjlkN2E1NTA0MWFiYmQ2MzIxODRlYTJjOTIwZC5zZXRDb250ZW50KGh0bWxfYWM5NTA2NmE2NTIxNDk2YThmOTNhYzQzNDA0NDcxZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDAwODY3ZmUyMmE5NDA1YWJkYzZjMzBlYThhYmFhNjIuYmluZFBvcHVwKHBvcHVwXzNiNDUyOWQ3YTU1MDQxYWJiZDYzMjE4NGVhMmM5MjBkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YzU2ZTAyYjhmMWQ0ZWVlOGUxMzU0OGI1Y2M0MGU0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg4ODIxNSwgLTc1LjgxMDAyODY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEwYjBlMmVjZTg0MzQ0YmI4YTY1YmNkMjYwODAxMzM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxMzI5N2QwMDZhMjRkZTdhYjc3YzE2ZWU0ZGYzMmY5ID0gJChgPGRpdiBpZD0iaHRtbF81MTMyOTdkMDA2YTI0ZGU3YWI3N2MxNmVlNGRmMzJmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGVudG9uIENodXJjaCBvZiBGcmVlICBTZXZlbnRoIERheSBBZHZlbnRpc3RzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMGIwZTJlY2U4NDM0NGJiOGE2NWJjZDI2MDgwMTMzNy5zZXRDb250ZW50KGh0bWxfNTEzMjk3ZDAwNmEyNGRlN2FiNzdjMTZlZTRkZjMyZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWM1NmUwMmI4ZjFkNGVlZThlMTM1NDhiNWNjNDBlNGUuYmluZFBvcHVwKHBvcHVwXzEwYjBlMmVjZTg0MzQ0YmI4YTY1YmNkMjYwODAxMzM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MWMwYmY3OWU3NjA0ZmNlYTg4NjBjNmIwZjVkYjRlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjIxMDU5ODI5OTk5OTk5NCwgLTc2LjA2ODk5NTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwNGI3MTk5MzRmNzQ2OTA5YjA5MzBjNDE2ZmIxMTVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJlYjQ5ZmI5ZDE4YjQ4NzhhMGY3NjFiZTE0ZDAzODU2ID0gJChgPGRpdiBpZD0iaHRtbF8yZWI0OWZiOWQxOGI0ODc4YTBmNzYxYmUxNGQwMzg1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29tbXVuaXR5IEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMDRiNzE5OTM0Zjc0NjkwOWIwOTMwYzQxNmZiMTE1ZC5zZXRDb250ZW50KGh0bWxfMmViNDlmYjlkMThiNDg3OGEwZjc2MWJlMTRkMDM4NTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzFjMGJmNzllNzYwNGZjZWE4ODYwYzZiMGY1ZGI0ZTIuYmluZFBvcHVwKHBvcHVwX2MwNGI3MTk5MzRmNzQ2OTA5YjA5MzBjNDE2ZmIxMTVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80Yzk0ZWFkNDQxYmI0YWY5OTY5YWUzMmJiZWEzNGFhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjIxMDU5ODI5OTk5OTk5NCwgLTc2LjA2ODk5NTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5OTYxNDA1YmQ2MzQ1ZGJiMTE3OWVhMmRkNWFjMTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3ZTA3YjBkYWJmZTQ2Zjc4YjQ4ZDU1NzBlMzc3Yzg3ID0gJChgPGRpdiBpZD0iaHRtbF8xN2UwN2IwZGFiZmU0NmY3OGI0OGQ1NTcwZTM3N2M4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29tbXVuaXR5IEZvb2QgUGFudHJ5LS1LZW50IENvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTk2MTQwNWJkNjM0NWRiYjExNzllYTJkZDVhYzEyYS5zZXRDb250ZW50KGh0bWxfMTdlMDdiMGRhYmZlNDZmNzhiNDhkNTU3MGUzNzdjODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGM5NGVhZDQ0MWJiNGFmOTk2OWFlMzJiYmVhMzRhYWIuYmluZFBvcHVwKHBvcHVwXzk5OTYxNDA1YmQ2MzQ1ZGJiMTE3OWVhMmRkNWFjMTJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNmY3ZmQ3ZmJiYzQ0ZmE4ODFiNDNiMzQyNGY2NjljOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxNzk0NTQ1LCAtNzYuNjE0OTI0NTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzdlNzExOWJjZTNhNGMzM2JjNTA2Nzk0NjA1MDA5YmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmNiYmEyNjNjMGZhNDIxMzhkZjA1YTYzZGU1ZDhhZjYgPSAkKGA8ZGl2IGlkPSJodG1sX2JjYmJhMjYzYzBmYTQyMTM4ZGYwNWE2M2RlNWQ4YWY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Xb21lbiBFbXBvd2VyaW5nIFdvbWVuIE91dHJlYWNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jN2U3MTE5YmNlM2E0YzMzYmM1MDY3OTQ2MDUwMDliYS5zZXRDb250ZW50KGh0bWxfYmNiYmEyNjNjMGZhNDIxMzhkZjA1YTYzZGU1ZDhhZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjZmN2ZkN2ZiYmM0NGZhODgxYjQzYjM0MjRmNjY5YzkuYmluZFBvcHVwKHBvcHVwX2M3ZTcxMTliY2UzYTRjMzNiYzUwNjc5NDYwNTAwOWJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNWUzZWU5ZmI4NWM0NzFkOTI1YzlkNjRmMjM5ZjYxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM4OTUxNzQ1LCAtNzUuNTY5ODYwNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWUzNWI1Y2ZhMzFhNDg1YWI5ZDg5YzFjYzM1OTYwZTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGU4NGYyY2RhN2IyNDhjNGE1ZjlkZTY5YTcyOTE3YWIgPSAkKGA8ZGl2IGlkPSJodG1sXzhlODRmMmNkYTdiMjQ4YzRhNWY5ZGU2OWE3MjkxN2FiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZWxtYXJ2YSBFdmFuZ2VsaXN0aWMgRm9vZCBNaW5pc3RyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWUzNWI1Y2ZhMzFhNDg1YWI5ZDg5YzFjYzM1OTYwZTMuc2V0Q29udGVudChodG1sXzhlODRmMmNkYTdiMjQ4YzRhNWY5ZGU2OWE3MjkxN2FiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y1ZTNlZTlmYjg1YzQ3MWQ5MjVjOWQ2NGYyMzlmNjE2LmJpbmRQb3B1cChwb3B1cF81ZTM1YjVjZmEzMWE0ODVhYjlkODljMWNjMzU5NjBlMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDE3Y2FhYzc2NTI4NDdlZGEyNDA5ZDNiYTJjYjliODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zNjIwMzE1LCAtNzUuNTkzNjY5ODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTA0NWU0ZjczYTlkNDEzYWEyZjg0MWM5MTgzYWRjMzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTk0NmFmYjgzNGIwNDVhZDkxMzRlMDU2YzMyM2M4OGUgPSAkKGA8ZGl2IGlkPSJodG1sXzE5NDZhZmI4MzRiMDQ1YWQ5MTM0ZTA1NmMzMjNjODhlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYWx2YXRpb24gQXJteS1PYWsgU3RyZWV0PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMDQ1ZTRmNzNhOWQ0MTNhYTJmODQxYzkxODNhZGMzNy5zZXRDb250ZW50KGh0bWxfMTk0NmFmYjgzNGIwNDVhZDkxMzRlMDU2YzMyM2M4OGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDE3Y2FhYzc2NTI4NDdlZGEyNDA5ZDNiYTJjYjliODAuYmluZFBvcHVwKHBvcHVwXzEwNDVlNGY3M2E5ZDQxM2FhMmY4NDFjOTE4M2FkYzM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDlmN2RiZDViMDA0NzQxYTJjOTY5NDEzNmFjMTg5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjYyMTIxMTA0LCAtNzcuNDA0MTQ1NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGZiOWY0NWQ4YTYxNDEwNGIwNjFjMDBkM2FhMTEzYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTdlOTU5MDhlMTkzNGExZGJjZGQ1MDJhNTJkMDY4M2UgPSAkKGA8ZGl2IGlkPSJodG1sX2U3ZTk1OTA4ZTE5MzRhMWRiY2RkNTAyYTUyZDA2ODNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaHVybW9udCBNaWRkbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmYjlmNDVkOGE2MTQxMDRiMDYxYzAwZDNhYTExM2M0LnNldENvbnRlbnQoaHRtbF9lN2U5NTkwOGUxOTM0YTFkYmNkZDUwMmE1MmQwNjgzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZDlmN2RiZDViMDA0NzQxYTJjOTY5NDEzNmFjMTg5Yy5iaW5kUG9wdXAocG9wdXBfNGZiOWY0NWQ4YTYxNDEwNGIwNjFjMDBkM2FhMTEzYzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlMmM5ZThmMTI1ZTQwODhiNjQ5OTMwZjY0MWJkODI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzcwMjkwNDQsIC03NS42MDg0MDY2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YzhjYTQwYjkxNjQ0ZTYxOTM3NTZmNTc5ZjllOWIxMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMDgyZTcyZDBkNWI0MTA4OWI2ZDY5ZThmMmI5YmQ1YiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjA4MmU3MmQwZDViNDEwODliNmQ2OWU4ZjJiOWJkNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pZCBEYXkgQ2lyY2xlIG9mIFByYXllcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWM4Y2E0MGI5MTY0NGU2MTkzNzU2ZjU3OWY5ZTliMTEuc2V0Q29udGVudChodG1sX2IwODJlNzJkMGQ1YjQxMDg5YjZkNjllOGYyYjliZDViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhlMmM5ZThmMTI1ZTQwODhiNjQ5OTMwZjY0MWJkODI5LmJpbmRQb3B1cChwb3B1cF81YzhjYTQwYjkxNjQ0ZTYxOTM3NTZmNTc5ZjllOWIxMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTczOTNhMWVhYzI3NDAwYjk1M2UzNDRkY2Q1ZDBjMzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44OTEzMjk5NywgLTc1LjgyODA0NzE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkMmQ0ZmZlNmY0YjRjOWNiN2ZlMTYxNGYwOGFjYWE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZlNmJiOWNmYTYxMjRmYjVhM2RiNjEyNzgyODkxNDYzID0gJChgPGRpdiBpZD0iaHRtbF9mZTZiYjljZmE2MTI0ZmI1YTNkYjYxMjc4Mjg5MTQ2MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TG9ja2VybWFuIE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRkMmQ0ZmZlNmY0YjRjOWNiN2ZlMTYxNGYwOGFjYWE5LnNldENvbnRlbnQoaHRtbF9mZTZiYjljZmE2MTI0ZmI1YTNkYjYxMjc4Mjg5MTQ2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NzM5M2ExZWFjMjc0MDBiOTUzZTM0NGRjZDVkMGMzNC5iaW5kUG9wdXAocG9wdXBfNGQyZDRmZmU2ZjRiNGM5Y2I3ZmUxNjE0ZjA4YWNhYTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNlZTNiOTM3OTFlOTRmMjBiMmMyZDViZDdmZTg1YzExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzI0ODAxNDksIC03Ni42MDAyNjU0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZmZhZTkyZTRjN2M0NzE1YTAzZTc2NGZiOWY2MjgxOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OTUzMDU1MDllYjk0NjA5OWRmY2Q5OTk0YmU2ODE3MiA9ICQoYDxkaXYgaWQ9Imh0bWxfODk1MzA1NTA5ZWI5NDYwOTlkZmNkOTk5NGJlNjgxNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFiYm90dHN0b24gRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWZmYWU5MmU0YzdjNDcxNWEwM2U3NjRmYjlmNjI4MTkuc2V0Q29udGVudChodG1sXzg5NTMwNTUwOWViOTQ2MDk5ZGZjZDk5OTRiZTY4MTcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNlZTNiOTM3OTFlOTRmMjBiMmMyZDViZDdmZTg1YzExLmJpbmRQb3B1cChwb3B1cF9lZmZhZTkyZTRjN2M0NzE1YTAzZTc2NGZiOWY2MjgxOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDkwMWM4Zjk0NjEwNGFmNWE0OThiM2VjZTlhMzQ0Y2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMjMzODEwOSwgLTc2LjU5OTU5NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTlkODBhNmExZGM3NGIwNDhkYTcyOTM0ZThkMDMyOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRhZmZiMjI3ODlkNGMxZDk3MTI4MjE5YzFkMzY1MmIgPSAkKGA8ZGl2IGlkPSJodG1sX2E0YWZmYjIyNzg5ZDRjMWQ5NzEyODIxOWMxZDM2NTJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TZWNvbmQgU2hpbG9oIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTlkODBhNmExZGM3NGIwNDhkYTcyOTM0ZThkMDMyOTUuc2V0Q29udGVudChodG1sX2E0YWZmYjIyNzg5ZDRjMWQ5NzEyODIxOWMxZDM2NTJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA5MDFjOGY5NDYxMDRhZjVhNDk4YjNlY2U5YTM0NGNkLmJpbmRQb3B1cChwb3B1cF85OWQ4MGE2YTFkYzc0YjA0OGRhNzI5MzRlOGQwMzI5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWI5YWRjYmI0NDQyNGI1ZWI4YjE5ZmZiNzAyZjVlODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMTMzNzg1LCAtNzYuNjEzMjQwODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2E4NDQ5ZmVkOWY0NDk0ZjgxM2I0NDQyZGYxYzYxNjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjA1YTE0YzI2NWVlNGRkZjkyODM2M2Q0MWM3ZTliOGMgPSAkKGA8ZGl2IGlkPSJodG1sXzIwNWExNGMyNjVlZTRkZGY5MjgzNjNkNDFjN2U5YjhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EYWxsYXMgRi4gTmljaG9sYXMgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2E4NDQ5ZmVkOWY0NDk0ZjgxM2I0NDQyZGYxYzYxNjIuc2V0Q29udGVudChodG1sXzIwNWExNGMyNjVlZTRkZGY5MjgzNjNkNDFjN2U5YjhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFiOWFkY2JiNDQ0MjRiNWViOGIxOWZmYjcwMmY1ZTg5LmJpbmRQb3B1cChwb3B1cF83YTg0NDlmZWQ5ZjQ0OTRmODEzYjQ0NDJkZjFjNjE2MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2U4OWJmMmJlNTVhNDZiMDhlZDYyYTMyNjM5MGM0ZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40MTExODA0NywgLTc3LjQxODc0MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODU0NjM2ZjVmZTQ4NDJhYmI0NWZmOGM0OWFlMGQ4ZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTMwZGM1MDEzMWIwNDRmYmIxZGRlYTJmMmZiNGMwNWIgPSAkKGA8ZGl2IGlkPSJodG1sX2EzMGRjNTAxMzFiMDQ0ZmJiMWRkZWEyZjJmYjRjMDViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmVkZXJpY2sgUmVzY3VlIE1pc3Npb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1NDYzNmY1ZmU0ODQyYWJiNDVmZjhjNDlhZTBkOGYyLnNldENvbnRlbnQoaHRtbF9hMzBkYzUwMTMxYjA0NGZiYjFkZGVhMmYyZmI0YzA1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZTg5YmYyYmU1NWE0NmIwOGVkNjJhMzI2MzkwYzRmYy5iaW5kUG9wdXAocG9wdXBfODU0NjM2ZjVmZTQ4NDJhYmI0NWZmOGM0OWFlMGQ4ZjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5NTYxNTNjYWIwMTRmNThiN2NlZmI5MTFlNjBkOTkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzY5MTcwMTQsIC03NS41OTMwMDM0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMDJiNzEwNTAyMTc0ZjE0OTFhYzBkNjMyMDQwN2NmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYmU4NTk5NWViOWY0ZGJlOWVkZjEyNTYyZWNiMmZmNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWJlODU5OTVlYjlmNGRiZTllZGYxMjU2MmVjYjJmZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdGhlZHJhbCBvZiBMb3ZlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMDJiNzEwNTAyMTc0ZjE0OTFhYzBkNjMyMDQwN2NmNy5zZXRDb250ZW50KGh0bWxfMWJlODU5OTVlYjlmNGRiZTllZGYxMjU2MmVjYjJmZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDk1NjE1M2NhYjAxNGY1OGI3Y2VmYjkxMWU2MGQ5OTAuYmluZFBvcHVwKHBvcHVwXzMwMmI3MTA1MDIxNzRmMTQ5MWFjMGQ2MzIwNDA3Y2Y3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zODA2ZGRlOTk4NjQ0NzY1YmUxNTgwODQzN2ZhNzk2OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjU2OTQyNzE1LCAtNzYuMDc5ODM5OTAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTkyOGI1M2E1NGU3NDA5ZGIyYTgzODMyOGFkZmIzMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTkwMTVlM2IzOWE5NGI0ZDkyYjc4NzcxNTAzODE1MDYgPSAkKGA8ZGl2IGlkPSJodG1sX2U5MDE1ZTNiMzlhOTRiNGQ5MmI3ODc3MTUwMzgxNTA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXVnaCBDaGFwZWwtUEFOVFJZPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTI4YjUzYTU0ZTc0MDlkYjJhODM4MzI4YWRmYjMxNi5zZXRDb250ZW50KGh0bWxfZTkwMTVlM2IzOWE5NGI0ZDkyYjc4NzcxNTAzODE1MDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzgwNmRkZTk5ODY0NDc2NWJlMTU4MDg0MzdmYTc5NjguYmluZFBvcHVwKHBvcHVwX2E5MjhiNTNhNTRlNzQwOWRiMmE4MzgzMjhhZGZiMzE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDg3NGFmZTdkMDE0NTAxOWFiNGYyMGJmMGIzZmZlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA4NTMzODk2LCAtNzYuNTQ4Njc3NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjMwOTU5NDYyYzE3NDYwNGI0ODllMWM0NDRjM2U4YmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzBmYTc3ZjQ4Y2FjNGI5ZDhjYTg5YTAxZTQ4YWFjYTkgPSAkKGA8ZGl2IGlkPSJodG1sX2MwZmE3N2Y0OGNhYzRiOWQ4Y2E4OWEwMWU0OGFhY2E5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BQ0FOIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMzA5NTk0NjJjMTc0NjA0YjQ4OWUxYzQ0NGMzZThiZS5zZXRDb250ZW50KGh0bWxfYzBmYTc3ZjQ4Y2FjNGI5ZDhjYTg5YTAxZTQ4YWFjYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmQ4NzRhZmU3ZDAxNDUwMTlhYjRmMjBiZjBiM2ZmZTAuYmluZFBvcHVwKHBvcHVwX2IzMDk1OTQ2MmMxNzQ2MDRiNDg5ZTFjNDQ0YzNlOGJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOTliMjk1OGRiMWI0MTU2ODhkNzlkMWY3YzM5MGI2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxNTc5ODMxLCAtNzYuNjE2ODI1MDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmExOWZhYTNhYmFjNDljMmJmNzBhMDRiMDcyOTc3ZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjc4MjFmNWE0NWI0NGZkYmExZjMwYzY5OTRiN2ZmZDggPSAkKGA8ZGl2IGlkPSJodG1sXzY3ODIxZjVhNDViNDRmZGJhMWYzMGM2OTk0YjdmZmQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5ZLkUuUy4gRHJvcC1pbiBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhMTlmYWEzYWJhYzQ5YzJiZjcwYTA0YjA3Mjk3N2YyLnNldENvbnRlbnQoaHRtbF82NzgyMWY1YTQ1YjQ0ZmRiYTFmMzBjNjk5NGI3ZmZkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOTliMjk1OGRiMWI0MTU2ODhkNzlkMWY3YzM5MGI2NC5iaW5kUG9wdXAocG9wdXBfYmExOWZhYTNhYmFjNDljMmJmNzBhMDRiMDcyOTc3ZjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2MTdhYjc1YTYwNTRhMWViMzJlYTlmOWFmOWE3M2MzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzE2NjM1MTUsIC03Ni42MTUyNjUwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNDYxN2YyNjNlMjU0MWExYjZlZTI3N2E1Nzc0MzI5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ODEyNzk2ZDc0N2I0OTM1YmI0MWM5MDkxNmFlZDY3ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzgxMjc5NmQ3NDdiNDkzNWJiNDFjOTA5MTZhZWQ2N2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBBbnRpb2NoIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQ2MTdmMjYzZTI1NDFhMWI2ZWUyNzdhNTc3NDMyOWMuc2V0Q29udGVudChodG1sXzc4MTI3OTZkNzQ3YjQ5MzViYjQxYzkwOTE2YWVkNjdlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE2MTdhYjc1YTYwNTRhMWViMzJlYTlmOWFmOWE3M2MzLmJpbmRQb3B1cChwb3B1cF9lNDYxN2YyNjNlMjU0MWExYjZlZTI3N2E1Nzc0MzI5YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzBiMjczMjdkZTk3NGFiYTlkNmEyYWI4ZGEzYTVkMjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNTgxODY4NSwgLTc2LjQ2MjMwNDk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyOWQyYmFkNjk4NzQ3NTRhNTgyNWUzMTVhOTIxYWIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4Yjc0ODAxOWU4ZTRhODk5MWFmNzU1OTAwOTliYTg4ID0gJChgPGRpdiBpZD0iaHRtbF8xOGI3NDgwMTllOGU0YTg5OTFhZjc1NTkwMDk5YmE4OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGxlYXNhbnQgWmlvbiBZb3V0aCBPdXRyZWFjaCBDZW50ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyOWQyYmFkNjk4NzQ3NTRhNTgyNWUzMTVhOTIxYWIyLnNldENvbnRlbnQoaHRtbF8xOGI3NDgwMTllOGU0YTg5OTFhZjc1NTkwMDk5YmE4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMGIyNzMyN2RlOTc0YWJhOWQ2YTJhYjhkYTNhNWQyMS5iaW5kUG9wdXAocG9wdXBfMzI5ZDJiYWQ2OTg3NDc1NGE1ODI1ZTMxNWE5MjFhYjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QzYjk4Yzg3ZmQ1MjQ1MTE5Y2RiY2IyZDIzOTc1ZDg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzE2NjAwMTcsIC03Ni42MDg1OTU0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZjI4ZjZiNThkN2Q0YjA4OTVmMjY2NjU5YmQyZDVlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMGUxMjI4OGMwOTU0MzMzYTYxMGY0MTE1NGE2NjMwYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTBlMTIyODhjMDk1NDMzM2E2MTBmNDExNTRhNjYzMGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRvbmFsZCBCZW50bGV5IFN0dWRlbnQgRi9QPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZjI4ZjZiNThkN2Q0YjA4OTVmMjY2NjU5YmQyZDVlOC5zZXRDb250ZW50KGh0bWxfZTBlMTIyODhjMDk1NDMzM2E2MTBmNDExNTRhNjYzMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDNiOThjODdmZDUyNDUxMTljZGJjYjJkMjM5NzVkODUuYmluZFBvcHVwKHBvcHVwXzBmMjhmNmI1OGQ3ZDRiMDg5NWYyNjY2NTliZDJkNWU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NjkxODcyMDlmMDk0MWNmYWI0MWFiZGZmM2EzYTYwZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxOTMyNzE3LCAtNzYuNjAwODY5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWE5ODQyOGFmMzc3NGFiY2E0MmNjZjRlNzc5Y2M4ZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzdjYzgzMGVkZjQ4NGQyMWE1YzNkYWU5OTBkZDQ5MjUgPSAkKGA8ZGl2IGlkPSJodG1sXzc3Y2M4MzBlZGY0ODRkMjFhNWMzZGFlOTkwZGQ0OTI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb25hcmNoIEFjYWRlbXkgQmFsdGltb3JlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTk4NDI4YWYzNzc0YWJjYTQyY2NmNGU3NzljYzhmYy5zZXRDb250ZW50KGh0bWxfNzdjYzgzMGVkZjQ4NGQyMWE1YzNkYWU5OTBkZDQ5MjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTY5MTg3MjA5ZjA5NDFjZmFiNDFhYmRmZjNhM2E2MGUuYmluZFBvcHVwKHBvcHVwX2FhOTg0MjhhZjM3NzRhYmNhNDJjY2Y0ZTc3OWNjOGZjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OWJiNzcyYTNjYzM0MzdkYjkyNDU1MzNjMTM1MDAxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY1ODIyNTQ3LCAtNzguOTI5MTUyNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWQ3ZWI3MDhjZWRkNDE5YThiMjA2ZTE5MmUyNDUyNTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWZkMWQ5YmRhNDgzNDM3ZWJlOWY2ZWQ4MWMzNmQwZDkgPSAkKGA8ZGl2IGlkPSJodG1sXzVmZDFkOWJkYTQ4MzQzN2ViZTlmNmVkODFjMzZkMGQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gcm9zdGJ1cmcgQXJlYSBJbnRlci1GYWl0aDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWQ3ZWI3MDhjZWRkNDE5YThiMjA2ZTE5MmUyNDUyNTMuc2V0Q29udGVudChodG1sXzVmZDFkOWJkYTQ4MzQzN2ViZTlmNmVkODFjMzZkMGQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY5YmI3NzJhM2NjMzQzN2RiOTI0NTUzM2MxMzUwMDEwLmJpbmRQb3B1cChwb3B1cF81ZDdlYjcwOGNlZGQ0MTlhOGIyMDZlMTkyZTI0NTI1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzAyMzAzZmU1NTEwNDI1NWE1YzVmYmE2YmZiOTljMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMzAyNywgLTc2LjYwMzYyODAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmZDkyOWM0YWQ3MTQ5ZmY4OGY2ODI5NDBhZGZkOGU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5ZmI1ZGNjMTkzYzQyOTFiNTc5OGIwNjBkYmNhNjJhID0gJChgPGRpdiBpZD0iaHRtbF84OWZiNWRjYzE5M2M0MjkxYjU3OThiMDYwZGJjYTYyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2F2ZXJseSBFbGVtZW50YXJ5L01pZGRsZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmZkOTI5YzRhZDcxNDlmZjg4ZjY4Mjk0MGFkZmQ4ZTguc2V0Q29udGVudChodG1sXzg5ZmI1ZGNjMTkzYzQyOTFiNTc5OGIwNjBkYmNhNjJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwMjMwM2ZlNTUxMDQyNTVhNWM1ZmJhNmJmYjk5YzAwLmJpbmRQb3B1cChwb3B1cF82ZmQ5MjljNGFkNzE0OWZmODhmNjgyOTQwYWRmZDhlOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzZlODM2NTdjOGU1NDYxMWI4OWZiMjgwNDU5YmQzNzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMjkxMTg5NywgLTc2LjYxNzk3MzI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjOGU4NjI3MWQxNzQ2ODM4OTVhNjRhNjAxOWNjNGIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0NGFkYWNmZGY2ODRhZDdiOWE0YWUzNDRlZmVkNTg1ID0gJChgPGRpdiBpZD0iaHRtbF80NDRhZGFjZmRmNjg0YWQ3YjlhNGFlMzQ0ZWZlZDU4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Sm9obnMgSG9wa2lucyBVbml2ZXJzaXR5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzhlODYyNzFkMTc0NjgzODk1YTY0YTYwMTljYzRiMS5zZXRDb250ZW50KGh0bWxfNDQ0YWRhY2ZkZjY4NGFkN2I5YTRhZTM0NGVmZWQ1ODUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzZlODM2NTdjOGU1NDYxMWI4OWZiMjgwNDU5YmQzNzUuYmluZFBvcHVwKHBvcHVwXzJjOGU4NjI3MWQxNzQ2ODM4OTVhNjRhNjAxOWNjNGIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NzQwZTFlMzY3MTA0NGFmYWQxMDU2OWVkODIxMGIxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMzMDA2ODkyLCAtNzYuNjA4MjE2MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWIxOGY5NWUxNWExNGUwMDk3NDMzN2M2MTkxNDk2NzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjYyNjZhMWM1ZjBiNDE2NWI4YzI4YzRjNTI3YTk2MTkgPSAkKGA8ZGl2IGlkPSJodG1sXzY2MjY2YTFjNWYwYjQxNjViOGMyOGM0YzUyN2E5NjE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Vbml0ZWQgQ2hyaXN0IFNldmVudGggRGF5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjE4Zjk1ZTE1YTE0ZTAwOTc0MzM3YzYxOTE0OTY3Mi5zZXRDb250ZW50KGh0bWxfNjYyNjZhMWM1ZjBiNDE2NWI4YzI4YzRjNTI3YTk2MTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDc0MGUxZTM2NzEwNDRhZmFkMTA1NjllZDgyMTBiMWYuYmluZFBvcHVwKHBvcHVwXzFiMThmOTVlMTVhMTRlMDA5NzQzMzdjNjE5MTQ5NjcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMTAzNjcxOTRkOTg0ODUwODNjM2MzNTdhM2RiYjUxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjUzNjM5Njg3LCAtNzYuOTkyOTM0NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjM2Yjc3MDEyZTYxNDNjNTlmYjcyZmNkMjViNDIzYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjE5YWE1YTY4NjI3NGQ1MGI4MjFjODlmODE3MDFiNWMgPSAkKGA8ZGl2IGlkPSJodG1sXzYxOWFhNWE2ODYyNzRkNTBiODIxYzg5ZjgxNzAxYjVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HYXRld2F5IC8gQ3Jvc3Nyb2FkcyBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzNmI3NzAxMmU2MTQzYzU5ZmI3MmZjZDI1YjQyM2EwLnNldENvbnRlbnQoaHRtbF82MTlhYTVhNjg2Mjc0ZDUwYjgyMWM4OWY4MTcwMWI1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMTAzNjcxOTRkOTg0ODUwODNjM2MzNTdhM2RiYjUxMi5iaW5kUG9wdXAocG9wdXBfYjM2Yjc3MDEyZTYxNDNjNTlmYjcyZmNkMjViNDIzYTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiZGFkM2I2M2VmZTQyMTU4MTk2OGYxNzE1MzZkMThjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzMyMTUyODgsIC03Ni41ODkwMTUxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZDdiZGY2ZmQ2Y2U0ZjVlYTQzYTgyMWUwOTgyODE2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZTUxYTZiNzA0Mzg0NTY1OWM0YzZjODg3ZmM2YjliMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWU1MWE2YjcwNDM4NDU2NTljNGM2Yzg4N2ZjNmI5YjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1lcmdlbnRoYWxlciBWb2NhdGlvbmFsPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZDdiZGY2ZmQ2Y2U0ZjVlYTQzYTgyMWUwOTgyODE2YS5zZXRDb250ZW50KGh0bWxfYWU1MWE2YjcwNDM4NDU2NTljNGM2Yzg4N2ZjNmI5YjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGJkYWQzYjYzZWZlNDIxNTgxOTY4ZjE3MTUzNmQxOGMuYmluZFBvcHVwKHBvcHVwX2JkN2JkZjZmZDZjZTRmNWVhNDNhODIxZTA5ODI4MTZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMjRiODRmODQ5NWY0NmJhODFjZDBlNzk3MjI3NWU5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxODA1NTUxLCAtNzYuNjEwMTE5MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmFjODg1NmM1Y2FmNGVjY2FjNTA3OTdhM2QwMTRlZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjM1ZTY2YjdmMjkwNDUxMTgzMmYyY2I4ZTU2NTQzYzcgPSAkKGA8ZGl2IGlkPSJodG1sX2YzNWU2NmI3ZjI5MDQ1MTE4MzJmMmNiOGU1NjU0M2M3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYW5uYSBIb3VzZSBTb3VwIEtpdGNoZW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhYzg4NTZjNWNhZjRlY2NhYzUwNzk3YTNkMDE0ZWU0LnNldENvbnRlbnQoaHRtbF9mMzVlNjZiN2YyOTA0NTExODMyZjJjYjhlNTY1NDNjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMjRiODRmODQ5NWY0NmJhODFjZDBlNzk3MjI3NWU5OC5iaW5kUG9wdXAocG9wdXBfMmFjODg1NmM1Y2FmNGVjY2FjNTA3OTdhM2QwMTRlZTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5NmFkNThjNTVmZjQxYzE4MWYzN2FjNzBiZjAwN2E4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzE0NjM3OTksIC03Ni42MDg2NzEyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODc3NThkMmNjMTg0NTdiODYyM2RiNDU5MjE3ZDU2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYmE5OWEzOWE1ODk0Nzc5OGU3MDM5M2UwOGIyNTk2NyA9ICQoYDxkaXYgaWQ9Imh0bWxfZWJhOTlhMzlhNTg5NDc3OThlNzAzOTNlMDhiMjU5NjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBBbm4gUm9tYW4gQ2F0aG9saWMgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODc3NThkMmNjMTg0NTdiODYyM2RiNDU5MjE3ZDU2My5zZXRDb250ZW50KGh0bWxfZWJhOTlhMzlhNTg5NDc3OThlNzAzOTNlMDhiMjU5NjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzk2YWQ1OGM1NWZmNDFjMTgxZjM3YWM3MGJmMDA3YTguYmluZFBvcHVwKHBvcHVwX2Q4Nzc1OGQyY2MxODQ1N2I4NjIzZGI0NTkyMTdkNTYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOTJhN2JkNWJjYTY0YzgyOWE5YmZlM2M1MGEwZmQ5NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkyNjg5NjU1LCAtNzYuNjA2MjIzOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODgzNThiYTkxNDc1NDRlOWFjMmZjYjliMTM4NjczOWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2VjMmUxMmMxZjA2NDRlOGJmNmY3Y2IxN2YyZWJjMGMgPSAkKGA8ZGl2IGlkPSJodG1sXzNlYzJlMTJjMWYwNjQ0ZThiZjZmN2NiMTdmMmViYzBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZhIFRyYWNlIEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODM1OGJhOTE0NzU0NGU5YWMyZmNiOWIxMzg2NzM5YS5zZXRDb250ZW50KGh0bWxfM2VjMmUxMmMxZjA2NDRlOGJmNmY3Y2IxN2YyZWJjMGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzkyYTdiZDViY2E2NGM4MjlhOWJmZTNjNTBhMGZkOTcuYmluZFBvcHVwKHBvcHVwXzg4MzU4YmE5MTQ3NTQ0ZTlhYzJmY2I5YjEzODY3MzlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGEyZTFmZjM3ZTA0Yjc2Yjk2M2I2NjdjNmQ4YmFkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMxODMzNTUzLCAtNzYuNjAzMjcwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yN2JmMWM2NDJlODU0M2JlYThmNjk5OTNhZWQzODMwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MDhjNmExODIxZmM0M2Q1OGIxYTlhMGU1NDE0MGMxNSA9ICQoYDxkaXYgaWQ9Imh0bWxfODA4YzZhMTgyMWZjNDNkNThiMWE5YTBlNTQxNDBjMTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNwaXJpdCBvZiBGYWl0aCBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjdiZjFjNjQyZTg1NDNiZWE4ZjY5OTkzYWVkMzgzMDIuc2V0Q29udGVudChodG1sXzgwOGM2YTE4MjFmYzQzZDU4YjFhOWEwZTU0MTQwYzE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE4YTJlMWZmMzdlMDRiNzZiOTYzYjY2N2M2ZDhiYWQ4LmJpbmRQb3B1cChwb3B1cF8yN2JmMWM2NDJlODU0M2JlYThmNjk5OTNhZWQzODMwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWNkNjlkOTQyMGYyNGExMmEwMzMwOTAwZjg1ODRhMTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTIzNzk1MSwgLTc2LjYzNTEwODYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiYTEyOWY4MGYwYTRkYjM4OGI5ZGQ5MjU3YzE1NmVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjNzc4ODMyMTFlNjRhYjE4MzYyMTlhOWUxM2I2ZWRlID0gJChgPGRpdiBpZD0iaHRtbF9lYzc3ODgzMjExZTY0YWIxODM2MjE5YTllMTNiNmVkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RXhjZWwgQWNhZGVteTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2JhMTI5ZjgwZjBhNGRiMzg4YjlkZDkyNTdjMTU2ZWMuc2V0Q29udGVudChodG1sX2VjNzc4ODMyMTFlNjRhYjE4MzYyMTlhOWUxM2I2ZWRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjZDY5ZDk0MjBmMjRhMTJhMDMzMDkwMGY4NTg0YTE1LmJpbmRQb3B1cChwb3B1cF9jYmExMjlmODBmMGE0ZGIzODhiOWRkOTI1N2MxNTZlYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzM1MjcwNDc5NWNiNGRkNWJhZjU0NThhMGQ4NGNjZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40NDA4MzM4MiwgLTc3LjA1NTU0MjQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiMjI4NmE2MDgwNDQ4NzM4NmRiNmYzYzA4ODZmMWQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkOTE3MzlmZDMzZTQ3MTJhZDcwOTBkYjE2NGExZWM4ID0gJChgPGRpdiBpZD0iaHRtbF9mZDkxNzM5ZmQzM2U0NzEyYWQ3MDkwZGIxNjRhMWVjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9jayBvZiBIZWxwIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYjIyODZhNjA4MDQ0ODczODZkYjZmM2MwODg2ZjFkMy5zZXRDb250ZW50KGh0bWxfZmQ5MTczOWZkMzNlNDcxMmFkNzA5MGRiMTY0YTFlYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzM1MjcwNDc5NWNiNGRkNWJhZjU0NThhMGQ4NGNjZTcuYmluZFBvcHVwKHBvcHVwX2ZiMjI4NmE2MDgwNDQ4NzM4NmRiNmYzYzA4ODZmMWQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDc0MTI2MDIyOGI0NmJhOGNhMDE4OTc2OWFlNWI5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjQ4ODg1MTk0LCAtNzUuODMzNDE2OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzUyOWNlOTBhYzcyNDlmNWJlMWI1NWIyODJkZjNiMWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTg2OWJmMDY3YjUwNDQ0MjllZGFjZmEyZDgwMTg3ZWQgPSAkKGA8ZGl2IGlkPSJodG1sXzk4NjliZjA2N2I1MDQ0NDI5ZWRhY2ZhMmQ4MDE4N2VkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WaWVubmEgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1MjljZTkwYWM3MjQ5ZjViZTFiNTViMjgyZGYzYjFlLnNldENvbnRlbnQoaHRtbF85ODY5YmYwNjdiNTA0NDQyOWVkYWNmYTJkODAxODdlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZDc0MTI2MDIyOGI0NmJhOGNhMDE4OTc2OWFlNWI5OS5iaW5kUG9wdXAocG9wdXBfMzUyOWNlOTBhYzcyNDlmNWJlMWI1NWIyODJkZjNiMWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4NDg5NDI1NmZjYTQzNTViYjhjYmQ4NzVmMDQyYjg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTYwMjAyMTUsIC03Ni45OTI2Nzg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kN2RlMTk2NzM2NDk0OWM1OTliY2IzNzU2ZDc4NGM2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzY1YWRiMzY0MGI0ZTRlOWQ4NTMxMWJmMTMwYjEzMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzM2NWFkYjM2NDBiNGU0ZTlkODUzMTFiZjEzMGIxMzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcnJvbGwgU3ByaW5ncyBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3ZGUxOTY3MzY0OTQ5YzU5OWJjYjM3NTZkNzg0YzYwLnNldENvbnRlbnQoaHRtbF8zMzY1YWRiMzY0MGI0ZTRlOWQ4NTMxMWJmMTMwYjEzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lODQ4OTQyNTZmY2E0MzU1YmI4Y2JkODc1ZjA0MmI4NS5iaW5kUG9wdXAocG9wdXBfZDdkZTE5NjczNjQ5NDljNTk5YmNiMzc1NmQ3ODRjNjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1Y2IwYmQyNDEwMDQ3MDZiNzI2YTE2YTFhN2UyYWMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzQxNTMyODUsIC03Ni40NTUxNTQ3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NGI5ZDMwMzllYjQ0ZWY0YWRlZTdhYmZmOTlkYzBlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ODQ3ODFlODYwZTg0ZGU5YWM1NWNmYmQxMThkYTI4ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjg0NzgxZTg2MGU4NGRlOWFjNTVjZmJkMTE4ZGEyOGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZpY3RvcnkgVmlsbGEgRWxlbWVudGFyeSBzY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0YjlkMzAzOWViNDRlZjRhZGVlN2FiZmY5OWRjMGVjLnNldENvbnRlbnQoaHRtbF82ODQ3ODFlODYwZTg0ZGU5YWM1NWNmYmQxMThkYTI4ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNWNiMGJkMjQxMDA0NzA2YjcyNmExNmExYTdlMmFjMy5iaW5kUG9wdXAocG9wdXBfNjRiOWQzMDM5ZWI0NGVmNGFkZWU3YWJmZjk5ZGMwZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1YTEyMGFlZjFkOTQ5MTVhZmFiMzQxYTBlNzk1OGI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzA3NTQ4MjUsIC03Ni40NzUxMjQwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MGNmNDZiZjMzNmI0YzliOTdjZjhjZjY2ODZkYjkyYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NTEwNGZlMDI5OWU0OWE0OWU2MGRhYzA5MzcyZDQzZiA9ICQoYDxkaXYgaWQ9Imh0bWxfODUxMDRmZTAyOTllNDlhNDllNjBkYWMwOTM3MmQ0M2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBMaWZlIFNhbmN0dWFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDBjZjQ2YmYzMzZiNGM5Yjk3Y2Y4Y2Y2Njg2ZGI5MmIuc2V0Q29udGVudChodG1sXzg1MTA0ZmUwMjk5ZTQ5YTQ5ZTYwZGFjMDkzNzJkNDNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ1YTEyMGFlZjFkOTQ5MTVhZmFiMzQxYTBlNzk1OGI5LmJpbmRQb3B1cChwb3B1cF80MGNmNDZiZjMzNmI0YzliOTdjZjhjZjY2ODZkYjkyYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTUzOGJiMjg0ZjEyNDA4NWI2Zjg3NmUzOTBkNzc2YzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTA4NTg0NSwgLTc2LjYzOTc1MTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3MmQzYTg5MzlmZjRkM2ZhZGUxNzcwZTlhZGY1OTc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1ZjU1NjQ2YmE1NjQzMTk4OWQwZmFiNjRlNTNkYmExID0gJChgPGRpdiBpZD0iaHRtbF9mNWY1NTY0NmJhNTY0MzE5ODlkMGZhYjY0ZTUzZGJhMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnJhbmtsaW4gU3F1YXJlIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3MmQzYTg5MzlmZjRkM2ZhZGUxNzcwZTlhZGY1OTc0LnNldENvbnRlbnQoaHRtbF9mNWY1NTY0NmJhNTY0MzE5ODlkMGZhYjY0ZTUzZGJhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNTM4YmIyODRmMTI0MDg1YjZmODc2ZTM5MGQ3NzZjOS5iaW5kUG9wdXAocG9wdXBfZDcyZDNhODkzOWZmNGQzZmFkZTE3NzBlOWFkZjU5NzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjMTNlMmVjMzgyZDQxMTBiNzdmNmM1ZWI1MDRmMTI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjg1MTMzNSwgLTc2LjY0Nzg0MzI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyNWIwZTI5MjE3YjQxZjFhMzZiMzE2ZGM2OTgxNTVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNlZjNhYTM3MTQxZjQ1ZmE4M2Q4NmQyN2VmYzViOTkzID0gJChgPGRpdiBpZD0iaHRtbF8zZWYzYWEzNzE0MWY0NWZhODNkODZkMjdlZmM1Yjk5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VXMgSGVscGluZyBVcyBPdXRyZWFjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjI1YjBlMjkyMTdiNDFmMWEzNmIzMTZkYzY5ODE1NWYuc2V0Q29udGVudChodG1sXzNlZjNhYTM3MTQxZjQ1ZmE4M2Q4NmQyN2VmYzViOTkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjMTNlMmVjMzgyZDQxMTBiNzdmNmM1ZWI1MDRmMTI3LmJpbmRQb3B1cChwb3B1cF9iMjViMGUyOTIxN2I0MWYxYTM2YjMxNmRjNjk4MTU1ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjEyMzk3NmU2OWUyNGRkNWJhYzM0NDA2NGNhNmVjMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yODgwMDk1NSwgLTc2LjY0OTc1MDU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkNzEzYjE0M2UzYjQ2OGM5YzEyZTVlNTZiNGQ2ZGFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5YzM4MjllYzE5MzQ3NmQ5MTI1ZmU4N2QyMjU0MjEzID0gJChgPGRpdiBpZD0iaHRtbF9iOWMzODI5ZWMxOTM0NzZkOTEyNWZlODdkMjI1NDIxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbCBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWQ3MTNiMTQzZTNiNDY4YzljMTJlNWU1NmI0ZDZkYWQuc2V0Q29udGVudChodG1sX2I5YzM4MjllYzE5MzQ3NmQ5MTI1ZmU4N2QyMjU0MjEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIxMjM5NzZlNjllMjRkZDViYWMzNDQwNjRjYTZlYzI1LmJpbmRQb3B1cChwb3B1cF9hZDcxM2IxNDNlM2I0NjhjOWMxMmU1ZTU2YjRkNmRhZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTA0MjhlOTZhM2M1NGFlYWJiMWIwZjdmMGMyMGVlZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40MTQyNzA4MSwgLTc2LjU5ODkwMzMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdiNWQ4YjhiYTBmZDRmY2Q5YWE2NDZmYTFhMDViN2M2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVjY2YyMGNlNzYzNjQwNjRhNmI5YzdjN2YxMGYyOTI2ID0gJChgPGRpdiBpZD0iaHRtbF81Y2NmMjBjZTc2MzY0MDY0YTZiOWM3YzdmMTBmMjkyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG93c29uIFVNQzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2I1ZDhiOGJhMGZkNGZjZDlhYTY0NmZhMWEwNWI3YzYuc2V0Q29udGVudChodG1sXzVjY2YyMGNlNzYzNjQwNjRhNmI5YzdjN2YxMGYyOTI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwNDI4ZTk2YTNjNTRhZWFiYjFiMGY3ZjBjMjBlZWVhLmJpbmRQb3B1cChwb3B1cF83YjVkOGI4YmEwZmQ0ZmNkOWFhNjQ2ZmExYTA1YjdjNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2M2ZjE5OWVkYjhjNGZkMDg2NjI0ZmRjYmJjMGZjOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTE0OTcwOCwgLTc2LjY0NTM5ODUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1MmI4YWU1MDc4YTQ0Mzc5NTZmZjNjZDVkMGM3ZDQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkZjZmZTI4NTE5MzQzOGNiOGJkNTliOGUzZDMyMzY4ID0gJChgPGRpdiBpZD0iaHRtbF8xZGY2ZmUyODUxOTM0MzhjYjhiZDU5YjhlM2QzMjM2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIFBlb3BsZXMgQ2h1cmNoIG9mIEJhbHRvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNTJiOGFlNTA3OGE0NDM3OTU2ZmYzY2Q1ZDBjN2Q0My5zZXRDb250ZW50KGh0bWxfMWRmNmZlMjg1MTkzNDM4Y2I4YmQ1OWI4ZTNkMzIzNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2M2ZjE5OWVkYjhjNGZkMDg2NjI0ZmRjYmJjMGZjOWUuYmluZFBvcHVwKHBvcHVwX2E1MmI4YWU1MDc4YTQ0Mzc5NTZmZjNjZDVkMGM3ZDQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MjA5N2Y4MDg5NTg0M2ZlYTZkNGE1MGM3MWM1YzZjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM2Nzg0MDUzLCAtNzYuNzE2NTg5ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDdiZjNkY2JiZmQ4NDI4MTliZTc2MjFiMTY4ODUwMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQwMDVlYTQ3NGRhNDhhNjg0Y2ZjNjdjYWIyYzE3ZTAgPSAkKGA8ZGl2IGlkPSJodG1sXzc0MDA1ZWE0NzRkYTQ4YTY4NGNmYzY3Y2FiMmMxN2UwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gb290IFByaW50cyBPZiBIb3BlIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDdiZjNkY2JiZmQ4NDI4MTliZTc2MjFiMTY4ODUwMzMuc2V0Q29udGVudChodG1sXzc0MDA1ZWE0NzRkYTQ4YTY4NGNmYzY3Y2FiMmMxN2UwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUyMDk3ZjgwODk1ODQzZmVhNmQ0YTUwYzcxYzVjNmM0LmJpbmRQb3B1cChwb3B1cF80N2JmM2RjYmJmZDg0MjgxOWJlNzYyMWIxNjg4NTAzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTNjYTRiMTViYmVmNDk2YzllNTAxYjUzMDVkNmJjZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMjYxMzY0NywgLTc2LjQ2MTU0NjUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzOTNjOGNkMDZhZjQwNjZhYTFkMWY5NjJlZWU5N2I1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjN2I4NDRiNWE1MTRmZGRhOTUzMzE5M2NlZWQ1ZjY5ID0gJChgPGRpdiBpZD0iaHRtbF9hYzdiODQ0YjVhNTE0ZmRkYTk1MzMxOTNjZWVkNWY2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2Vud29vZCBIaWdoIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzM5M2M4Y2QwNmFmNDA2NmFhMWQxZjk2MmVlZTk3YjUuc2V0Q29udGVudChodG1sX2FjN2I4NDRiNWE1MTRmZGRhOTUzMzE5M2NlZWQ1ZjY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzY2E0YjE1YmJlZjQ5NmM5ZTUwMWI1MzA1ZDZiY2QyLmJpbmRQb3B1cChwb3B1cF9jMzkzYzhjZDA2YWY0MDY2YWExZDFmOTYyZWVlOTdiNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDFkOThiOWY5Mjc3NGZiODgwNzAxODE3NzM3M2RhMTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yODkyMDk1LCAtNzYuNjU0OTYwNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWNmOGNmMzRjMWRmNDlmMWE0ZmM5NzI3OGJkNDU3MDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmI4MjczZjNkY2IyNDUzNDllMzlkYzg5N2E1OTljODYgPSAkKGA8ZGl2IGlkPSJodG1sXzJiODI3M2YzZGNiMjQ1MzQ5ZTM5ZGM4OTdhNTk5Yzg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaHVyY2ggb2YgdGhlIExpdmluZyBHb2Q8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjZjhjZjM0YzFkZjQ5ZjFhNGZjOTcyNzhiZDQ1NzAxLnNldENvbnRlbnQoaHRtbF8yYjgyNzNmM2RjYjI0NTM0OWUzOWRjODk3YTU5OWM4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MWQ5OGI5ZjkyNzc0ZmI4ODA3MDE4MTc3MzczZGExMy5iaW5kUG9wdXAocG9wdXBfZWNmOGNmMzRjMWRmNDlmMWE0ZmM5NzI3OGJkNDU3MDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhYWMwZWUzYjJhNjRmNjQ5MDJhZWI5MjllODRlNTU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzc2NjU0OTksIC03NS41ODY3ODY4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNTFjODY1ZTVkNDE0MmU2YTc2NGY2ZTE3YTdmNDQxZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZDJjYzk1NTA2OGU0MTFmYjI3NWJiMzgzYTc5YTc5OCA9ICQoYDxkaXYgaWQ9Imh0bWxfNmQyY2M5NTUwNjhlNDExZmIyNzViYjM4M2E3OWE3OTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNob2ljZXMgQWNhZGVteTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTUxYzg2NWU1ZDQxNDJlNmE3NjRmNmUxN2E3ZjQ0MWYuc2V0Q29udGVudChodG1sXzZkMmNjOTU1MDY4ZTQxMWZiMjc1YmIzODNhNzlhNzk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJhYWMwZWUzYjJhNjRmNjQ5MDJhZWI5MjllODRlNTU4LmJpbmRQb3B1cChwb3B1cF9hNTFjODY1ZTVkNDE0MmU2YTc2NGY2ZTE3YTdmNDQxZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGNiYzZiODgxOGQwNDRmZmEyZjc4ZTIxMWRhNjgwOWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MDMxNjE1MywgLTc3LjMyMDQ0MDc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlkMTcxYWZhNzA0NDRhMTFiM2M2OGMzZTMxODYzYzllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxYTA1MTBmNTdjNTRmNzQ4YzkyM2ExMTliMjc5ZjFhID0gJChgPGRpdiBpZD0iaHRtbF9lMWEwNTEwZjU3YzU0Zjc0OGM5MjNhMTE5YjI3OWYxYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RW1taXRzYnVyZyBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQxNzFhZmE3MDQ0NGExMWIzYzY4YzNlMzE4NjNjOWUuc2V0Q29udGVudChodG1sX2UxYTA1MTBmNTdjNTRmNzQ4YzkyM2ExMTliMjc5ZjFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjYmM2Yjg4MThkMDQ0ZmZhMmY3OGUyMTFkYTY4MDlmLmJpbmRQb3B1cChwb3B1cF85ZDE3MWFmYTcwNDQ0YTExYjNjNjhjM2UzMTg2M2M5ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjY0ZmQ5OTRiMzg4NGU2MDkxNWNiYzdlMWVmZDAxZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC42MjU2NTA3OCwgLTc1Ljg2MDc3NzY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3MzljZTMyNmRiYzQxODg4Mzc1NjUxMDhjMGJmNDdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzMzE3OTlhMjU2NjRlZWFhMjM3ZjU2NDcwNzY1NTc0ID0gJChgPGRpdiBpZD0iaHRtbF9jMzMxNzk5YTI1NjY0ZWVhYTIzN2Y1NjQ3MDc2NTU3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SHVybG9jayBVbml0ZWQgTWV0aG9kaXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzczOWNlMzI2ZGJjNDE4ODgzNzU2NTEwOGMwYmY0N2Muc2V0Q29udGVudChodG1sX2MzMzE3OTlhMjU2NjRlZWFhMjM3ZjU2NDcwNzY1NTc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY2NGZkOTk0YjM4ODRlNjA5MTVjYmM3ZTFlZmQwMWQ3LmJpbmRQb3B1cChwb3B1cF9jNzM5Y2UzMjZkYmM0MTg4ODM3NTY1MTA4YzBiZjQ3YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2RhZDMyNjMzNWNjNGNlOWJmY2YwYTllNDVjZGEzMTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTQ3MjA1MSwgLTc2LjY1NjY3MTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhlNDM3ZWI2OGJjZjRiNzY4OGQxMTVkNDI1NzViYzNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxYmYxZTViYzY5YjQ3Y2NhYWYzMzA3NTE4NTQzNmQzID0gJChgPGRpdiBpZD0iaHRtbF82MWJmMWU1YmM2OWI0N2NjYWFmMzMwNzUxODU0MzZkMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVya2lucyBTcXVhcmUgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhlNDM3ZWI2OGJjZjRiNzY4OGQxMTVkNDI1NzViYzNlLnNldENvbnRlbnQoaHRtbF82MWJmMWU1YmM2OWI0N2NjYWFmMzMwNzUxODU0MzZkMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZGFkMzI2MzM1Y2M0Y2U5YmZjZjBhOWU0NWNkYTMxOS5iaW5kUG9wdXAocG9wdXBfOGU0MzdlYjY4YmNmNGI3Njg4ZDExNWQ0MjU3NWJjM2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3YWQzMGM1ZDg2ZTRmZWM4ZDI0MjE5N2U3YzE2YWY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjc4ODM4OTksIC03Ni42NTY0MDAzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNTA5ZThkOWM3NGE0MzVjYmUxMGU5OTVhMzUxOTUwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNDM3ZmNhMzUwZmQ0YjA2YWY4YzEzMDMzOGJhODY2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTQzN2ZjYTM1MGZkNGIwNmFmOGMxMzAzMzhiYTg2NjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBCZW5lZGljdCdzIExhZGllcyBvZiBDaGFyaXR5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNTA5ZThkOWM3NGE0MzVjYmUxMGU5OTVhMzUxOTUwNC5zZXRDb250ZW50KGh0bWxfZTQzN2ZjYTM1MGZkNGIwNmFmOGMxMzAzMzhiYTg2NjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjdhZDMwYzVkODZlNGZlYzhkMjQyMTk3ZTdjMTZhZjYuYmluZFBvcHVwKHBvcHVwXzI1MDllOGQ5Yzc0YTQzNWNiZTEwZTk5NWEzNTE5NTA0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTc1YjM0MDMzNjY0NDQwOThjOWMyOGY4ZTkyYzdmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjYzOTE3MjQ5LCAtNzguNzU1NDYxNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTliZjcyYTA0NzhmNDZiMmI1ODEwMDVkMDNlNTcxYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGQyZjE3NjVkM2RjNGJjNmI2OTE5NzU3MWU4NDllOWYgPSAkKGA8ZGl2IGlkPSJodG1sXzBkMmYxNzY1ZDNkYzRiYzZiNjkxOTc1NzFlODQ5ZTlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaHVyY2ggb2YgVGhlIE5hemFyZW5lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOWJmNzJhMDQ3OGY0NmIyYjU4MTAwNWQwM2U1NzFiMS5zZXRDb250ZW50KGh0bWxfMGQyZjE3NjVkM2RjNGJjNmI2OTE5NzU3MWU4NDllOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODk3NWIzNDAzMzY2NDQ0MDk4YzljMjhmOGU5MmM3ZmYuYmluZFBvcHVwKHBvcHVwX2U5YmY3MmEwNDc4ZjQ2YjJiNTgxMDA1ZDAzZTU3MWIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MTQ1MjYxNjEyZDU0MDJlYjhhNzgwYzk2N2M4ZDEzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjY0MDQ0OTQxLCAtNzUuODY1NzI4OTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDRiYTVhMjJkNmJkNGEzZDk3ZWU3NzRmNzljMTA1N2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmZhZmJjNGNlZDYxNGQ3NjkwZGJhYjA0NWY5MzgxMGIgPSAkKGA8ZGl2IGlkPSJodG1sX2JmYWZiYzRjZWQ2MTRkNzY5MGRiYWIwNDVmOTM4MTBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFjZSBCYXB0aXN0PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNGJhNWEyMmQ2YmQ0YTNkOTdlZTc3NGY3OWMxMDU3Zi5zZXRDb250ZW50KGh0bWxfYmZhZmJjNGNlZDYxNGQ3NjkwZGJhYjA0NWY5MzgxMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzE0NTI2MTYxMmQ1NDAyZWI4YTc4MGM5NjdjOGQxM2IuYmluZFBvcHVwKHBvcHVwXzA0YmE1YTIyZDZiZDRhM2Q5N2VlNzc0Zjc5YzEwNTdmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZGEwNWUxNTk3MjU0NDNjODBhMmRmNWIyNzM0NDU3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5MjQyNDU2LCAtNzYuNjUwMjU1NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWI2MDYyYTI1M2NmNDNmZTg0YWZhMDcwNjVkMGFmYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGJkYWQ4ZTJmNmE0NDFlY2FlMmM5MTYzNGM1MzU4OTggPSAkKGA8ZGl2IGlkPSJodG1sXzRiZGFkOGUyZjZhNDQxZWNhZTJjOTE2MzRjNTM1ODk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Mb2NrZXJtYW4gQnVuZHkgRWxlbWVudGFyeSBTY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViNjA2MmEyNTNjZjQzZmU4NGFmYTA3MDY1ZDBhZmI1LnNldENvbnRlbnQoaHRtbF80YmRhZDhlMmY2YTQ0MWVjYWUyYzkxNjM0YzUzNTg5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZGEwNWUxNTk3MjU0NDNjODBhMmRmNWIyNzM0NDU3Yi5iaW5kUG9wdXAocG9wdXBfZWI2MDYyYTI1M2NmNDNmZTg0YWZhMDcwNjVkMGFmYjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5ZDVlNzU1ZTQxMjRmZDc4NDJkODU4NmU3MDhhMTI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjg3NjE5MjMsIC03Ni42MzM2NzgwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YmFmMzBhNzExZGY0NDhiOTllMTY4NDBmODRlZTg4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ODYxNGU4OTZhMzU0ZTdlYThlOTFjNmMwM2MxZDBlOSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDg2MTRlODk2YTM1NGU3ZWE4ZTkxYzZjMDNjMWQwZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkphbWVzIE1jSGVucnkgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiYWYzMGE3MTFkZjQ0OGI5OWUxNjg0MGY4NGVlODg4LnNldENvbnRlbnQoaHRtbF80ODYxNGU4OTZhMzU0ZTdlYThlOTFjNmMwM2MxZDBlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OWQ1ZTc1NWU0MTI0ZmQ3ODQyZDg1ODZlNzA4YTEyNi5iaW5kUG9wdXAocG9wdXBfN2JhZjMwYTcxMWRmNDQ4Yjk5ZTE2ODQwZjg0ZWU4ODgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNmNzU1MDJlZGU0NjRjZDg5OTdhMWUxOTMxNTcxMzc1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjgwMjM5NjcsIC03Ni42NjI0MTc5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NTE2NDU5MDRkOWE0NThjYWY0ZGYzOWQyM2UzODFkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYWY5YjYwMTRhNDg0NTA3ODAzZmEzNmMyNTUyOTc4OSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWFmOWI2MDE0YTQ4NDUwNzgwM2ZhMzZjMjU1Mjk3ODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZhbWlseSBLaXRjaGVuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NTE2NDU5MDRkOWE0NThjYWY0ZGYzOWQyM2UzODFkMy5zZXRDb250ZW50KGh0bWxfYWFmOWI2MDE0YTQ4NDUwNzgwM2ZhMzZjMjU1Mjk3ODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2Y3NTUwMmVkZTQ2NGNkODk5N2ExZTE5MzE1NzEzNzUuYmluZFBvcHVwKHBvcHVwXzc1MTY0NTkwNGQ5YTQ1OGNhZjRkZjM5ZDIzZTM4MWQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWFkYjhlZjdkMmY0ODNhYWM2ODhmYzA5NzhmMWVmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM2MzYxNDg1LCAtNzYuNzc3MDA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjZTI4YzM2NTJjZjQ1MzhiZDNhZjVlOTRjNTY2MWNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiYWFlYWNjOGM4ZDRkY2E4YzI5YTk1ODQxNzY5ZDFlID0gJChgPGRpdiBpZD0iaHRtbF82YmFhZWFjYzhjOGQ0ZGNhOGMyOWE5NTg0MTc2OWQxZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TG9hdmVzICYgRmlzaGVzIEAgTXQuIE9saXZlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iY2UyOGMzNjUyY2Y0NTM4YmQzYWY1ZTk0YzU2NjFjZi5zZXRDb250ZW50KGh0bWxfNmJhYWVhY2M4YzhkNGRjYThjMjlhOTU4NDE3NjlkMWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDlhZGI4ZWY3ZDJmNDgzYWFjNjg4ZmMwOTc4ZjFlZjcuYmluZFBvcHVwKHBvcHVwX2JjZTI4YzM2NTJjZjQ1MzhiZDNhZjVlOTRjNTY2MWNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjZkMGQ5MjIzZTU0M2MyOGFjNzAwNTBkZDhiZDkxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjE2NTkzMDI4LCAtNzUuMzk2OTg4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OTNhOGU4YTlmODM0YTBlYTQ1ZDc1MzhhNzQwMjg0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YzcxYzFlNTI2ZTk0NGI0YjNhNmE5NGJmMmYzYzhlOSA9ICQoYDxkaXYgaWQ9Imh0bWxfOGM3MWMxZTUyNmU5NDRiNGIzYTZhOTRiZjJmM2M4ZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNub3cgSGlsbCBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OTNhOGU4YTlmODM0YTBlYTQ1ZDc1MzhhNzQwMjg0Yy5zZXRDb250ZW50KGh0bWxfOGM3MWMxZTUyNmU5NDRiNGIzYTZhOTRiZjJmM2M4ZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGI2ZDBkOTIyM2U1NDNjMjhhYzcwMDUwZGQ4YmQ5MTQuYmluZFBvcHVwKHBvcHVwXzg5M2E4ZThhOWY4MzRhMGVhNDVkNzUzOGE3NDAyODRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTA3NGU1YTAzMTY0MjI4YjdlZTZlM2VlZGNkOGJjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM5NTM4ODUsIC03NS42MDMxODE5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZGRlMTRiMTZlMGU0ZWNkYTZjODA4OWI3MzNhZDA2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kM2JlYTIzMmE5NzA0MDhhOGJjOTNjNmRjMmY4NjFjZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDNiZWEyMzJhOTcwNDA4YThiYzkzYzZkYzJmODYxY2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaXRlZCBDaHVyY2ggRmlyc3QgQm9ybjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWRkZTE0YjE2ZTBlNGVjZGE2YzgwODliNzMzYWQwNmIuc2V0Q29udGVudChodG1sX2QzYmVhMjMyYTk3MDQwOGE4YmM5M2M2ZGMyZjg2MWNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M1MDc0ZTVhMDMxNjQyMjhiN2VlNmUzZWVkY2Q4YmMyLmJpbmRQb3B1cChwb3B1cF81ZGRlMTRiMTZlMGU0ZWNkYTZjODA4OWI3MzNhZDA2YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Y0YmE1ODQyN2VhNDJkMzk3YWRhNDY5MGVlZmVlYzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMTA0OTI4NCwgLTc2LjQ3NjIyOTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4MTA3MWYwN2I4YjRjYTViODhhOWZjYmE4MTdiMzFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3MTEwMzc3OWMwMzRlMjc5MmQ0MGVjOTM2ZDU2OTE1ID0gJChgPGRpdiBpZD0iaHRtbF85NzExMDM3NzljMDM0ZTI3OTJkNDBlYzkzNmQ1NjkxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIEpvaG4gTHV0aGVyYW4gRnJpZW5kcyBmb3IgU3VwcGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODEwNzFmMDdiOGI0Y2E1Yjg4YTlmY2JhODE3YjMxZi5zZXRDb250ZW50KGh0bWxfOTcxMTAzNzc5YzAzNGUyNzkyZDQwZWM5MzZkNTY5MTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Y0YmE1ODQyN2VhNDJkMzk3YWRhNDY5MGVlZmVlYzAuYmluZFBvcHVwKHBvcHVwXzQ4MTA3MWYwN2I4YjRjYTViODhhOWZjYmE4MTdiMzFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjlhMzhmNmQ5YzI0NTA2OTM5M2M1YzM2M2NlNzNlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5NDAxOTQ2LCAtNzYuNjQ1NDQ2MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGM0YmExYzAyNzlhNGYxNjkwNjkwOTE5NGRkZjEwZTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjViMzY0NDFiMzk4NGM0ZjljZGRiNDk4Yjk3Yzc0MDkgPSAkKGA8ZGl2IGlkPSJodG1sX2I1YjM2NDQxYjM5ODRjNGY5Y2RkYjQ5OGI5N2M3NDA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TaWxvYW0gQmFwdGlzdCBDb21tLiBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjNGJhMWMwMjc5YTRmMTY5MDY5MDkxOTRkZGYxMGU5LnNldENvbnRlbnQoaHRtbF9iNWIzNjQ0MWIzOTg0YzRmOWNkZGI0OThiOTdjNzQwOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYjlhMzhmNmQ5YzI0NTA2OTM5M2M1YzM2M2NlNzNlMy5iaW5kUG9wdXAocG9wdXBfZGM0YmExYzAyNzlhNGYxNjkwNjkwOTE5NGRkZjEwZTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljYzgyZDdmZjQ1MzQzOGRiZjg1ZDY0YTllNWNlNzMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjgxMjI5MTgsIC03Ni42NTA3MjQzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wM2ZiZjkzNzhiNWM0NzI1YWY1NmUwNzRlMzRiNDMxYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzY1MWU4MzJhODI0ZWMyYThjNzIyZTRjMmI4YTk5NCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2M2NTFlODMyYTgyNGVjMmE4YzcyMmU0YzJiOGE5OTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3RzaWRlIEJyZWFkIG9mIExpZmU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzZmJmOTM3OGI1YzQ3MjVhZjU2ZTA3NGUzNGI0MzFiLnNldENvbnRlbnQoaHRtbF9jYzY1MWU4MzJhODI0ZWMyYThjNzIyZTRjMmI4YTk5NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85Y2M4MmQ3ZmY0NTM0MzhkYmY4NWQ2NGE5ZTVjZTczMy5iaW5kUG9wdXAocG9wdXBfMDNmYmY5Mzc4YjVjNDcyNWFmNTZlMDc0ZTM0YjQzMWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1NGVlZGExOTZmNTQ0YWE5MmVhOWUyYzIxMjdlYTNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzczNDc2MzQsIC03NS42MDUyMDc4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMzliMDhkYmZkY2U0MzBhOGExMDVhYzg3NjA5ZjZiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MzQ3Yjc2YWQ2NDY0Zjc1OTlkMzUyNDM0YjI1YmM5NiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzM0N2I3NmFkNjQ2NGY3NTk5ZDM1MjQzNGIyNWJjOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBKYW1lcyBBTUUgWmlvbiBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzOWIwOGRiZmRjZTQzMGE4YTEwNWFjODc2MDlmNmJhLnNldENvbnRlbnQoaHRtbF83MzQ3Yjc2YWQ2NDY0Zjc1OTlkMzUyNDM0YjI1YmM5Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTRlZWRhMTk2ZjU0NGFhOTJlYTllMmMyMTI3ZWEzYi5iaW5kUG9wdXAocG9wdXBfMzM5YjA4ZGJmZGNlNDMwYThhMTA1YWM4NzYwOWY2YmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllMmRiNmE3ZTc5MjRkMzhhM2FkZjdjNjY0NjM1NzhhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjk1MDcxNTAwMDAwMDA2LCAtNzYuNTMzMjYwMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGM3ZDMyNTBlN2YwNDJkMGJkYTk1NmY4ZWMyMWYyZDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTdmZTE0NGMxOGEyNGE4ZjliMjY4NDg1MWUyNTkxMjMgPSAkKGA8ZGl2IGlkPSJodG1sX2U3ZmUxNDRjMThhMjRhOGY5YjI2ODQ4NTFlMjU5MTIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXR0ZXJzb24gSGlnaCBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBjN2QzMjUwZTdmMDQyZDBiZGE5NTZmOGVjMjFmMmQ3LnNldENvbnRlbnQoaHRtbF9lN2ZlMTQ0YzE4YTI0YThmOWIyNjg0ODUxZTI1OTEyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZTJkYjZhN2U3OTI0ZDM4YTNhZGY3YzY2NDYzNTc4YS5iaW5kUG9wdXAocG9wdXBfMGM3ZDMyNTBlN2YwNDJkMGJkYTk1NmY4ZWMyMWYyZDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YwZDA3MGJjNTkyZDRhZTQ5ZTE5OWQ1M2FmMTMwMDY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzc3NDE1MDYsIC03NS42MDUwODQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YzMxNjAzNjA1Zjc0NjM5YTRlNjdiYjI5ZWUzNGI3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzRmODJjZjk4NDE0ZjI2YjMzYzJiZTA1NGFmMzg3OCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2M0ZjgyY2Y5ODQxNGYyNmIzM2MyYmUwNTRhZjM4NzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZpcnN0IEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YzMxNjAzNjA1Zjc0NjM5YTRlNjdiYjI5ZWUzNGI3Mi5zZXRDb250ZW50KGh0bWxfY2M0ZjgyY2Y5ODQxNGYyNmIzM2MyYmUwNTRhZjM4NzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjBkMDcwYmM1OTJkNGFlNDllMTk5ZDUzYWYxMzAwNjYuYmluZFBvcHVwKHBvcHVwXzRjMzE2MDM2MDVmNzQ2MzlhNGU2N2JiMjllZTM0YjcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODEyMTkxNjU0YWI0MGQ1YWZiM2Q4NGUyNGExOTlhMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMwODE3NjE4LCAtNzYuNDczNTkwNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmFiZjg0MjRkMmI0NGVkMzk4YjNlMmQ2NmM0NDVlNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODlmMmE1OGVkMThlNDFmZWJiMzI0ODg0OGYyZGU5NzUgPSAkKGA8ZGl2IGlkPSJodG1sXzg5ZjJhNThlZDE4ZTQxZmViYjMyNDg4NDhmMmRlOTc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Fc3NleCBVTUM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhYmY4NDI0ZDJiNDRlZDM5OGIzZTJkNjZjNDQ1ZTU2LnNldENvbnRlbnQoaHRtbF84OWYyYTU4ZWQxOGU0MWZlYmIzMjQ4ODQ4ZjJkZTk3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wODEyMTkxNjU0YWI0MGQ1YWZiM2Q4NGUyNGExOTlhMC5iaW5kUG9wdXAocG9wdXBfZmFiZjg0MjRkMmI0NGVkMzk4YjNlMmQ2NmM0NDVlNTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2YWQ2YTNlMDNkYjQwNDdhYjU3MDkxYjQ3MWU2M2NlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjk1MTUwMzIsIC03Ni41NzkzMjU5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzA2NGY4NTg5NzQ0MzJjOWQwNDAyZmJkMjFhNTU1ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xN2MzMzI0YTcwMGY0M2I0ODczNDI1ZDM1NmNkMWY0MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTdjMzMyNGE3MDBmNDNiNDg3MzQyNWQzNTZjZDFmNDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbGxpYW0gUGFjYSBFbGVtZW50YXJ5IFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTMwNjRmODU4OTc0NDMyYzlkMDQwMmZiZDIxYTU1NWYuc2V0Q29udGVudChodG1sXzE3YzMzMjRhNzAwZjQzYjQ4NzM0MjVkMzU2Y2QxZjQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU2YWQ2YTNlMDNkYjQwNDdhYjU3MDkxYjQ3MWU2M2NlLmJpbmRQb3B1cChwb3B1cF85MzA2NGY4NTg5NzQ0MzJjOWQwNDAyZmJkMjFhNTU1ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTliODc3YTY1NGJiNGMzN2E4ODRkMDgxNGUxOTA0YWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42NDgwNjU3MDAwMDAwMDQsIC03Ny43Mjc1MTczOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzZjY2ZkMzllODc0MjdmYTI1OTcwNjRhMGM5ZjFjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNGQ2NmQ1YWNhMDc0ODIxYWZmZjUwZWYxZGQ0ZWNiOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDRkNjZkNWFjYTA3NDgyMWFmZmY1MGVmMWRkNGVjYjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNhbHZhdGlvbiBBcm15IC0gUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMzZjY2ZkMzllODc0MjdmYTI1OTcwNjRhMGM5ZjFjOS5zZXRDb250ZW50KGh0bWxfMDRkNjZkNWFjYTA3NDgyMWFmZmY1MGVmMWRkNGVjYjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTliODc3YTY1NGJiNGMzN2E4ODRkMDgxNGUxOTA0YWUuYmluZFBvcHVwKHBvcHVwXzIzNmNjZmQzOWU4NzQyN2ZhMjU5NzA2NGEwYzlmMWM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MTYwNmE3YThiODY0ODNlOThiMDE4OGNlZGFiNjc0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI4OTExMTc1LCAtNzYuNTY1NDQ2MDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDMyY2FlMmM2MzMwNGEyNGJjZGVlNmY3ODg2Y2Q2NTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmVlYTliNjg5MzQ5NGEwOGJlODYwMjg5ZDAwNGM5NjAgPSAkKGA8ZGl2IGlkPSJodG1sXzJlZWE5YjY4OTM0OTRhMDhiZTg2MDI4OWQwMDRjOTYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IaWdobGFuZHRvd24gRWxlL01pZCAjMjM3PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzJjYWUyYzYzMzA0YTI0YmNkZWU2Zjc4ODZjZDY1NC5zZXRDb250ZW50KGh0bWxfMmVlYTliNjg5MzQ5NGEwOGJlODYwMjg5ZDAwNGM5NjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTE2MDZhN2E4Yjg2NDgzZTk4YjAxODhjZWRhYjY3NDYuYmluZFBvcHVwKHBvcHVwXzAzMmNhZTJjNjMzMDRhMjRiY2RlZTZmNzg4NmNkNjU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYzY5YjA0YzE5NGY0MGIyYTVmZGQ1ODhhNDZlOTE5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM3NzgwMzU1LCAtNzcuNDI5NzM3MzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODlmMjI1YjZiOWEwNDQyMWJlZGM0ZTRkNGRhNmJjYjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjgyZmIwMzhkNWM2NDRlNDg0MDhiNjU4OTI4NWI0ZGQgPSAkKGA8ZGl2IGlkPSJodG1sXzY4MmZiMDM4ZDVjNjQ0ZTQ4NDA4YjY1ODkyODViNGRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYWxsZW5nZXIgQ3JlZWsgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODlmMjI1YjZiOWEwNDQyMWJlZGM0ZTRkNGRhNmJjYjYuc2V0Q29udGVudChodG1sXzY4MmZiMDM4ZDVjNjQ0ZTQ4NDA4YjY1ODkyODViNGRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjNjliMDRjMTk0ZjQwYjJhNWZkZDU4OGE0NmU5MTk2LmJpbmRQb3B1cChwb3B1cF84OWYyMjViNmI5YTA0NDIxYmVkYzRlNGQ0ZGE2YmNiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjU2NTJhNGJjY2Q3NDRiYmIxNmVkZGY2ZjRkYjU1OTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTI0MzUyMywgLTc2LjU3ODk3MDc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3M2I0OWYzNTc2ZTRjNjY4MWY4NmU3NmM1ZjU4YTM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkYzFjYTlmZjFiNzRkMTRiYzVkYWMzZDA4M2FlOGYwID0gJChgPGRpdiBpZD0iaHRtbF82ZGMxY2E5ZmYxYjc0ZDE0YmM1ZGFjM2QwODNhZThmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGF0dGVyc29uIFBhcmsgUHVibGljIENoYXJ0ZXI8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI3M2I0OWYzNTc2ZTRjNjY4MWY4NmU3NmM1ZjU4YTM3LnNldENvbnRlbnQoaHRtbF82ZGMxY2E5ZmYxYjc0ZDE0YmM1ZGFjM2QwODNhZThmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNTY1MmE0YmNjZDc0NGJiYjE2ZWRkZjZmNGRiNTU5OS5iaW5kUG9wdXAocG9wdXBfMjczYjQ5ZjM1NzZlNGM2NjgxZjg2ZTc2YzVmNThhMzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzMGJlYmVlNDFkNDQ4NGY5MmUyYjBkNThlOTU3NGExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjg3MDc1NSwgLTc2LjU1NTI2MDI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlNTVmOTBhMzhkNTRlZGViZDZmN2NiNTFmMTcxNjM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjYTBhNTE4NTQ3ZDQxZTc5NTQ1NGNjNDI5ZjExODM2ID0gJChgPGRpdiBpZD0iaHRtbF9jY2EwYTUxODU0N2Q0MWU3OTU0NTRjYzQyOWYxMTgzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWV0cm9wb2xpdGFuIENodXJjaCBvZiBHb2Q8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlNTVmOTBhMzhkNTRlZGViZDZmN2NiNTFmMTcxNjM1LnNldENvbnRlbnQoaHRtbF9jY2EwYTUxODU0N2Q0MWU3OTU0NTRjYzQyOWYxMTgzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMzBiZWJlZTQxZDQ0ODRmOTJlMmIwZDU4ZTk1NzRhMS5iaW5kUG9wdXAocG9wdXBfM2U1NWY5MGEzOGQ1NGVkZWJkNmY3Y2I1MWYxNzE2MzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3ZTFiMGQ3OGMyODQ3YzQ4OTEzNDE2YzJmNDIxYWU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjg0MzA0NDgsIC03Ni41NTI3NDcwOTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzFjYjEzNjU0NjI0YmY2YjdlYjI3OTVmNWNmNGI3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ODljM2QzYTg2MWU0NjI0YmMxOTI0NTgxYzNjMWMzYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzg5YzNkM2E4NjFlNDYyNGJjMTkyNDU4MWMzYzFjM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpvaG4gUnVocmFoIEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzFjYjEzNjU0NjI0YmY2YjdlYjI3OTVmNWNmNGI3My5zZXRDb250ZW50KGh0bWxfNzg5YzNkM2E4NjFlNDYyNGJjMTkyNDU4MWMzYzFjM2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzdlMWIwZDc4YzI4NDdjNDg5MTM0MTZjMmY0MjFhZTguYmluZFBvcHVwKHBvcHVwXzkzMWNiMTM2NTQ2MjRiZjZiN2ViMjc5NWY1Y2Y0YjczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MzdjMzI3N2VlNzU0M2ZkYWFiNzI1YzM1MWVlNDkzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5NDgwODkzLCAtNzYuNTEyNTEwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWVmNDA1MTJkOWZlNDE2NDhmNjA3NjExOTc0MzIyYTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Y2ZGZhMzBmN2Y5NGExNGJjZmFmZmIxYTllZTdkYjIgPSAkKGA8ZGl2IGlkPSJodG1sXzdmNmRmYTMwZjdmOTRhMTRiY2ZhZmZiMWE5ZWU3ZGIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gUGV0ZXIgTHV0aGVyYW4gQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZWY0MDUxMmQ5ZmU0MTY0OGY2MDc2MTE5NzQzMjJhOS5zZXRDb250ZW50KGh0bWxfN2Y2ZGZhMzBmN2Y5NGExNGJjZmFmZmIxYTllZTdkYjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODM3YzMyNzdlZTc1NDNmZGFhYjcyNWMzNTFlZTQ5M2UuYmluZFBvcHVwKHBvcHVwXzVlZjQwNTEyZDlmZTQxNjQ4ZjYwNzYxMTk3NDMyMmE5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NDkzM2Q1MGRiMjk0YmU0YmU0MzY3MTFmMmIyMDc3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjMxNDcxOTA5LCAtNzUuNjI3NzI5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzJkNDkzMjI1MzMwNGQ4MmJhZWIwYmIyMGY3ZWY3MzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDUwY2VhYmQzYzhiNDA4YjljMWE5MjYxNWY2ZTJhMDAgPSAkKGA8ZGl2IGlkPSJodG1sXzA1MGNlYWJkM2M4YjQwOGI5YzFhOTI2MTVmNmUyYTAwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZW5uZXR0IE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyZDQ5MzIyNTMzMDRkODJiYWViMGJiMjBmN2VmNzM3LnNldENvbnRlbnQoaHRtbF8wNTBjZWFiZDNjOGI0MDhiOWMxYTkyNjE1ZjZlMmEwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NDkzM2Q1MGRiMjk0YmU0YmU0MzY3MTFmMmIyMDc3YS5iaW5kUG9wdXAocG9wdXBfMzJkNDkzMjI1MzMwNGQ4MmJhZWIwYmIyMGY3ZWY3MzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY2MTRjNjM4ZWZmNTQ2YmNhMTMyZGY4ZGI3OTcwN2JhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjk4NzI4NTMsIC03Ni41MTU4MTE5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDcwODc4NDkwY2Y0YmYyODU3NjRmMGFjNzFjOWViOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNzI5YWZiNjU4NDc0ZjVmODQ1Yjk5YjA5NTM4MTg2ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTcyOWFmYjY1ODQ3NGY1Zjg0NWI5OWIwOTUzODE4NmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNBTiBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkNzA4Nzg0OTBjZjRiZjI4NTc2NGYwYWM3MWM5ZWI5LnNldENvbnRlbnQoaHRtbF9hNzI5YWZiNjU4NDc0ZjVmODQ1Yjk5YjA5NTM4MTg2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NjE0YzYzOGVmZjU0NmJjYTEzMmRmOGRiNzk3MDdiYS5iaW5kUG9wdXAocG9wdXBfZGQ3MDg3ODQ5MGNmNGJmMjg1NzY0ZjBhYzcxYzllYjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmYzMzYWVmZGVkMjRhNzQ4MjRkN2M1OWEwMDQ1YjM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODExODgzNDUsIC03Ni41MzkxNDk0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMDk4ZmExODMyOTc0NGJkYjYxNzg4YWVkNzJjOGFkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYmU4ZjFiMTU1MTU0MjFlOWM5ZjQxYTM3MjJiZTg2YyA9ICQoYDxkaXYgaWQ9Imh0bWxfY2JlOGYxYjE1NTE1NDIxZTljOWY0MWEzNzIyYmU4NmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyYW5rbGluIFVNQyBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EwOThmYTE4MzI5NzQ0YmRiNjE3ODhhZWQ3MmM4YWRmLnNldENvbnRlbnQoaHRtbF9jYmU4ZjFiMTU1MTU0MjFlOWM5ZjQxYTM3MjJiZTg2Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZmMzM2FlZmRlZDI0YTc0ODI0ZDdjNTlhMDA0NWIzNy5iaW5kUG9wdXAocG9wdXBfYTA5OGZhMTgzMjk3NDRiZGI2MTc4OGFlZDcyYzhhZGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwZjFlMzc5NDg1ODQ3YzdiNzE1MTVkMGQwYTM2MDgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjgzOTI2OSwgLTc2LjU1NTY1NzM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjZjlhYjc0MDQ3ZjQyZjU4YjIzYTEwMWJmYzBhZmNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E4NzY3ODcxZmEyNDRkOTJhZDc0NmZkOTgzZDVmM2E4ID0gJChgPGRpdiBpZD0iaHRtbF9hODc2Nzg3MWZhMjQ0ZDkyYWQ3NDZmZDk4M2Q1ZjNhOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFzdCBCYWx0aW1vcmUgQ2h1cmNoIG9mIEdvZDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmNmOWFiNzQwNDdmNDJmNThiMjNhMTAxYmZjMGFmY2Iuc2V0Q29udGVudChodG1sX2E4NzY3ODcxZmEyNDRkOTJhZDc0NmZkOTgzZDVmM2E4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EwZjFlMzc5NDg1ODQ3YzdiNzE1MTVkMGQwYTM2MDgyLmJpbmRQb3B1cChwb3B1cF9mY2Y5YWI3NDA0N2Y0MmY1OGIyM2ExMDFiZmMwYWZjYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzk2Zjk5ZjkxMmZhNDY4ZmFkNGM0YTY0MzEzYTA5ZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yMzI4ODUyOSwgLTc2LjU5MzM3MTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyMWQ0NWVmOGZkNDRhZTNiNzliN2UwMGVhOTA4OTM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4ZmY2M2Q3MmQxYzRmNjhhZDQ0Y2FhNjYyYTZkNWZmID0gJChgPGRpdiBpZD0iaHRtbF8zOGZmNjNkNzJkMWM0ZjY4YWQ0NGNhYTY2MmE2ZDVmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVuamFtaW4gRnJhbmtsaW4gSGlnaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjIxZDQ1ZWY4ZmQ0NGFlM2I3OWI3ZTAwZWE5MDg5MzQuc2V0Q29udGVudChodG1sXzM4ZmY2M2Q3MmQxYzRmNjhhZDQ0Y2FhNjYyYTZkNWZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM5NmY5OWY5MTJmYTQ2OGZhZDRjNGE2NDMxM2EwOWZjLmJpbmRQb3B1cChwb3B1cF9mMjFkNDVlZjhmZDQ0YWUzYjc5YjdlMDBlYTkwODkzNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzliYTIwYzU4ZjUxNGQyZGFhZTcyYzA5MGNhNjQ2ZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yMjA4MTg0OCwgLTc2Ljg4ODM0NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDRjNzQxYTdlY2RkNGI3NTljOTFhMmFkODAxMGJkZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTMwMDIwN2E2OGRhNDg3NWIwZDNmZTUzNjM0ZTUxMjggPSAkKGA8ZGl2IGlkPSJodG1sXzUzMDAyMDdhNjhkYTQ4NzViMGQzZmU1MzYzNGU1MTI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gSm9obiBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDRjNzQxYTdlY2RkNGI3NTljOTFhMmFkODAxMGJkZjMuc2V0Q29udGVudChodG1sXzUzMDAyMDdhNjhkYTQ4NzViMGQzZmU1MzYzNGU1MTI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM5YmEyMGM1OGY1MTRkMmRhYWU3MmMwOTBjYTY0NmRiLmJpbmRQb3B1cChwb3B1cF9kNGM3NDFhN2VjZGQ0Yjc1OWM5MWEyYWQ4MDEwYmRmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWJlZWUyNzk3YWZlNDU0OWEwNTk0YTIxYjkwNmVkZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zODQ1ODQ5OTk5OTk5OTQsIC03Ny4yNjk3OTU5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMmY4MjQ3YTQ4OWM0MjU3OGQzMDYyZmI4Yjc4N2EwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MzhmODA5NjAxNmQ0MjkxOTI4Y2MwMDgwNjgzYTU5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfODM4ZjgwOTYwMTZkNDI5MTkyOGNjMDA4MDY4M2E1OTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBNYXJrZXQgVW5pdGVkIE1ldGhvZGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyZjgyNDdhNDg5YzQyNTc4ZDMwNjJmYjhiNzg3YTBmLnNldENvbnRlbnQoaHRtbF84MzhmODA5NjAxNmQ0MjkxOTI4Y2MwMDgwNjgzYTU5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YmVlZTI3OTdhZmU0NTQ5YTA1OTRhMjFiOTA2ZWRlOC5iaW5kUG9wdXAocG9wdXBfYzJmODI0N2E0ODljNDI1NzhkMzA2MmZiOGI3ODdhMGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0MTI5OTk3ZGI5ZjQ3ZmI5YzQ2ZDFlNGJmZmZiYzYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjUxNzM1NTUsIC03Ni42MjczODUwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWU3NzBhMjIzZjI0ZTFjYTZjYzk3OTdhNmFhMzBhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MWE0NWRkODdhOWY0MjdhOTAwMGRiZjI2MjNkZmYzZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDFhNDVkZDg3YTlmNDI3YTkwMDBkYmYyNjIzZGZmM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFydW5kZWwgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhZTc3MGEyMjNmMjRlMWNhNmNjOTc5N2E2YWEzMGE2LnNldENvbnRlbnQoaHRtbF80MWE0NWRkODdhOWY0MjdhOTAwMGRiZjI2MjNkZmYzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNDEyOTk5N2RiOWY0N2ZiOWM0NmQxZTRiZmZmYmM2MS5iaW5kUG9wdXAocG9wdXBfNWFlNzcwYTIyM2YyNGUxY2E2Y2M5Nzk3YTZhYTMwYTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5ZTY0NTg0YzUzYjQzMzNhZjVjNGZhMzUwMzM0OTE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjQ5NTc3ODksIC03Ni43MDUzNTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNTkzZmEzMzZjMWQ0NDAyOWQ1NWY0NjVjMTQ4N2I1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMDQ1OTA0YTI0NjA0ZTBmYjQzNGM3MWExNjRkOTQ3NSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzA0NTkwNGEyNDYwNGUwZmI0MzRjNzFhMTY0ZDk0NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFyYnV0dXMgTWlkZGxlIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTU5M2ZhMzM2YzFkNDQwMjlkNTVmNDY1YzE0ODdiNTcuc2V0Q29udGVudChodG1sX2MwNDU5MDRhMjQ2MDRlMGZiNDM0YzcxYTE2NGQ5NDc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E5ZTY0NTg0YzUzYjQzMzNhZjVjNGZhMzUwMzM0OTE2LmJpbmRQb3B1cChwb3B1cF9lNTkzZmEzMzZjMWQ0NDAyOWQ1NWY0NjVjMTQ4N2I1NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWE1NjBlYjdiYzIyNDY2ZGFhMDM5YWQxYzAxNzNiZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4xODcxMTQwMSwgLTc1LjM3ODk1NTQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyOTg3MjUwMzliYjQ5MGFhNDRjMjgzYjkyNDk2N2Q5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmOWJlNzI0ODAxNzRkNzQ4N2U5MjA4NDcyNTcyOWE5ID0gJChgPGRpdiBpZD0iaHRtbF9jZjliZTcyNDgwMTc0ZDc0ODdlOTIwODQ3MjU3MjlhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UEFDQSBFbnRlcnByaXNlcyBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTI5ODcyNTAzOWJiNDkwYWE0NGMyODNiOTI0OTY3ZDkuc2V0Q29udGVudChodG1sX2NmOWJlNzI0ODAxNzRkNzQ4N2U5MjA4NDcyNTcyOWE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFhNTYwZWI3YmMyMjQ2NmRhYTAzOWFkMWMwMTczYmZkLmJpbmRQb3B1cChwb3B1cF81Mjk4NzI1MDM5YmI0OTBhYTQ0YzI4M2I5MjQ5NjdkOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWY4YjAzZDdhN2JlNDkzNmI2M2QzZWM5M2FiMWVjNjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yMzU3NjcyMywgLTc2LjYxMDk1MDExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3ZTdjN2U3ZDVmMTRkY2FiMmZkZDAwZGY5OGI0NGM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiMDQwNTFmYzFjODQ5YzRhOWExNGFhNDU3YWFkZTY5ID0gJChgPGRpdiBpZD0iaHRtbF82YjA0MDUxZmMxYzg0OWM0YTlhMTRhYTQ1N2FhZGU2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGlmZSBDaHVyY2ggTWluaXN0cmllczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjdlN2M3ZTdkNWYxNGRjYWIyZmRkMDBkZjk4YjQ0YzYuc2V0Q29udGVudChodG1sXzZiMDQwNTFmYzFjODQ5YzRhOWExNGFhNDU3YWFkZTY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVmOGIwM2Q3YTdiZTQ5MzZiNjNkM2VjOTNhYjFlYzYxLmJpbmRQb3B1cChwb3B1cF8yN2U3YzdlN2Q1ZjE0ZGNhYjJmZGQwMGRmOThiNDRjNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmQ5MGZkMWYyZDFiNDM2ZjgzMjhjODI3Y2YwZmFiMTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41NzAzNTA0OCwgLTc2Ljk3NzA0MjUwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyZjNlZjMzYzU4NTRhYjBiY2JlYzc3ZjU1YzU4ZDUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzZGY1Yzg3NTcwYTQ4YWM4MTMzZGFhMzRiYzMwZGZiID0gJChgPGRpdiBpZD0iaHRtbF9iM2RmNWM4NzU3MGE0OGFjODEzM2RhYTM0YmMzMGRmYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2ludGVycyBNaWxsIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMmYzZWYzM2M1ODU0YWIwYmNiZWM3N2Y1NWM1OGQ1MC5zZXRDb250ZW50KGh0bWxfYjNkZjVjODc1NzBhNDhhYzgxMzNkYWEzNGJjMzBkZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmQ5MGZkMWYyZDFiNDM2ZjgzMjhjODI3Y2YwZmFiMTMuYmluZFBvcHVwKHBvcHVwXzEyZjNlZjMzYzU4NTRhYjBiY2JlYzc3ZjU1YzU4ZDUwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Y2ZmOTdmZDZjYjY0NjlhYmE4OGVmZjYwN2U3Y2VmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY1NDYwNzQ5LCAtNzguODEyMDYyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzU4NWNjMmIyOGVmNDFjNjgwOWY5ZTMwMTZkYjQ3Y2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2U1NDQyMmYzMTBmNDE5YWEyYWFlODRjNmM0ZGQwNjYgPSAkKGA8ZGl2IGlkPSJodG1sXzNlNTQ0MjJmMzEwZjQxOWFhMmFhZTg0YzZjNGRkMDY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYVZhbGUgVU1DIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzU4NWNjMmIyOGVmNDFjNjgwOWY5ZTMwMTZkYjQ3Y2Uuc2V0Q29udGVudChodG1sXzNlNTQ0MjJmMzEwZjQxOWFhMmFhZTg0YzZjNGRkMDY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVjZmY5N2ZkNmNiNjQ2OWFiYTg4ZWZmNjA3ZTdjZWYxLmJpbmRQb3B1cChwb3B1cF83NTg1Y2MyYjI4ZWY0MWM2ODA5ZjllMzAxNmRiNDdjZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGQ3OTUzOGEwMDZkNDRhY2EwYjdhYzUwMzM3YmVjNzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yMjUxODE2OCwgLTc2LjU5MzY1ODU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmZThkYzUwOGEzZTRiYzc4ZjI1MWEyZGFkNjBhODliID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3ZGIxMzdhNjAyOTQxNWFiYjc3NzI2OTg0ZjI5OWYzID0gJChgPGRpdiBpZD0iaHRtbF82N2RiMTM3YTYwMjk0MTVhYmI3NzcyNjk4NGYyOTlmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q3VydGlzIEJheSBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZmU4ZGM1MDhhM2U0YmM3OGYyNTFhMmRhZDYwYTg5Yi5zZXRDb250ZW50KGh0bWxfNjdkYjEzN2E2MDI5NDE1YWJiNzc3MjY5ODRmMjk5ZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGQ3OTUzOGEwMDZkNDRhY2EwYjdhYzUwMzM3YmVjNzUuYmluZFBvcHVwKHBvcHVwXzBmZThkYzUwOGEzZTRiYzc4ZjI1MWEyZGFkNjBhODliKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDQ4NGQ5NDg2NzE0MjM2YjYxN2M2NjEzMjNkMGQyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU4Mzc5NDk4LCAtNzYuOTk0MTQ5NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzkwNWUwZTM1NzRlNDg2YWIwY2M2ZjM3ZTdlYTg2MDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhkYmRmYjRiZTVlNGZmZjk0NmFkYmYyN2RjOTYzYjggPSAkKGA8ZGl2IGlkPSJodG1sXzM4ZGJkZmI0YmU1ZTRmZmY5NDZhZGJmMjdkYzk2M2I4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5MDVlMGUzNTc0ZTQ4NmFiMGNjNmYzN2U3ZWE4NjA5LnNldENvbnRlbnQoaHRtbF8zOGRiZGZiNGJlNWU0ZmZmOTQ2YWRiZjI3ZGM5NjNiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMDQ4NGQ5NDg2NzE0MjM2YjYxN2M2NjEzMjNkMGQyMi5iaW5kUG9wdXAocG9wdXBfNzkwNWUwZTM1NzRlNDg2YWIwY2M2ZjM3ZTdlYTg2MDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiZmViOGY3MmFlYTQwMWY5NTFhMGEzYjIwZTU3MDUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjM2MTg5MjgsIC03Ni42MDIwNDI0MDAwMDAwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MjY1NWU0MDJkOTE0NzgwYjY3MTNjNTA2MjQ5ZjdlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTE5NzZjYThlMGQ0OTlkYTFhNjM4ZmIyZmNmNmVjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWExOTc2Y2E4ZTBkNDk5ZGExYTYzOGZiMmZjZjZlYzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJlaG9ib3RoIENodXJjaCBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDI2NTVlNDAyZDkxNDc4MGI2NzEzYzUwNjI0OWY3ZWUuc2V0Q29udGVudChodG1sXzFhMTk3NmNhOGUwZDQ5OWRhMWE2MzhmYjJmY2Y2ZWM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiZmViOGY3MmFlYTQwMWY5NTFhMGEzYjIwZTU3MDUzLmJpbmRQb3B1cChwb3B1cF80MjY1NWU0MDJkOTE0NzgwYjY3MTNjNTA2MjQ5ZjdlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDNlNWJmY2FiZDNhNDMzODkzMWJiYTgxMzUwNzE4MmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNTMyODQwOCwgLTc2LjcwMDc5Nzg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlZDlkZjE0MjVhMDRlMTFhYWU3ZTIyZGFiODk2NzgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyMWRlMzQ2OTczYjQyMThiNTBiMjE3Zjg4NjlkZDAyID0gJChgPGRpdiBpZD0iaHRtbF8zMjFkZTM0Njk3M2I0MjE4YjUwYjIxN2Y4ODY5ZGQwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0IEVtZXJnZW5jeSBTZXJ2aWNlczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmVkOWRmMTQyNWEwNGUxMWFhZTdlMjJkYWI4OTY3ODMuc2V0Q29udGVudChodG1sXzMyMWRlMzQ2OTczYjQyMThiNTBiMjE3Zjg4NjlkZDAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQzZTViZmNhYmQzYTQzMzg5MzFiYmE4MTM1MDcxODJlLmJpbmRQb3B1cChwb3B1cF82ZWQ5ZGYxNDI1YTA0ZTExYWFlN2UyMmRhYjg5Njc4MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2IwNGQ0NDMyZjc0NDllNmFlMTVkZjkzMjE5YzcyN2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yMzY2MzM4MywgLTc2LjY1NDg3NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDc4YmM3NGIwMWI3NGE2ODkzNzkzODdlNjNlZjI0ZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTAwMTlhYjJiNjkyNDJjYjliN2NlOWU0Njg4ZjA1ZjcgPSAkKGA8ZGl2IGlkPSJodG1sXzEwMDE5YWIyYjY5MjQyY2I5YjdjZTllNDY4OGYwNWY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZlcnZpZXcgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3OGJjNzRiMDFiNzRhNjg5Mzc5Mzg3ZTYzZWYyNGVjLnNldENvbnRlbnQoaHRtbF8xMDAxOWFiMmI2OTI0MmNiOWI3Y2U5ZTQ2ODhmMDVmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYjA0ZDQ0MzJmNzQ0OWU2YWUxNWRmOTMyMTljNzI3Yi5iaW5kUG9wdXAocG9wdXBfNDc4YmM3NGIwMWI3NGE2ODkzNzkzODdlNjNlZjI0ZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2YjVmY2UwZjFhNjQ4YzliOTllZmNhYTk3OGFiMjM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMTMzNjc0NDQsIC03NS4zOTQyNDM1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NjE3ODlkNDEyMjg0MTgxOTM3NmY5ODhjM2IzNDY3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYWJkZjIwNjY4YTA0YmZhODM3ZTZhZGUyMWJlZjk5ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmFiZGYyMDY2OGEwNGJmYTgzN2U2YWRlMjFiZWY5OWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbGxpbnMgVGVtcGxlIEFNRTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTYxNzg5ZDQxMjI4NDE4MTkzNzZmOTg4YzNiMzQ2Nzcuc2V0Q29udGVudChodG1sX2ZhYmRmMjA2NjhhMDRiZmE4MzdlNmFkZTIxYmVmOTlmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q2YjVmY2UwZjFhNjQ4YzliOTllZmNhYTk3OGFiMjM3LmJpbmRQb3B1cChwb3B1cF81NjE3ODlkNDEyMjg0MTgxOTM3NmY5ODhjM2IzNDY3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ZjMTMwNjg2MzljNDA5ZjllOGI0YWJlYzYzNGQ1NGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMTA3ODQwNSwgLTc3LjYxOTExNTI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1YWYxOGEyZTE5YzRhYzdhY2ViNDJiYWE2M2EyNmFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1NDAyNzA2YTE4OTQ2ZGNiMDMyYjZjMjc3ZWZhMzgzID0gJChgPGRpdiBpZD0iaHRtbF9hNTQwMjcwNmExODk0NmRjYjAzMmI2YzI3N2VmYTM4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QkVBQ09OPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NWFmMThhMmUxOWM0YWM3YWNlYjQyYmFhNjNhMjZhYy5zZXRDb250ZW50KGh0bWxfYTU0MDI3MDZhMTg5NDZkY2IwMzJiNmMyNzdlZmEzODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ZjMTMwNjg2MzljNDA5ZjllOGI0YWJlYzYzNGQ1NGQuYmluZFBvcHVwKHBvcHVwXzU1YWYxOGEyZTE5YzRhYzdhY2ViNDJiYWE2M2EyNmFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YTM3MzBmZTFmMDQ0MWMwYWE3ZDEwMjkzZjc2MjA3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjIzMDczOTM1LCAtNzYuNzAwNDM0NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2E3MWM4MmM4MGMxNGRmNmEyNjFkYzAzZjU0M2YyZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTBlZDYwZTQwYThlNGQzMmJjY2QzNjNjZTUwN2EwNzAgPSAkKGA8ZGl2IGlkPSJodG1sX2EwZWQ2MGU0MGE4ZTRkMzJiY2NkMzYzY2U1MDdhMDcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SZWxheSBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYTcxYzgyYzgwYzE0ZGY2YTI2MWRjMDNmNTQzZjJmYi5zZXRDb250ZW50KGh0bWxfYTBlZDYwZTQwYThlNGQzMmJjY2QzNjNjZTUwN2EwNzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmEzNzMwZmUxZjA0NDFjMGFhN2QxMDI5M2Y3NjIwN2IuYmluZFBvcHVwKHBvcHVwX2NhNzFjODJjODBjMTRkZjZhMjYxZGMwM2Y1NDNmMmZiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYzZmMzE4NTVjODk0OWFkYTZmNWUyNzk2NmJhYmM2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY0NjU5NTgyLCAtNzcuNzI5OTA5MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODMwMGRiMzgyOTViNGM2OGFmZGI0YzNkZjliMDc5MmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzczY2Y0NDdmM2E4NDdlZmFkYWFmNTA0YmY4NDk5ZDcgPSAkKGA8ZGl2IGlkPSJodG1sXzM3M2NmNDQ3ZjNhODQ3ZWZhZGFhZjUwNGJmODQ5OWQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gTWFyaydzIENvbW11bml0eSBGb29kIEJhbms8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgzMDBkYjM4Mjk1YjRjNjhhZmRiNGMzZGY5YjA3OTJmLnNldENvbnRlbnQoaHRtbF8zNzNjZjQ0N2YzYTg0N2VmYWRhYWY1MDRiZjg0OTlkNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYzZmMzE4NTVjODk0OWFkYTZmNWUyNzk2NmJhYmM2MS5iaW5kUG9wdXAocG9wdXBfODMwMGRiMzgyOTViNGM2OGFmZGI0YzNkZjliMDc5MmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1OTBjNGQ2YzEyYzQ1ZmZiYTJjZjVmODA4ZTNiN2UzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjYzNzY3NTUsIC03Ni42ODc0NjAxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODNmODc3MWRlMGQ0MTM2YmJmZjAzOWE3MDBjZGFjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MTE0ZjdjZGZmNmQ0NTUzODAyN2ZhZDY0YjliM2E4OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTExNGY3Y2RmZjZkNDU1MzgwMjdmYWQ2NGI5YjNhODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlYWYgU2hhbG9tIFpvbmUgRm9vZCBEb29yPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODNmODc3MWRlMGQ0MTM2YmJmZjAzOWE3MDBjZGFjOC5zZXRDb250ZW50KGh0bWxfNTExNGY3Y2RmZjZkNDU1MzgwMjdmYWQ2NGI5YjNhODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDU5MGM0ZDZjMTJjNDVmZmJhMmNmNWY4MDhlM2I3ZTMuYmluZFBvcHVwKHBvcHVwX2Q4M2Y4NzcxZGUwZDQxMzZiYmZmMDM5YTcwMGNkYWM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOThlYzg2MzdlNTE0NTg3YTExNTcxNDVhOWE3NTVkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI4NzY0NzkyLCAtNzYuNjcyMzM4MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDNkMzZjNmU0NTA2NGQxZjkzZjBkNDBlMzcyZGYxMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTI1YjM0ZWI3YWQxNDg2NDk2MjZhMTRiNzBmNjA5YTAgPSAkKGA8ZGl2IGlkPSJodG1sXzEyNWIzNGViN2FkMTQ4NjQ5NjI2YTE0YjcwZjYwOWEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LaW5nZG9tIExpZmUgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wM2QzNmM2ZTQ1MDY0ZDFmOTNmMGQ0MGUzNzJkZjEyMy5zZXRDb250ZW50KGh0bWxfMTI1YjM0ZWI3YWQxNDg2NDk2MjZhMTRiNzBmNjA5YTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDk4ZWM4NjM3ZTUxNDU4N2ExMTU3MTQ1YTlhNzU1ZGYuYmluZFBvcHVwKHBvcHVwXzAzZDM2YzZlNDUwNjRkMWY5M2YwZDQwZTM3MmRmMTIzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kM2M1M2U1OWNiYjU0NjZhOTNjNjkxZDdlMTcyOGRiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjY1NjM0OTgxLCAtNzYuNjA2MTc4NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODEwNjIxYTJlMTk3NGVmZGJmOWU0NWQyOWU2YTI1YWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2UwZmFkMzU2YzM0NDVhYmI5ODUwYjI4NjhiYzg4MzQgPSAkKGA8ZGl2IGlkPSJodG1sXzdlMGZhZDM1NmMzNDQ1YWJiOTg1MGIyODY4YmM4ODM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGVzYXBlYWtlIENhcmVzIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MTA2MjFhMmUxOTc0ZWZkYmY5ZTQ1ZDI5ZTZhMjVhYy5zZXRDb250ZW50KGh0bWxfN2UwZmFkMzU2YzM0NDVhYmI5ODUwYjI4NjhiYzg4MzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDNjNTNlNTljYmI1NDY2YTkzYzY5MWQ3ZTE3MjhkYmMuYmluZFBvcHVwKHBvcHVwXzgxMDYyMWEyZTE5NzRlZmRiZjllNDVkMjllNmEyNWFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmVjMzlkNTEyOWY0Zjk5YjRmZjhmYjk4NzNhMGViMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM1OTg4Nzg1LCAtNzUuNzM3NjA2NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzFmN2FkYTgwMjk0NDk2NWFmYzg2NDQyN2JhZDQwNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI2ZTUyMGVhZWNiNGE1Mzk4ODE4OGQ0N2Y5NWYzZjQgPSAkKGA8ZGl2IGlkPSJodG1sXzRiNmU1MjBlYWVjYjRhNTM5ODgxODhkNDdmOTVmM2Y0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0c2lkZSBQcmltYXJ5IFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzFmN2FkYTgwMjk0NDk2NWFmYzg2NDQyN2JhZDQwNWUuc2V0Q29udGVudChodG1sXzRiNmU1MjBlYWVjYjRhNTM5ODgxODhkNDdmOTVmM2Y0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VmZWMzOWQ1MTI5ZjRmOTliNGZmOGZiOTg3M2EwZWIyLmJpbmRQb3B1cChwb3B1cF9jMWY3YWRhODAyOTQ0OTY1YWZjODY0NDI3YmFkNDA1ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmI4OGQ4OTVlZGNhNGM0MGFmNWE5MDg5ODliMWE0YzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40Nzc2NDAzOSwgLTc2Ljg0NjQxOTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5ZWVlMDg1MGQwYjRjODVhZTc0N2NhNjg1OWRmY2U2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3NWVhNDhkNmJkYzQxNDZhNmViZmE2OTEzNDk2ZWQ2ID0gJChgPGRpdiBpZD0iaHRtbF8yNzVlYTQ4ZDZiZGM0MTQ2YTZlYmZhNjkxMzQ5NmVkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFydmVzdCBDaHVyY2ggb2YgR29kPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OWVlZTA4NTBkMGI0Yzg1YWU3NDdjYTY4NTlkZmNlNi5zZXRDb250ZW50KGh0bWxfMjc1ZWE0OGQ2YmRjNDE0NmE2ZWJmYTY5MTM0OTZlZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmI4OGQ4OTVlZGNhNGM0MGFmNWE5MDg5ODliMWE0YzEuYmluZFBvcHVwKHBvcHVwXzQ5ZWVlMDg1MGQwYjRjODVhZTc0N2NhNjg1OWRmY2U2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZmFhMmVlNDc0MzU0NWY3YTE2NWMwM2JlOWQ0OTY5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM4MTM5NTUyLCAtNzUuNjA1NTcxMTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2U1NmVhNzFkM2Y1NDFhNGE4YTkzOTBlNTEwNTQ4YTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQ3OTFkY2YyMjVjNDRhMWEzN2Y0MjUxOWMwODQzOGQgPSAkKGA8ZGl2IGlkPSJodG1sXzRkNzkxZGNmMjI1YzQ0YTFhMzdmNDI1MTljMDg0MzhkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYWxpc2J1cnkgTWlkZGxlIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2U1NmVhNzFkM2Y1NDFhNGE4YTkzOTBlNTEwNTQ4YTMuc2V0Q29udGVudChodG1sXzRkNzkxZGNmMjI1YzQ0YTFhMzdmNDI1MTljMDg0MzhkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhmYWEyZWU0NzQzNTQ1ZjdhMTY1YzAzYmU5ZDQ5Njk0LmJpbmRQb3B1cChwb3B1cF8zZTU2ZWE3MWQzZjU0MWE0YThhOTM5MGU1MTA1NDhhMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTAzYzU3YjE2ZTUwNDNiOGI5NWNkODliNjQ3N2VjMDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNDExMzA2NiwgLTc2LjQ0ODY3MDM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyM2EwMzEwZDEyYjRhYzRhOGEwMGY5MGFhNWQ2NDIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1NzllM2EyMjk2OTRjY2NiYWNhYTUzODJkNjkyNTQxID0gJChgPGRpdiBpZD0iaHRtbF9iNTc5ZTNhMjI5Njk0Y2NjYmFjYWE1MzgyZDY5MjU0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlkZGxlIFJpdmVyIEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMjNhMDMxMGQxMmI0YWM0YThhMDBmOTBhYTVkNjQyMS5zZXRDb250ZW50KGh0bWxfYjU3OWUzYTIyOTY5NGNjY2JhY2FhNTM4MmQ2OTI1NDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTAzYzU3YjE2ZTUwNDNiOGI5NWNkODliNjQ3N2VjMDQuYmluZFBvcHVwKHBvcHVwX2YyM2EwMzEwZDEyYjRhYzRhOGEwMGY5MGFhNWQ2NDIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjMzNzA1NDc3ZGU0Y2ExOWY0NDdjNWVhZTQ1OWE3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI4NzY0NzkyLCAtNzYuNjcyMzM4MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODRhZjc1ODM1MjkxNDZiMTg3OWU2YjUzYjRlMzM2ZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzVhYmIzNzJjNmFhNDZiMTgyNDk3ZTY5OWFhYjEyMWQgPSAkKGA8ZGl2IGlkPSJodG1sXzM1YWJiMzcyYzZhYTQ2YjE4MjQ5N2U2OTlhYWIxMjFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbiBTdHJlZXQgQWNhZGVteTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODRhZjc1ODM1MjkxNDZiMTg3OWU2YjUzYjRlMzM2ZmEuc2V0Q29udGVudChodG1sXzM1YWJiMzcyYzZhYTQ2YjE4MjQ5N2U2OTlhYWIxMjFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViMzM3MDU0NzdkZTRjYTE5ZjQ0N2M1ZWFlNDU5YTcwLmJpbmRQb3B1cChwb3B1cF84NGFmNzU4MzUyOTE0NmIxODc5ZTZiNTNiNGUzMzZmYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTAxMjMwMDQ1NDViNDgzNWEyMzkxZTVkYTJmYWRjMTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yODI0NDU1OCwgLTc2LjY3MjE1NzQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxYjBkNjQ2NjAzYTRmZTJiZWIzMDM0ZTYxOGYwZmY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4OTY0YmFhZjM2ZjQxYzU4YTE3ZjYzNGJlMTNlYmNmID0gJChgPGRpdiBpZD0iaHRtbF81ODk2NGJhYWYzNmY0MWM1OGExN2Y2MzRiZTEzZWJjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmljdG9yeSBNaW5pc3RyaWVzIG9mIENocmlzdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjFiMGQ2NDY2MDNhNGZlMmJlYjMwMzRlNjE4ZjBmZjkuc2V0Q29udGVudChodG1sXzU4OTY0YmFhZjM2ZjQxYzU4YTE3ZjYzNGJlMTNlYmNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UwMTIzMDA0NTQ1YjQ4MzVhMjM5MWU1ZGEyZmFkYzE1LmJpbmRQb3B1cChwb3B1cF9iMWIwZDY0NjYwM2E0ZmUyYmViMzAzNGU2MThmMGZmOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWRhNjY5MTcxNzI2NGM3YThhOWE1YjQ4MmU2MWY2Y2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wNzA0NzMyOSwgLTc2LjU0NTQ1NzU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxNmZlZWIzMDY5YjQzMzg5NzM1NDhiNGZmMmZkODAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1NTEyZDAzY2ZiMzQ0MzhhZWYxNDZkOTZhYjMxZjhlID0gJChgPGRpdiBpZD0iaHRtbF9lNTUxMmQwM2NmYjM0NDM4YWVmMTQ2ZDk2YWIzMWY4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW5uYXBvbGlzIE1pZGRsZSBCYWNrcGFjayBCdWRkaWVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MTZmZWViMzA2OWI0MzM4OTczNTQ4YjRmZjJmZDgwMi5zZXRDb250ZW50KGh0bWxfZTU1MTJkMDNjZmIzNDQzOGFlZjE0NmQ5NmFiMzFmOGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWRhNjY5MTcxNzI2NGM3YThhOWE1YjQ4MmU2MWY2Y2MuYmluZFBvcHVwKHBvcHVwXzUxNmZlZWIzMDY5YjQzMzg5NzM1NDhiNGZmMmZkODAyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lY2NjZTcwMGFkMjA0NDA4YTc1NDczZTljOGZkZTVlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljc4NjE5NzksIC03Ni4wNjkxMTE0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjFlMjc1MTJmYzE0YjVmYWE5MGUzNGIxZWVlNGY0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMTRlNDU0Nzg5NTU0YzE2OGI0NDM4MGRhYWE2YWY1MyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTE0ZTQ1NDc4OTU1NGMxNjhiNDQzODBkYWFhNmFmNTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBCZWdpbm5pbmcgRm9vZCBCYW5rPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjFlMjc1MTJmYzE0YjVmYWE5MGUzNGIxZWVlNGY0MS5zZXRDb250ZW50KGh0bWxfMTE0ZTQ1NDc4OTU1NGMxNjhiNDQzODBkYWFhNmFmNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWNjY2U3MDBhZDIwNDQwOGE3NTQ3M2U5YzhmZGU1ZTIuYmluZFBvcHVwKHBvcHVwXzEyMWUyNzUxMmZjMTRiNWZhYTkwZTM0YjFlZWU0ZjQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMDFkMGFlNzQ2ODg0YWQxOTY1N2RjYzkwZTkxYjMxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI4MjQyMjc2LCAtNzYuNjc0NzAxMTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWNkOTkzYjdhYjU0NGRkYThmZTdiNzMyOWU0ZDQzODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTU5YjQ5OWY1ZGYwNDJmMWEzZDlmM2UyOTE1YmYwODcgPSAkKGA8ZGl2IGlkPSJodG1sXzU1OWI0OTlmNWRmMDQyZjFhM2Q5ZjNlMjkxNWJmMDg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYXJhaCBNLiBSb2FjaCBFbGVtZW50YXJ5IFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWNkOTkzYjdhYjU0NGRkYThmZTdiNzMyOWU0ZDQzODUuc2V0Q29udGVudChodG1sXzU1OWI0OTlmNWRmMDQyZjFhM2Q5ZjNlMjkxNWJmMDg3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UwMWQwYWU3NDY4ODRhZDE5NjU3ZGNjOTBlOTFiMzEwLmJpbmRQb3B1cChwb3B1cF8xY2Q5OTNiN2FiNTQ0ZGRhOGZlN2I3MzI5ZTRkNDM4NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQzNTlhOGM0MWNiNGIyODk1ODI0NDM2YmVmMWQzYWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTQwODA0NSwgLTc2LjY3NTgzMzAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNjZTI5YWQ5YzUyNDRkYzk4ZTQwYzRjOWIwZDlmZGMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyN2Y2YTI2ZjFmMjQxNjA5NjhmODI4ZjkxOGVhYTNlID0gJChgPGRpdiBpZD0iaHRtbF9lMjdmNmEyNmYxZjI0MTYwOTY4ZjgyOGY5MThlYWEzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2xpdmV0IEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zY2UyOWFkOWM1MjQ0ZGM5OGU0MGM0YzliMGQ5ZmRjMi5zZXRDb250ZW50KGh0bWxfZTI3ZjZhMjZmMWYyNDE2MDk2OGY4MjhmOTE4ZWFhM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGQzNTlhOGM0MWNiNGIyODk1ODI0NDM2YmVmMWQzYWIuYmluZFBvcHVwKHBvcHVwXzNjZTI5YWQ5YzUyNDRkYzk4ZTQwYzRjOWIwZDlmZGMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjhlODk5ZGRmMWM0YzhkODM2ODU0NmJhNzkzZDZkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5MTg1NzQzLCAtNzYuNjc2NDYxMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmVlMjJiMjZkMmE0NDk1OGFjOWE3YzMyMDNhNzMwZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDdlYTVhMmRhOGViNDA2OTk4MjE2NTNiYWQ0ZWVkMGQgPSAkKGA8ZGl2IGlkPSJodG1sX2Q3ZWE1YTJkYThlYjQwNjk5ODIxNjUzYmFkNGVlZDBkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXJ5IEUuIFJvZG1hbiBFbGVtZW50YXJ5IFNjaC48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JlZTIyYjI2ZDJhNDQ5NThhYzlhN2MzMjAzYTczMGYxLnNldENvbnRlbnQoaHRtbF9kN2VhNWEyZGE4ZWI0MDY5OTgyMTY1M2JhZDRlZWQwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNjhlODk5ZGRmMWM0YzhkODM2ODU0NmJhNzkzZDZkNC5iaW5kUG9wdXAocG9wdXBfYmVlMjJiMjZkMmE0NDk1OGFjOWE3YzMyMDNhNzMwZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyZGExYjFkNjIwZjQ1ZWRiZjk5ODczZmRlZTliMTgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTgzOTIxMDYsIC03NS44MDA0Mjc2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NmU3MGVhZWZmN2I0Mjg5OThkMjdhYzhmYTc3ZjQ4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZjdjYzI3NGJmNjk0OTdkOThiN2Q0NWY0YTA2NjczNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMmY3Y2MyNzRiZjY5NDk3ZDk4YjdkNDVmNGEwNjY3MzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWVuc2Jvcm8gRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2ZTcwZWFlZmY3YjQyODk5OGQyN2FjOGZhNzdmNDg4LnNldENvbnRlbnQoaHRtbF8yZjdjYzI3NGJmNjk0OTdkOThiN2Q0NWY0YTA2NjczNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MmRhMWIxZDYyMGY0NWVkYmY5OTg3M2ZkZWU5YjE4Mi5iaW5kUG9wdXAocG9wdXBfNDZlNzBlYWVmZjdiNDI4OTk4ZDI3YWM4ZmE3N2Y0ODgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4ZjIzYjI5ODBmODRkYjQ4ZWU0NTBmYWRiYTY5Mzc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzMxODExNzgsIC03NS42MjYwMTY4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDhjNTcxNzVkMTc0ZjcxYjlhZGE2ZDE1NjAzYjBiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lM2JhYThkOTQ0NGI0Zjc2OGQxMTQ1N2FkZTdlOWQ1YyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTNiYWE4ZDk0NDRiNGY3NjhkMTE0NTdhZGU3ZTlkNWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZydWl0bGFuZCBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWQ4YzU3MTc1ZDE3NGY3MWI5YWRhNmQxNTYwM2IwYmQuc2V0Q29udGVudChodG1sX2UzYmFhOGQ5NDQ0YjRmNzY4ZDExNDU3YWRlN2U5ZDVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ4ZjIzYjI5ODBmODRkYjQ4ZWU0NTBmYWRiYTY5Mzc4LmJpbmRQb3B1cChwb3B1cF81ZDhjNTcxNzVkMTc0ZjcxYjlhZGE2ZDE1NjAzYjBiZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGExOGE0ZWJjY2M3NGVhNjhkZjEwYTFhZGE5ZGU5NGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42NTg2NDI1MiwgLTc4Ljc3MjU5MDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmIwNzM2YWY4MzY4NGJiMjk3NzYxMTg1MTQ0ZWJkOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZiMTg0NjU3YTU0NDJjOGFlNDNlZmFlODZkOWViZTcgPSAkKGA8ZGl2IGlkPSJodG1sX2I2YjE4NDY1N2E1NDQyYzhhZTQzZWZhZTg2ZDllYmU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib3BlIFN0YXRpb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiMDczNmFmODM2ODRiYjI5Nzc2MTE4NTE0NGViZDk1LnNldENvbnRlbnQoaHRtbF9iNmIxODQ2NTdhNTQ0MmM4YWU0M2VmYWU4NmQ5ZWJlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YTE4YTRlYmNjYzc0ZWE2OGRmMTBhMWFkYTlkZTk0YS5iaW5kUG9wdXAocG9wdXBfYmIwNzM2YWY4MzY4NGJiMjk3NzYxMTg1MTQ0ZWJkOTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QxYTdhYWYxY2Y1MjQ5YzJhYzFkMTAzOTM5YTU1YTZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzY1MzU2MSwgLTc1LjU4OTQzODQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjM2EwYjVjNGY1NTQwMDA4NjYwODE0MGI5Y2FmZmQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjZjNhMjMxNWM3ZjQxZDU5NmI0NTdiNDI2ZWRiMzVlID0gJChgPGRpdiBpZD0iaHRtbF9kY2YzYTIzMTVjN2Y0MWQ1OTZiNDU3YjQyNmVkYjM1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2ljb21pY28gTWlkZGxlIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWMzYTBiNWM0ZjU1NDAwMDg2NjA4MTQwYjljYWZmZDQuc2V0Q29udGVudChodG1sX2RjZjNhMjMxNWM3ZjQxZDU5NmI0NTdiNDI2ZWRiMzVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QxYTdhYWYxY2Y1MjQ5YzJhYzFkMTAzOTM5YTU1YTZmLmJpbmRQb3B1cChwb3B1cF9hYzNhMGI1YzRmNTU0MDAwODY2MDgxNDBiOWNhZmZkNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWM3NGNhYWZjZDNmNDgwNGI5YTg4OTY0YmEyYTNhZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40MDcxMjA1NywgLTc3LjM0NDU0NTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzYjcyZmU1OWFlNTQzNmY5OGJiNDFlNWQ0ZTY5ZTg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyNGI4YjE2NWJiOTRjZTFiNGJiNjJlNjYwMmI4ZTY2ID0gJChgPGRpdiBpZD0iaHRtbF9lMjRiOGIxNjViYjk0Y2UxYjRiYjYyZTY2MDJiOGU2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3ByaW5nIFJpZGdlIFNyLiBMaXZpbmcgQXB0cy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzYjcyZmU1OWFlNTQzNmY5OGJiNDFlNWQ0ZTY5ZTg1LnNldENvbnRlbnQoaHRtbF9lMjRiOGIxNjViYjk0Y2UxYjRiYjYyZTY2MDJiOGU2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81Yzc0Y2FhZmNkM2Y0ODA0YjlhODg5NjRiYTJhM2FkYy5iaW5kUG9wdXAocG9wdXBfNDNiNzJmZTU5YWU1NDM2Zjk4YmI0MWU1ZDRlNjllODUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1MDY2Y2MyMTI4MDRlMzE5MDQ2NjFkZjMwNjUzMDk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTkyNjA2NDcsIC03Ni45NzAzODA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdhYjI0NTlkM2UxMjRjMzRhNTNiZmMzN2VhNGZmNDZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QwYTgwMGZhYjg0NjQzNTI5MTExZWZhYjRmZDdkNzVmID0gJChgPGRpdiBpZD0iaHRtbF9kMGE4MDBmYWI4NDY0MzUyOTExMWVmYWI0ZmQ3ZDc1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGVlZHMgb2YgRmFpdGggUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YWIyNDU5ZDNlMTI0YzM0YTUzYmZjMzdlYTRmZjQ2ZC5zZXRDb250ZW50KGh0bWxfZDBhODAwZmFiODQ2NDM1MjkxMTFlZmFiNGZkN2Q3NWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTUwNjZjYzIxMjgwNGUzMTkwNDY2MWRmMzA2NTMwOTQuYmluZFBvcHVwKHBvcHVwXzdhYjI0NTlkM2UxMjRjMzRhNTNiZmMzN2VhNGZmNDZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xODA2MDQwNTJhOTE0YmIxOGRiMDNkZTNhMDBmMzcxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI2NTkwOTQ4LCAtNzYuNjk1MzQyOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjkyYzk2YTg2ZTVjNDMwMDhmYjlmNGYzMzYxOTY4NDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjNiZDU0MmZmM2QwNGYwYTk1MTRiYjg5MGY2YWJhODYgPSAkKGA8ZGl2IGlkPSJodG1sXzYzYmQ1NDJmZjNkMDRmMGE5NTE0YmI4OTBmNmFiYTg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PdXIgTGFkeSBvZiBWaWN0b3J5IEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOTJjOTZhODZlNWM0MzAwOGZiOWY0ZjMzNjE5Njg0My5zZXRDb250ZW50KGh0bWxfNjNiZDU0MmZmM2QwNGYwYTk1MTRiYjg5MGY2YWJhODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTgwNjA0MDUyYTkxNGJiMThkYjAzZGUzYTAwZjM3MTQuYmluZFBvcHVwKHBvcHVwXzI5MmM5NmE4NmU1YzQzMDA4ZmI5ZjRmMzM2MTk2ODQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NjdmZDg3YzVjZTk0MjFmYTRlNjlmN2UyYjBmNTdjNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5MjYyMTg2LCAtNzYuNjk5MjYwNjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGU4NTlhNDE0Nzg3NDJkYWI1NTlkNGVjYjc1OGMxMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTA5MzU4OTc4MmE2NGZjMGE4NjY5NzIzZDdhNGI3OGQgPSAkKGA8ZGl2IGlkPSJodG1sXzEwOTM1ODk3ODJhNjRmYzBhODY2OTcyM2Q3YTRiNzhkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij40MCBXZXN0IEEgJiBSIENlbnRlciBJbmMuLCBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGU4NTlhNDE0Nzg3NDJkYWI1NTlkNGVjYjc1OGMxMjcuc2V0Q29udGVudChodG1sXzEwOTM1ODk3ODJhNjRmYzBhODY2OTcyM2Q3YTRiNzhkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg2N2ZkODdjNWNlOTQyMWZhNGU2OWY3ZTJiMGY1N2M1LmJpbmRQb3B1cChwb3B1cF84ZTg1OWE0MTQ3ODc0MmRhYjU1OWQ0ZWNiNzU4YzEyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjA2NmI4NTI0MWYzNDlmNWJlOTYyMGFmYjFkY2FlYTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yODExMzAzNiwgLTc2LjcwMDMyMzM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhODE1OTEzZGFjZTQyNTE4ZWI4MGI5NGE2YmNjMmQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjYzhlODEzOWM1NTQ3MjY5NTBmN2RhZTM2ZTYxNjAyID0gJChgPGRpdiBpZD0iaHRtbF9jY2M4ZTgxMzljNTU0NzI2OTUwZjdkYWUzNmU2MTYwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RpbGxtZWFkb3cgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhODE1OTEzZGFjZTQyNTE4ZWI4MGI5NGE2YmNjMmQwLnNldENvbnRlbnQoaHRtbF9jY2M4ZTgxMzljNTU0NzI2OTUwZjdkYWUzNmU2MTYwMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMDY2Yjg1MjQxZjM0OWY1YmU5NjIwYWZiMWRjYWVhNS5iaW5kUG9wdXAocG9wdXBfZGE4MTU5MTNkYWNlNDI1MThlYjgwYjk0YTZiY2MyZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2Yzg3MTY4NTQwNjQwZWZiMmI1M2M3NDlmYzIxNjMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTkyNTYzODMsIC03Ni45NzAzNTA2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjMxMzdkNDgzMTE0YjkwOTM4NDc1N2RlYzJkZjFlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYTc4NTIxZGZlMTY0OTMxYjEwOTcyM2EyZGVkMGMzNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZmE3ODUyMWRmZTE2NDkzMWIxMDk3MjNhMmRlZDBjMzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3RtaW5zdGVyIFJlc2N1ZSBNaXNzaW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjMxMzdkNDgzMTE0YjkwOTM4NDc1N2RlYzJkZjFlZS5zZXRDb250ZW50KGh0bWxfZmE3ODUyMWRmZTE2NDkzMWIxMDk3MjNhMmRlZDBjMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTZjODcxNjg1NDA2NDBlZmIyYjUzYzc0OWZjMjE2MzMuYmluZFBvcHVwKHBvcHVwX2RiMzEzN2Q0ODMxMTRiOTA5Mzg0NzU3ZGVjMmRmMWVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MThjZjY4ODc0MWY0ODRiODAxNWQ0MzJjM2E5MTliMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI4MTg3NzI0LCAtNzYuNjMyNzM5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWI2OTY3ZjBkNTJiNDA2NzhkZjRkYjYxNjNjNzBmNTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzA4MzhmMzMwMzc0NDE4NGFlMmQ4MGUxOTYxYzI4YTYgPSAkKGA8ZGl2IGlkPSJodG1sX2MwODM4ZjMzMDM3NDQxODRhZTJkODBlMTk2MWMyOGE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXVsJ3MgUGxhY2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliNjk2N2YwZDUyYjQwNjc4ZGY0ZGI2MTYzYzcwZjU1LnNldENvbnRlbnQoaHRtbF9jMDgzOGYzMzAzNzQ0MTg0YWUyZDgwZTE5NjFjMjhhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MThjZjY4ODc0MWY0ODRiODAxNWQ0MzJjM2E5MTliMi5iaW5kUG9wdXAocG9wdXBfOWI2OTY3ZjBkNTJiNDA2NzhkZjRkYjYxNjNjNzBmNTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjMzNhZGMzNDBmNTQ0MDI5YThiOTk5ZGZlMWU4ZTdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjc1Mjg0MzksIC03Ni43Mzg1NzM1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDhhZDAyODljNjU0YjVjYmM3M2Q0NTUyYzZiODZjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMGExY2MxYzYxMDU0ZmFjYTczMTBmYjA3NTk3ZTA0YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjBhMWNjMWM2MTA1NGZhY2E3MzEwZmIwNzU5N2UwNGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldvbWVuJ3MgTWlzc2lvbmFyeSBPdXRyZWFjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjA4YWQwMjg5YzY1NGI1Y2JjNzNkNDU1MmM2Yjg2YzYuc2V0Q29udGVudChodG1sXzIwYTFjYzFjNjEwNTRmYWNhNzMxMGZiMDc1OTdlMDRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjMzNhZGMzNDBmNTQ0MDI5YThiOTk5ZGZlMWU4ZTdiLmJpbmRQb3B1cChwb3B1cF9mMDhhZDAyODljNjU0YjVjYmM3M2Q0NTUyYzZiODZjNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjA2NWY4MzUyM2I2NDJiM2JkMDFkY2ZhOTUxMmVhOTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xODY0MTAyOCwgLTc2Ljg3ODU5NTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyOWY4ZTM2MmZlOTQ4MDdiNjQxYWI3YjIwYmZmN2RhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRiOTRkZmJjYzQ5ZjQ1ZGU5YjQ1NTVlY2Y2ZjRmM2Y1ID0gJChgPGRpdiBpZD0iaHRtbF80Yjk0ZGZiY2M0OWY0NWRlOWI0NTU1ZWNmNmY0ZjNmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3Jhc3Nyb290cyBDcmlzaXMgSW50ZXJ2ZW50aW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMjlmOGUzNjJmZTk0ODA3YjY0MWFiN2IyMGJmZjdkYS5zZXRDb250ZW50KGh0bWxfNGI5NGRmYmNjNDlmNDVkZTliNDU1NWVjZjZmNGYzZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjA2NWY4MzUyM2I2NDJiM2JkMDFkY2ZhOTUxMmVhOTYuYmluZFBvcHVwKHBvcHVwX2UyOWY4ZTM2MmZlOTQ4MDdiNjQxYWI3YjIwYmZmN2RhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMTQ2NDc1MTdiNWM0NjRhYmRjMDJmYmJiODY0ZjQwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMyMTk2MzQ4LCAtNzYuNzM4OTU1NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjY1NTM2M2UzZjM1NGE5ZTkwMDRkMmQ0MTI4ZmY1NDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzA5ZGM1ZjNiYTdmNDAwMjkwYWQ2YzMyYTkwOTRhNmIgPSAkKGA8ZGl2IGlkPSJodG1sXzMwOWRjNWYzYmE3ZjQwMDI5MGFkNmMzMmE5MDk0YTZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GZWF0aGVyYmVkIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2NTUzNjNlM2YzNTRhOWU5MDA0ZDJkNDEyOGZmNTQ4LnNldENvbnRlbnQoaHRtbF8zMDlkYzVmM2JhN2Y0MDAyOTBhZDZjMzJhOTA5NGE2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMTQ2NDc1MTdiNWM0NjRhYmRjMDJmYmJiODY0ZjQwNC5iaW5kUG9wdXAocG9wdXBfZjY1NTM2M2UzZjM1NGE5ZTkwMDRkMmQ0MTI4ZmY1NDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiMDIxODY5ZDBjOTQ4NjU5N2U2MThhNzFmZjI1NmM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjc4NDQ1NzksIC03Ni41MzA0MjE0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNGUwOTY5M2QxZmQ0ODk1YjQ3YTQyMWViNDkyNDgzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNTcyNzg5ZDQ5ZGE0NTU2YmU1NzlkMmQ4ZTFhZDkzYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjU3Mjc4OWQ0OWRhNDU1NmJlNTc5ZDJkOGUxYWQ5M2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBSaXRhJ3MgU3QuIFZpbmNlbnQgZGVQYXVsIENvbmZlcmVuY2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0ZTA5NjkzZDFmZDQ4OTViNDdhNDIxZWI0OTI0ODMxLnNldENvbnRlbnQoaHRtbF8yNTcyNzg5ZDQ5ZGE0NTU2YmU1NzlkMmQ4ZTFhZDkzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYjAyMTg2OWQwYzk0ODY1OTdlNjE4YTcxZmYyNTZjOS5iaW5kUG9wdXAocG9wdXBfZDRlMDk2OTNkMWZkNDg5NWI0N2E0MjFlYjQ5MjQ4MzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YxMmI2YWIzYTIyMDQxNmNiYmM0OGI1YjEwZGZiNzNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzg3NDIxNzcsIC03Ny4wNTU1MDM2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZTAwZTQ3ZWY4MDk0MWU4YmJjNmM3M2JmNGQxNjNlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTI4NTQzYmY2MmM0MTgxYjNhMjk2NGU3NzQ3ZjExNiA9ICQoYDxkaXYgaWQ9Imh0bWxfNmEyODU0M2JmNjJjNDE4MWIzYTI5NjRlNzc0N2YxMTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vcmdhbiBDaGFwZWwgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlMDBlNDdlZjgwOTQxZThiYmM2YzczYmY0ZDE2M2VmLnNldENvbnRlbnQoaHRtbF82YTI4NTQzYmY2MmM0MTgxYjNhMjk2NGU3NzQ3ZjExNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMTJiNmFiM2EyMjA0MTZjYmJjNDhiNWIxMGRmYjczZS5iaW5kUG9wdXAocG9wdXBfM2UwMGU0N2VmODA5NDFlOGJiYzZjNzNiZjRkMTYzZWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0NmMzNjhkODNhNDQ5YjE4MTkzYTY5ZTA4ZmE1ZjExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjgwMjkxMDgsIC03Ni42MzU3NDkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViN2M3MWFjMjI1ODQwYjJiYzM5MDVmYzI1YjI4M2Q2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5NjY3MDAyMDJhNzRiYzY4Y2VjMWE1Zjk4MWYxNzZlID0gJChgPGRpdiBpZD0iaHRtbF9mOTY2NzAwMjAyYTc0YmM2OGNlYzFhNWY5ODFmMTc2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hhcmxlcyBDYXJyb2xsIEJhcnJpc3RlciBFbGVtPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YjdjNzFhYzIyNTg0MGIyYmMzOTA1ZmMyNWIyODNkNi5zZXRDb250ZW50KGh0bWxfZjk2NjcwMDIwMmE3NGJjNjhjZWMxYTVmOTgxZjE3NmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDQ2YzM2OGQ4M2E0NDliMTgxOTNhNjllMDhmYTVmMTEuYmluZFBvcHVwKHBvcHVwXzViN2M3MWFjMjI1ODQwYjJiYzM5MDVmYzI1YjI4M2Q2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZjdmNGYzMzRkYjc0OWZmOWMyZmZiZjMzOWQ5MTE1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM1MTczMTA1LCAtNzYuNzIxMjE4MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTA3MGQyMjQ1ODcyNDExYTgwNjMzMjU4ZTVkODRhZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWRiNzg2Njg1MzYyNGFiZmJhNGZlNDM1YmIzZDdlOTAgPSAkKGA8ZGl2IGlkPSJodG1sXzVkYjc4NjY4NTM2MjRhYmZiYTRmZTQzNWJiM2Q3ZTkwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYW1wZmllbGQgRWFybHkgQ2hpbGRob29kPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDcwZDIyNDU4NzI0MTFhODA2MzMyNThlNWQ4NGFkMy5zZXRDb250ZW50KGh0bWxfNWRiNzg2Njg1MzYyNGFiZmJhNGZlNDM1YmIzZDdlOTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWY3ZjRmMzM0ZGI3NDlmZjljMmZmYmYzMzlkOTExNWUuYmluZFBvcHVwKHBvcHVwXzkwNzBkMjI0NTg3MjQxMWE4MDYzMzI1OGU1ZDg0YWQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YWRlOGZmMTQ1MWQ0NzQ4YTBmMjk4ZDdhYzE5M2E5NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI3NjEyNTk3LCAtNzYuNjE4OTc1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wY2U2OGZiNjFiNjI0MWMxYWVkMGZlMzVlNDJhMjVhZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hODdhNDFkNGI2ZmY0YmVkOGIzNTQ4MTkwODgzYzkzNiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTg3YTQxZDRiNmZmNGJlZDhiMzU0ODE5MDg4M2M5MzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNoYXJwIExlYWRlbmhhbGwgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGNlNjhmYjYxYjYyNDFjMWFlZDBmZTM1ZTQyYTI1YWUuc2V0Q29udGVudChodG1sX2E4N2E0MWQ0YjZmZjRiZWQ4YjM1NDgxOTA4ODNjOTM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVhZGU4ZmYxNDUxZDQ3NDhhMGYyOThkN2FjMTkzYTk3LmJpbmRQb3B1cChwb3B1cF8wY2U2OGZiNjFiNjI0MWMxYWVkMGZlMzVlNDJhMjVhZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzNkODM3ZTA4NDUxNGMxOWE1YTRmZDU3MzdmOWMzZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNjYyNDUzNywgLTc2LjY1Njk2MTcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlkMmY5MmE5MGIwYTRhZGI5NzUzMzlhYzU3MmFjZDViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YyY2ZjOTU0Y2Q0ZDQyYzdhODYxM2E0NDlhN2U2MWZjID0gJChgPGRpdiBpZD0iaHRtbF9mMmNmYzk1NGNkNGQ0MmM3YTg2MTNhNDQ5YTdlNjFmYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJhaG1hIE1hZGh2YSBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQyZjkyYTkwYjBhNGFkYjk3NTMzOWFjNTcyYWNkNWIuc2V0Q29udGVudChodG1sX2YyY2ZjOTU0Y2Q0ZDQyYzdhODYxM2E0NDlhN2U2MWZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MzZDgzN2UwODQ1MTRjMTlhNWE0ZmQ1NzM3ZjljM2VhLmJpbmRQb3B1cChwb3B1cF85ZDJmOTJhOTBiMGE0YWRiOTc1MzM5YWM1NzJhY2Q1YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjc1NGQyYjU5ZWZhNGJjOWJkNjFjY2MwNTZiYWM5ODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNjE3ODY0LCAtNzYuMzY2MDA5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMzEyZjI3MTRhMjM0NzgyYTkyNDVlOGM2NmY2YzdiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNjk0ZTk0NGYzYTQ0ZWQ5YWYzODJlZThlZjYzOWQ3MSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjY5NGU5NDRmM2E0NGVkOWFmMzgyZWU4ZWY2MzlkNzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkogJiBDIFVuaXR5IEluYy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzMTJmMjcxNGEyMzQ3ODJhOTI0NWU4YzY2ZjZjN2I3LnNldENvbnRlbnQoaHRtbF9mNjk0ZTk0NGYzYTQ0ZWQ5YWYzODJlZThlZjYzOWQ3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNzU0ZDJiNTllZmE0YmM5YmQ2MWNjYzA1NmJhYzk4MS5iaW5kUG9wdXAocG9wdXBfZjMxMmYyNzE0YTIzNDc4MmE5MjQ1ZThjNjZmNmM3YjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzYmIwNGM2MTYxZjRjYzA5MWI5NGMyMGRkMDdiOTFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDQ0NjQ0ODMsIC03Ni43OTIyNzAxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZmUzOTJlM2RkNTE0NTUxOWFiNzQwMzY5YWM5MjQyZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzBjMzgwZDMyZDc0OGRhYmYyNTQ0Y2M3NzhhNzJkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzcwYzM4MGQzMmQ3NDhkYWJmMjU0NGNjNzc4YTcyZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRpbWJlciBHcm92ZSBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmUzOTJlM2RkNTE0NTUxOWFiNzQwMzY5YWM5MjQyZi5zZXRDb250ZW50KGh0bWxfYzcwYzM4MGQzMmQ3NDhkYWJmMjU0NGNjNzc4YTcyZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDNiYjA0YzYxNjFmNGNjMDkxYjk0YzIwZGQwN2I5MWYuYmluZFBvcHVwKHBvcHVwXzJmZTM5MmUzZGQ1MTQ1NTE5YWI3NDAzNjlhYzkyNDJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzE5ZDRmNjA2OTQ0YzJhYWMzZWQwOWQ0Y2M4MWEyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjYzNTY3NTM2LCAtNzguNzUyMDk5MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzFjOGZhMWI0ZjY1NGQyYjhjNDNmOTJkM2JlNDNiMGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDUyMzlkOTgyMTI2NDBhOGEzODg0YTVlMjRhNWMwNGEgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1MjM5ZDk4MjEyNjQwYThhMzg4NGE1ZTI0YTVjMDRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYWx2YXRpb24gQXJteSAtIEN1bWJlcmxhbmQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcxYzhmYTFiNGY2NTRkMmI4YzQzZjkyZDNiZTQzYjBkLnNldENvbnRlbnQoaHRtbF9kNTIzOWQ5ODIxMjY0MGE4YTM4ODRhNWUyNGE1YzA0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYzE5ZDRmNjA2OTQ0YzJhYWMzZWQwOWQ0Y2M4MWEyMC5iaW5kUG9wdXAocG9wdXBfNzFjOGZhMWI0ZjY1NGQyYjhjNDNmOTJkM2JlNDNiMGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4ZmE0MjA4NzU1NTQ2ZmFhMTY3YjZkZjRmNThmNDczID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjY2NDEyMDQsIC03Ny43MTMyMzU0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNzkxODk0M2I1NDA0MTFiOGMzMmEyMDcxMTk5MWE3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MjM3YjVkMjVmMTU0MWIwODQwYzdiYWU2YjI3NTk2NCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDIzN2I1ZDI1ZjE1NDFiMDg0MGM3YmFlNmIyNzU5NjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoZXJuIE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3OTE4OTQzYjU0MDQxMWI4YzMyYTIwNzExOTkxYTdmLnNldENvbnRlbnQoaHRtbF80MjM3YjVkMjVmMTU0MWIwODQwYzdiYWU2YjI3NTk2NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOGZhNDIwODc1NTU0NmZhYTE2N2I2ZGY0ZjU4ZjQ3My5iaW5kUG9wdXAocG9wdXBfYTc5MTg5NDNiNTQwNDExYjhjMzJhMjA3MTE5OTFhN2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiMjBiMTk5N2Q3NjQzMmY4Y2QyMjM5ZmM5ODZjMWJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjY4NDYyOTUsIC03Ni42NTIzNTY1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YmE2MjNlN2Y3NTI0YmIyYTM0YzNlNzE1MGVkMTEzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYmMyNDU5YzBlMDU0N2RmOTY1ZTMwZTVmOTZiZjVlOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmJjMjQ1OWMwZTA1NDdkZjk2NWUzMGU1Zjk2YmY1ZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBCZWdpbm5pbmdzIFNEQSBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViYTYyM2U3Zjc1MjRiYjJhMzRjM2U3MTUwZWQxMTNhLnNldENvbnRlbnQoaHRtbF9mYmMyNDU5YzBlMDU0N2RmOTY1ZTMwZTVmOTZiZjVlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YjIwYjE5OTdkNzY0MzJmOGNkMjIzOWZjOTg2YzFiZC5iaW5kUG9wdXAocG9wdXBfNWJhNjIzZTdmNzUyNGJiMmEzNGMzZTcxNTBlZDExM2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RkMDFlMzViOTg4ZDQyY2FhZWUxNmM4ODZiZjI5OTNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjYxODkwMDIsIC03Ni42Mzg0NzQ2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTY0OTY5ZmJjOTA0NjYyODY3YTc2ZTM3MDM5N2RlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTA1YTQ3NzNiZmM0MjBlODY1ODU1MzU3MTBkYTkyYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTkwNWE0NzczYmZjNDIwZTg2NTg1NTM1NzEwZGE5MmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3Rwb3J0IEFjYWRlbXkgIzIyNTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGU2NDk2OWZiYzkwNDY2Mjg2N2E3NmUzNzAzOTdkZTYuc2V0Q29udGVudChodG1sX2U5MDVhNDc3M2JmYzQyMGU4NjU4NTUzNTcxMGRhOTJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RkMDFlMzViOTg4ZDQyY2FhZWUxNmM4ODZiZjI5OTNmLmJpbmRQb3B1cChwb3B1cF84ZTY0OTY5ZmJjOTA0NjYyODY3YTc2ZTM3MDM5N2RlNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2RlYTYwNTk0OTNjNGQxMmIyOGQxOWM1ZGI3M2I3MTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42NjgwNzU0OSwgLTc2LjM3NzgwMjkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliZGU3MDJhZmQxMzQ4ZWM4ZWZlZTkwMGMxZDM3OTFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4MjJhZDY2NjVjNDQ3MzE4ZGVmM2FlNjc0YTljNTk0ID0gJChgPGRpdiBpZD0iaHRtbF8zODIyYWQ2NjY1YzQ0NzMxOGRlZjNhZTY3NGE5YzU5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFzb24tRGl4b24gQ29tbXVuaXR5IFNlcnZpY2VzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YmRlNzAyYWZkMTM0OGVjOGVmZWU5MDBjMWQzNzkxYy5zZXRDb250ZW50KGh0bWxfMzgyMmFkNjY2NWM0NDczMThkZWYzYWU2NzRhOWM1OTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2RlYTYwNTk0OTNjNGQxMmIyOGQxOWM1ZGI3M2I3MTkuYmluZFBvcHVwKHBvcHVwXzliZGU3MDJhZmQxMzQ4ZWM4ZWZlZTkwMGMxZDM3OTFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MzMyYzNkMmUxMTQ0Mjg0YTJmNzc0NWUxMDhjZWIzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM5MzA5NjEsIC03Ny40MjUxNjIxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84N2IwMzk3NWFhODA0NGYwOTk2N2QyZTcwOWMxZTU4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWI3NmJkZmQzODA0ODU5OGQzNDA1NTFhOWYzYmI1NCA9ICQoYDxkaXYgaWQ9Imh0bWxfNGFiNzZiZGZkMzgwNDg1OThkMzQwNTUxYTlmM2JiNTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNyZXN0d29vZCBNaWRkbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3YjAzOTc1YWE4MDQ0ZjA5OTY3ZDJlNzA5YzFlNTg2LnNldENvbnRlbnQoaHRtbF80YWI3NmJkZmQzODA0ODU5OGQzNDA1NTFhOWYzYmI1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MzMyYzNkMmUxMTQ0Mjg0YTJmNzc0NWUxMDhjZWIzNC5iaW5kUG9wdXAocG9wdXBfODdiMDM5NzVhYTgwNDRmMDk5NjdkMmU3MDljMWU1ODYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YzYTBkNjg0Yzk2NDQ3NWQ4NzQ3YjgwODRlYTcwYmEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzc2MjAwMDQsIC03NS42MDMyNjY1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OGI4MzBkYTRiNTM0N2RmODkzMzJjMTE0NDIxZGI0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZGIzODUyMzVkMWI0ZTM3YjMwZWFhZGQzM2E3M2JmZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZWRiMzg1MjM1ZDFiNGUzN2IzMGVhYWRkMzNhNzNiZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoaXBtYW4gRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzhiODMwZGE0YjUzNDdkZjg5MzMyYzExNDQyMWRiNGUuc2V0Q29udGVudChodG1sX2VkYjM4NTIzNWQxYjRlMzdiMzBlYWFkZDMzYTczYmZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YzYTBkNjg0Yzk2NDQ3NWQ4NzQ3YjgwODRlYTcwYmEyLmJpbmRQb3B1cChwb3B1cF83OGI4MzBkYTRiNTM0N2RmODkzMzJjMTE0NDIxZGI0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGMxMGMyMWQ1MzI4NDljOTkwNzk3MzJlZTcyZDIyZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNTIyOTUxOSwgLTc2LjY1MDQ3ODk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y4NDU2OTY0MzAzMzQyOTZhODIwZGM4YzBmNjEzZTkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRiMDhiNjM0YjA5MzQxMzFiN2EwMzhjNjNiY2VkZGI3ID0gJChgPGRpdiBpZD0iaHRtbF80YjA4YjYzNGIwOTM0MTMxYjdhMDM4YzYzYmNlZGRiNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RmlzaGVzICYgTG9hdmVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODQ1Njk2NDMwMzM0Mjk2YTgyMGRjOGMwZjYxM2U5Mi5zZXRDb250ZW50KGh0bWxfNGIwOGI2MzRiMDkzNDEzMWI3YTAzOGM2M2JjZWRkYjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGMxMGMyMWQ1MzI4NDljOTkwNzk3MzJlZTcyZDIyZjUuYmluZFBvcHVwKHBvcHVwX2Y4NDU2OTY0MzAzMzQyOTZhODIwZGM4YzBmNjEzZTkyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYjlkYmRiZDdmYzE0ODhmOTQwODViNWU4NDFmOTBjMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY0OTkxMjg4LCAtNzcuNzI5MzI1ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjZhNmFjYTIxOGJiNGQ0YjliNWVhNjY1OTJmYmMyZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTQ2MjdiNTU2NTA1NGIwYTkwMmYxMGIzMWE3YzE2Y2EgPSAkKGA8ZGl2IGlkPSJodG1sX2U0NjI3YjU1NjUwNTRiMGE5MDJmMTBiMzFhN2MxNmNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFjZSBVbml0ZWQgTWV0aG9kaXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjZhNmFjYTIxOGJiNGQ0YjliNWVhNjY1OTJmYmMyZGMuc2V0Q29udGVudChodG1sX2U0NjI3YjU1NjUwNTRiMGE5MDJmMTBiMzFhN2MxNmNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FiOWRiZGJkN2ZjMTQ4OGY5NDA4NWI1ZTg0MWY5MGMxLmJpbmRQb3B1cChwb3B1cF82NmE2YWNhMjE4YmI0ZDRiOWI1ZWE2NjU5MmZiYzJkYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzc5NjdlZGViYzU1NDU0OTljYjIxMDBiMTBhN2M5NTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41NjMyOTM4OSwgLTc2LjA3NjIxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2M0OWI3NzBlMDc3NDdlZTk1OTY3ODAyODY4ODY1ZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmMxYTBiNGUxOGE1NGNkMGEyMGI2ZTI5NDgyM2NmMWUgPSAkKGA8ZGl2IGlkPSJodG1sXzJjMWEwYjRlMThhNTRjZDBhMjBiNmUyOTQ4MjNjZjFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BbmNob3IgUG9pbnQgSW5jPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YzQ5Yjc3MGUwNzc0N2VlOTU5Njc4MDI4Njg4NjVlNi5zZXRDb250ZW50KGh0bWxfMmMxYTBiNGUxOGE1NGNkMGEyMGI2ZTI5NDgyM2NmMWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzc5NjdlZGViYzU1NDU0OTljYjIxMDBiMTBhN2M5NTUuYmluZFBvcHVwKHBvcHVwXzdjNDliNzcwZTA3NzQ3ZWU5NTk2NzgwMjg2ODg2NWU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZGIzYWZkM2FiODU0MTZmOTA3OGIyYTcxNTI1ODc3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI1NDgyNDE2LCAtNzYuNjU2NzEyNjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTEwNTVhZWJiNjAzNDI4MGJmYTU5YTRmZGJiODRlNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTU3NjhlYWVkZDg1NGFjNWEwMmY2YWFjZTQ4OTc4MWYgPSAkKGA8ZGl2IGlkPSJodG1sXzE1NzY4ZWFlZGQ4NTRhYzVhMDJmNmFhY2U0ODk3ODFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYWx2YXRpb24gQXJteSBBZHVsdCBSZWhhYi48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ExMDU1YWViYjYwMzQyODBiZmE1OWE0ZmRiYjg0ZTQyLnNldENvbnRlbnQoaHRtbF8xNTc2OGVhZWRkODU0YWM1YTAyZjZhYWNlNDg5NzgxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZGIzYWZkM2FiODU0MTZmOTA3OGIyYTcxNTI1ODc3NS5iaW5kUG9wdXAocG9wdXBfYTEwNTVhZWJiNjAzNDI4MGJmYTU5YTRmZGJiODRlNDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NkYjI4MzU0NGU3ODQ5NmZiMTZiNmE2MjRmOWI2YWVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjU0MTcxNjYsIC03Ni42NDUyNzY2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NTYwZDFhZGEzYTI0ZWRiOGM0ODQ3NTVhYjIzYjhiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYmQ2Njg5YTJjNTk0NzZiYmE3OGU3ODM1MTQzNGJmYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmJkNjY4OWEyYzU5NDc2YmJhNzhlNzgzNTE0MzRiZmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxha2VsYW5kIEVsZW1lbnRhcnkvTWlkZGxlIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjU2MGQxYWRhM2EyNGVkYjhjNDg0NzU1YWIyM2I4YjUuc2V0Q29udGVudChodG1sX2ZiZDY2ODlhMmM1OTQ3NmJiYTc4ZTc4MzUxNDM0YmZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NkYjI4MzU0NGU3ODQ5NmZiMTZiNmE2MjRmOWI2YWVhLmJpbmRQb3B1cChwb3B1cF82NTYwZDFhZGEzYTI0ZWRiOGM0ODQ3NTVhYjIzYjhiNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTc5MzhlZTE5OGM1NDVjZjg3NGJlOTk2Y2VjMzdkYmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yODE5NzIzOSwgLTc2LjYxMzA3ODg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMzIwNzllNjA2ZDRlZmE5MmM3YTI5MjBjYjIyYTBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwMTQyNDM0NmI2YzQ2ZDNiNjE3NTMwN2Q5MGM5NjRlID0gJChgPGRpdiBpZD0iaHRtbF9jMDE0MjQzNDZiNmM0NmQzYjYxNzUzMDdkOTBjOTY0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hyaXN0IENodXJjaCBIYXJib3IgQXBhcnRtZW50czwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWUzMjA3OWU2MDZkNGVmYTkyYzdhMjkyMGNiMjJhMGQuc2V0Q29udGVudChodG1sX2MwMTQyNDM0NmI2YzQ2ZDNiNjE3NTMwN2Q5MGM5NjRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3OTM4ZWUxOThjNTQ1Y2Y4NzRiZTk5NmNlYzM3ZGJjLmJpbmRQb3B1cChwb3B1cF81ZTMyMDc5ZTYwNmQ0ZWZhOTJjN2EyOTIwY2IyMmEwZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzc2ZWJjZGNlZDk0NDM3NGI3YTcxY2NhMTg1NjFkNDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yODA2NzA1MSwgLTc2LjYxNDU5NjY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlZDQ2NzA0MGI0NTRjM2JhNDIyMzgwODkyZDk4NzJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkxYzg0MGI0MDU0YTRmY2M4NDliN2FlZGIwODI3NWUzID0gJChgPGRpdiBpZD0iaHRtbF85MWM4NDBiNDA1NGE0ZmNjODQ5YjdhZWRiMDgyNzVlMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmFsdGltb3JlIE91dHJlYWNoIFNlcnZpY2VzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZWQ0NjcwNDBiNDU0YzNiYTQyMjM4MDg5MmQ5ODcyZC5zZXRDb250ZW50KGh0bWxfOTFjODQwYjQwNTRhNGZjYzg0OWI3YWVkYjA4Mjc1ZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzc2ZWJjZGNlZDk0NDM3NGI3YTcxY2NhMTg1NjFkNDQuYmluZFBvcHVwKHBvcHVwXzVlZDQ2NzA0MGI0NTRjM2JhNDIyMzgwODkyZDk4NzJkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83N2UwODZlNjA3ZDc0MjkyOTUzY2E5YTI3NmI4NDE4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5MzQxNTYxLCAtNzYuNTg3NTQ4OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGMyODhjOGMwOGI3NDA5YWExNzdhMzEwZmJhZDAwNTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTc4MzczYTljNTk0NGZlZTgwMTU5ZmIyNzQ5OTM4NGYgPSAkKGA8ZGl2IGlkPSJodG1sX2U3ODM3M2E5YzU5NDRmZWU4MDE1OWZiMjc0OTkzODRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db21tb2RvcmUgSm9obiBSb2RnZXJzIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjMjg4YzhjMDhiNzQwOWFhMTc3YTMxMGZiYWQwMDUxLnNldENvbnRlbnQoaHRtbF9lNzgzNzNhOWM1OTQ0ZmVlODAxNTlmYjI3NDk5Mzg0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83N2UwODZlNjA3ZDc0MjkyOTUzY2E5YTI3NmI4NDE4Zi5iaW5kUG9wdXAocG9wdXBfOGMyODhjOGMwOGI3NDA5YWExNzdhMzEwZmJhZDAwNTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MyZDI3NjIyZmY0ZjRiOGE5MTdkZjNhOWNiMGFmYjA0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjk0MzM5MzcsIC03Ni41ODc1MTM2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YzJlMjU1MDU5ZTA0ZTQ3YTQ4ODRjY2QwODFjMTQwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yY2RjYzJjNDU3NTk0MThhYjMxNmNhN2FhOWMxMzY2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfMmNkY2MyYzQ1NzU5NDE4YWIzMTZjYTdhYTljMTM2NjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBEb29yIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YzJlMjU1MDU5ZTA0ZTQ3YTQ4ODRjY2QwODFjMTQwNC5zZXRDb250ZW50KGh0bWxfMmNkY2MyYzQ1NzU5NDE4YWIzMTZjYTdhYTljMTM2NjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzJkMjc2MjJmZjRmNGI4YTkxN2RmM2E5Y2IwYWZiMDQuYmluZFBvcHVwKHBvcHVwXzljMmUyNTUwNTllMDRlNDdhNDg4NGNjZDA4MWMxNDA0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOGYyZGI2OGU1ZTI0MzdiODk0YjExOGFkY2M0M2ZiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI5MDUxOTczLCAtNzYuNTk3MTY4NjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDdiMGY1NmFlZjJmNGU4Yjg2OGE5YWJkM2JkMzUwOWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2QwMGQ0OWYzOTNlNGI5ZjhkMTZmZmIyODkwMTg4YTAgPSAkKGA8ZGl2IGlkPSJodG1sX2NkMDBkNDlmMzkzZTRiOWY4ZDE2ZmZiMjg5MDE4OGEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GaXJzdCBBcG9zdG9saWMgRmFpdGggQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kN2IwZjU2YWVmMmY0ZThiODY4YTlhYmQzYmQzNTA5Yy5zZXRDb250ZW50KGh0bWxfY2QwMGQ0OWYzOTNlNGI5ZjhkMTZmZmIyODkwMTg4YTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjhmMmRiNjhlNWUyNDM3Yjg5NGIxMThhZGNjNDNmYjUuYmluZFBvcHVwKHBvcHVwX2Q3YjBmNTZhZWYyZjRlOGI4NjhhOWFiZDNiZDM1MDljKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZjA3NjgwMmE4MTE0ZGUzOTQ3ZjNmOGE3OTRiNThmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI4NjQzMjk2LCAtNzYuNTk1NDYxOTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGExZTE5ZjlkNGY1NGEzNjlhMWVhYjE4YzU4N2EyNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2QyZjI4ZGE4YWRjNDIyYTliZGNhN2UyZDBjNjhjNTUgPSAkKGA8ZGl2IGlkPSJodG1sX2NkMmYyOGRhOGFkYzQyMmE5YmRjYTdlMmQwYzY4YzU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gVmluY2VudCBkZSBQYXVsL0JlYW5zQnJlYWQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhMWUxOWY5ZDRmNTRhMzY5YTFlYWIxOGM1ODdhMjU4LnNldENvbnRlbnQoaHRtbF9jZDJmMjhkYThhZGM0MjJhOWJkY2E3ZTJkMGM2OGM1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZjA3NjgwMmE4MTE0ZGUzOTQ3ZjNmOGE3OTRiNThmMC5iaW5kUG9wdXAocG9wdXBfOGExZTE5ZjlkNGY1NGEzNjlhMWVhYjE4YzU4N2EyNTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmYjhiMjJlYTVkNTQxODk4NmQyODcwZjQ4YTI1Y2I1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzY4MTI5NzUsIC03Ni41NDc3OTQzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYzZhYTllZjczOWI0YWE5OTVlY2UxZTY0NDcyY2YwYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZmE4MWZjNmUwYjc0ZThjYjZjZjY2YTFjM2Q1NjI3NCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2ZhODFmYzZlMGI3NGU4Y2I2Y2Y2NmExYzNkNTYyNzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyaWVuZHNoaXAgT3V0cmVhY2ggQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYzZhYTllZjczOWI0YWE5OTVlY2UxZTY0NDcyY2YwYy5zZXRDb250ZW50KGh0bWxfN2ZhODFmYzZlMGI3NGU4Y2I2Y2Y2NmExYzNkNTYyNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGZiOGIyMmVhNWQ1NDE4OTg2ZDI4NzBmNDhhMjVjYjUuYmluZFBvcHVwKHBvcHVwX2FjNmFhOWVmNzM5YjRhYTk5NWVjZTFlNjQ0NzJjZjBjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjdlNzVmYmQyZDc0ZmRkOTRhNmQ5NzUwN2NkMzFlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQ1MTg5NjQ1LCAtNzYuODIwMTkyODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGI3Mjc0ZDIzZDUwNDVlNDk0MGVmYWQ5NzRkYmExNmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjY3Y2NkNmIwMzA3NGY2Yjk5ZDNlMjNiOGY3NzdlY2QgPSAkKGA8ZGl2IGlkPSJodG1sXzI2N2NjZDZiMDMwNzRmNmI5OWQzZTIzYjhmNzc3ZWNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db21tdW5pdHkgQ3Jpc2lzIENlbnRlciwgSW5jLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGI3Mjc0ZDIzZDUwNDVlNDk0MGVmYWQ5NzRkYmExNmMuc2V0Q29udGVudChodG1sXzI2N2NjZDZiMDMwNzRmNmI5OWQzZTIzYjhmNzc3ZWNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmN2U3NWZiZDJkNzRmZGQ5NGE2ZDk3NTA3Y2QzMWViLmJpbmRQb3B1cChwb3B1cF84YjcyNzRkMjNkNTA0NWU0OTQwZWZhZDk3NGRiYTE2YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWE1NjczNDI1MjczNDZlYTliMTYzMTY3NDhlMmRmNDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNzM0ODc1OSwgLTc2Ljk2NTAzNDM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiNGI3NzQyZDdmZjQzNDY4ZjQ0ZGZlMDhiYmM4YTlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlN2ZjYThhMTg2YzQ5NTViZWJjM2QyYmVhNjE5NTVhID0gJChgPGRpdiBpZD0iaHRtbF9lZTdmY2E4YTE4NmM0OTU1YmViYzNkMmJlYTYxOTU1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3lrZXN2aWxsZSBNaWRkbGUgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjRiNzc0MmQ3ZmY0MzQ2OGY0NGRmZTA4YmJjOGE5Zi5zZXRDb250ZW50KGh0bWxfZWU3ZmNhOGExODZjNDk1NWJlYmMzZDJiZWE2MTk1NWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWE1NjczNDI1MjczNDZlYTliMTYzMTY3NDhlMmRmNDEuYmluZFBvcHVwKHBvcHVwX2RiNGI3NzQyZDdmZjQzNDY4ZjQ0ZGZlMDhiYmM4YTlmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OTIzN2FjYTA0ZTY0M2ZjYWY2YTNjMWNkMTQzZDZhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI1ODk1ODc5LCAtNzYuNTEzNDIxMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2FhNzUzN2M5NWEwNGJlODllYmZmYWJjZDM3ZWY0NTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWQxNDc3YmY1MTA4NDljZWFhNmRkYmEyZDA5MzI3ZmUgPSAkKGA8ZGl2IGlkPSJodG1sX2VkMTQ3N2JmNTEwODQ5Y2VhYTZkZGJhMmQwOTMyN2ZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EdW5kYWxrIE1pZGRsZSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhYTc1MzdjOTVhMDRiZTg5ZWJmZmFiY2QzN2VmNDU3LnNldENvbnRlbnQoaHRtbF9lZDE0NzdiZjUxMDg0OWNlYWE2ZGRiYTJkMDkzMjdmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OTIzN2FjYTA0ZTY0M2ZjYWY2YTNjMWNkMTQzZDZhZS5iaW5kUG9wdXAocG9wdXBfM2FhNzUzN2M5NWEwNGJlODllYmZmYWJjZDM3ZWY0NTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1MmQxYjBkMGVkZTRlZDI5NjFiYzVhN2U1Y2U1MWM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMjIwNzY2NDMsIC03Ni40NTA2NzM4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzRjNzk3M2Q0YTY0OTg0YTdhZjQ4MDJiZDlhYTZjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZjQwMjE2MjI2MTk0NmQ2YjkyYzE5NzA4MjEyYjA4ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYmY0MDIxNjIyNjE5NDZkNmI5MmMxOTcwODIxMmIwOGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVkZ2VtZXJlIENodXJjaCBvZiBHb2Q8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFjNGM3OTczZDRhNjQ5ODRhN2FmNDgwMmJkOWFhNmM1LnNldENvbnRlbnQoaHRtbF9iZjQwMjE2MjI2MTk0NmQ2YjkyYzE5NzA4MjEyYjA4ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NTJkMWIwZDBlZGU0ZWQyOTYxYmM1YTdlNWNlNTFjNC5iaW5kUG9wdXAocG9wdXBfMWM0Yzc5NzNkNGE2NDk4NGE3YWY0ODAyYmQ5YWE2YzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0NzgyZmE5YjZjYzQyMmY5MzdiYjIwMzRmODVkNmQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzM3MzUyMTksIC03Ni40NTM4NjE0MDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YThjNjAxMTAxOWU0ZDg5YjFhYmVlYjBmODJlODYxMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZjNkMDlmM2Q4YWU0NmFjODYxNzM0ODI5M2QxYTFjOSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGYzZDA5ZjNkOGFlNDZhYzg2MTczNDgyOTNkMWExYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZpY3RvcnkgVmlsbGEgQmFwdGlzdCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhOGM2MDExMDE5ZTRkODliMWFiZWViMGY4MmU4NjExLnNldENvbnRlbnQoaHRtbF80ZjNkMDlmM2Q4YWU0NmFjODYxNzM0ODI5M2QxYTFjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNDc4MmZhOWI2Y2M0MjJmOTM3YmIyMDM0Zjg1ZDZkMy5iaW5kUG9wdXAocG9wdXBfNGE4YzYwMTEwMTllNGQ4OWIxYWJlZWIwZjgyZTg2MTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhYjk4NWYyMTE3MzQ0MjNhOTA3MzE1ODk0NzI3ZWI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTYwMjQ4NDEsIC03Ni42MTUwMzk1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYWZhMDk5NGFlZmU0MzY3YTMyODQwOWQ1NDM0M2QzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNGYwZmExZmQ1Y2U0ZDMxYWZlNTk3N2RkMzMyZDNkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzRmMGZhMWZkNWNlNGQzMWFmZTU5NzdkZDMzMmQzZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdsZW4gQnVybmllIEhpZ2ggU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYWZhMDk5NGFlZmU0MzY3YTMyODQwOWQ1NDM0M2QzNS5zZXRDb250ZW50KGh0bWxfYzRmMGZhMWZkNWNlNGQzMWFmZTU5NzdkZDMzMmQzZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGFiOTg1ZjIxMTczNDQyM2E5MDczMTU4OTQ3MjdlYjkuYmluZFBvcHVwKHBvcHVwXzBhZmEwOTk0YWVmZTQzNjdhMzI4NDA5ZDU0MzQzZDM1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGViZGFmM2Y5ZmE0NWM5ODY3NDgzOWE4M2NlMjFhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjY1NzgyODUsIC03NS44MjUyNDI2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZmJkNTc3NjkxMDg0ODJlYTkzMzczMWVhYmVlN2M3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNmUwMjk0MjlhZjQ0NDE4YWVhMTFhMTQyNTg2OWNlMyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTZlMDI5NDI5YWY0NDQxOGFlYTExYTE0MjU4NjljZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhbGR3aW4gVU1DIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGZiZDU3NzY5MTA4NDgyZWE5MzM3MzFlYWJlZTdjNzkuc2V0Q29udGVudChodG1sX2E2ZTAyOTQyOWFmNDQ0MThhZWExMWExNDI1ODY5Y2UzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0ZWJkYWYzZjlmYTQ1Yzk4Njc0ODM5YTgzY2UyMWFhLmJpbmRQb3B1cChwb3B1cF8wZmJkNTc3NjkxMDg0ODJlYTkzMzczMWVhYmVlN2M3OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQ2YjlkOGU4OGMzNDk0MTkyZDRmNGFjMmQzMDZmZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xNTM4NDU5NywgLTc2LjU4NTI3NzI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlM2RmNDMwMTExZTQzOThiY2NhMzdlZTVmOTE2YzI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlYzc5OTMxNWI5ZTRiNDA5MmFhNTBiMDMxYTdkMWU2ID0gJChgPGRpdiBpZD0iaHRtbF80ZWM3OTkzMTViOWU0YjQwOTJhYTUwYjAzMWE3ZDFlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9jayAmIFN0ZXdhcmQgTW5zdHJ5IE91dHJlYWNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZTNkZjQzMDExMWU0Mzk4YmNjYTM3ZWU1ZjkxNmMyNC5zZXRDb250ZW50KGh0bWxfNGVjNzk5MzE1YjllNGI0MDkyYWE1MGIwMzFhN2QxZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDQ2YjlkOGU4OGMzNDk0MTkyZDRmNGFjMmQzMDZmZWIuYmluZFBvcHVwKHBvcHVwXzNlM2RmNDMwMTExZTQzOThiY2NhMzdlZTVmOTE2YzI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YWUyZTI5ZmU3M2I0Nzk4YjZiZTFmZDllM2Q4YTNjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjUyMzE2MjM4LCAtNzcuNjYxODUyODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjE0NmVhYzMxODE3NDJjNDlkYmYxNzRiOTYwZDU1ODggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzg2YzUzZTcwNGQ3NDIyMWI5MzdkZjlmOGVmNzg0ZDcgPSAkKGA8ZGl2IGlkPSJodG1sX2M4NmM1M2U3MDRkNzQyMjFiOTM3ZGY5ZjhlZjc4NGQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Cb29uc2Jvcm8gRmFtaWx5IFdvcnNoaXAgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMTQ2ZWFjMzE4MTc0MmM0OWRiZjE3NGI5NjBkNTU4OC5zZXRDb250ZW50KGh0bWxfYzg2YzUzZTcwNGQ3NDIyMWI5MzdkZjlmOGVmNzg0ZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWFlMmUyOWZlNzNiNDc5OGI2YmUxZmQ5ZTNkOGEzYzYuYmluZFBvcHVwKHBvcHVwXzIxNDZlYWMzMTgxNzQyYzQ5ZGJmMTc0Yjk2MGQ1NTg4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYTgwNTdmNGQ1ZmI0ZmZlOTQxZGUwMTU0NTg5ZGFhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjE3NDEzODU1LCAtNzYuNTUzMjA5NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGZlNTUwZDZlODdlNDZhYTg0MzUzZjQwMjAyNmQ3YjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNmODc3ODMxN2NjNDMyNGFmOTkxYzk4ZTg4NTkyM2MgPSAkKGA8ZGl2IGlkPSJodG1sXzkzZjg3NzgzMTdjYzQzMjRhZjk5MWM5OGU4ODU5MjNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb2xsZXkgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmZTU1MGQ2ZTg3ZTQ2YWE4NDM1M2Y0MDIwMjZkN2I3LnNldENvbnRlbnQoaHRtbF85M2Y4Nzc4MzE3Y2M0MzI0YWY5OTFjOThlODg1OTIzYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYTgwNTdmNGQ1ZmI0ZmZlOTQxZGUwMTU0NTg5ZGFhOS5iaW5kUG9wdXAocG9wdXBfOGZlNTUwZDZlODdlNDZhYTg0MzUzZjQwMjAyNmQ3YjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5Mjg2NGM4ZmUwMjRkNGI5ZTdjZWJiMGU2YzM4Zjg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTU0MjE5MjUsIC03Ni41ODY5OTQ4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MTY2ZmQyZTU0OWM0YzQwYTNhNTZjMGQ2ZjVhYzVkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTMwMjQ4ZDAzMmU0NmYxOTg2NjZjYjY0ZDQyM2JmYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGUzMDI0OGQwMzJlNDZmMTk4NjY2Y2I2NGQ0MjNiZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhlbHBpbmcgSHVydGluZyBQZW9wbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxNjZmZDJlNTQ5YzRjNDBhM2E1NmMwZDZmNWFjNWRlLnNldENvbnRlbnQoaHRtbF9kZTMwMjQ4ZDAzMmU0NmYxOTg2NjZjYjY0ZDQyM2JmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84OTI4NjRjOGZlMDI0ZDRiOWU3Y2ViYjBlNmMzOGY4OC5iaW5kUG9wdXAocG9wdXBfOTE2NmZkMmU1NDljNGM0MGEzYTU2YzBkNmY1YWM1ZGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0NmIxYTA1NTYwZTQwNzhhMTQ0NDVhYTA2NmIwZWM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTI2Njg2MjIsIC03Ny43NDI0NjY5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZDU5NzI2ZTNiYWU0NmNjYTgwMDYzMTk5YTUxMjI3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZjBjMjMxYmM3OGM0MjdkOTYxODJmNWVlM2EwNDk1ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMGYwYzIzMWJjNzhjNDI3ZDk2MTgyZjVlZTNhMDQ5NWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhdHRsZWZpZWxkIEJpYmxlIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQ1OTcyNmUzYmFlNDZjY2E4MDA2MzE5OWE1MTIyN2Quc2V0Q29udGVudChodG1sXzBmMGMyMzFiYzc4YzQyN2Q5NjE4MmY1ZWUzYTA0OTVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0NmIxYTA1NTYwZTQwNzhhMTQ0NDVhYTA2NmIwZWM3LmJpbmRQb3B1cChwb3B1cF84ZDU5NzI2ZTNiYWU0NmNjYTgwMDYzMTk5YTUxMjI3ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGM0ZjM0NzBhZjQzNDcxM2FhOWQ2N2M1N2ZmYmQ0MmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNTYxNjMwOTk5OTk5OTYsIC03Ni41Nzg1MDg2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTkyMDE1MDk5NGE0YzZmOWUxNGNjMzE4NDE2ZGJjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NGVhY2QyMmZhNWM0ZDA5OWYxMzkxOGZhZTM2OTQ1YyA9ICQoYDxkaXYgaWQ9Imh0bWxfODRlYWNkMjJmYTVjNGQwOTlmMTM5MThmYWUzNjk0NWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk10LiBaaW9uIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YTkyMDE1MDk5NGE0YzZmOWUxNGNjMzE4NDE2ZGJjMi5zZXRDb250ZW50KGh0bWxfODRlYWNkMjJmYTVjNGQwOTlmMTM5MThmYWUzNjk0NWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGM0ZjM0NzBhZjQzNDcxM2FhOWQ2N2M1N2ZmYmQ0MmUuYmluZFBvcHVwKHBvcHVwXzdhOTIwMTUwOTk0YTRjNmY5ZTE0Y2MzMTg0MTZkYmMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Nzk2YzZhNTJmYjA0MjAxYmE5NThiNzc4MjM1YjZmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI3NDQ0MTk5LCAtNzYuNDg0NjY3MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGE0NDhiNGUwM2FjNGY5NGI2ZmM0OGI1YmI1OGM1MzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmE5ZjIxNGNkNGRlNGQ4ZGI3MWZiMjU3ZmEwNTQzY2EgPSAkKGA8ZGl2IGlkPSJodG1sX2ZhOWYyMTRjZDRkZTRkOGRiNzFmYjI1N2ZhMDU0M2NhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXR0bGUgTW9udW1lbnQgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYTQ0OGI0ZTAzYWM0Zjk0YjZmYzQ4YjViYjU4YzUzNC5zZXRDb250ZW50KGh0bWxfZmE5ZjIxNGNkNGRlNGQ4ZGI3MWZiMjU3ZmEwNTQzY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTc5NmM2YTUyZmIwNDIwMWJhOTU4Yjc3ODIzNWI2ZmMuYmluZFBvcHVwKHBvcHVwXzBhNDQ4YjRlMDNhYzRmOTRiNmZjNDhiNWJiNThjNTM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MTZiOWIzNzVhYWI0NTI5OWE0NDA2ZTcyNWEzZTM5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjEzODA4MTI1LCAtNzYuNTcyOTI3Nzk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTJkNTgyMmZiNmFmNDlmYTg2NWRiOTg1YjBjMTc1OWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTViODIxYTg3MWMwNDk2ZmIxZWZmOTcxODkyMTgzMDUgPSAkKGA8ZGl2IGlkPSJodG1sXzk1YjgyMWE4NzFjMDQ5NmZiMWVmZjk3MTg5MjE4MzA1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmVldG93biBCb3lzICYgR2lybHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyZDU4MjJmYjZhZjQ5ZmE4NjVkYjk4NWIwYzE3NTlkLnNldENvbnRlbnQoaHRtbF85NWI4MjFhODcxYzA0OTZmYjFlZmY5NzE4OTIxODMwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MTZiOWIzNzVhYWI0NTI5OWE0NDA2ZTcyNWEzZTM5OC5iaW5kUG9wdXAocG9wdXBfNTJkNTgyMmZiNmFmNDlmYTg2NWRiOTg1YjBjMTc1OWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0Mzc0M2NlMDAxNTRjZjk5NDk3YTc2MjQ4MjlhYjM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzcwNzMyNTQsIC03Ni41ODI3MjU1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDg0ZDBhMGFhNjM0N2E3OWUwMTgzMzRiZDc5MmI3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYmM3NTg1MDkyOWQ0ZjE1OGExZWMzYWU3MmYwOWFlMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMmJjNzU4NTA5MjlkNGYxNThhMWVjM2FlNzJmMDlhZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktpcmt3b29kIEhvdXNlIEFwYXJ0bWVudHM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkODRkMGEwYWE2MzQ3YTc5ZTAxODMzNGJkNzkyYjczLnNldENvbnRlbnQoaHRtbF8yYmM3NTg1MDkyOWQ0ZjE1OGExZWMzYWU3MmYwOWFlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NDM3NDNjZTAwMTU0Y2Y5OTQ5N2E3NjI0ODI5YWIzOS5iaW5kUG9wdXAocG9wdXBfZWQ4NGQwYTBhYTYzNDdhNzllMDE4MzM0YmQ3OTJiNzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ0NGQyZjQ1OWVkNjRjNjFiY2M4ZTI5OTVkMWNlZTllID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzc3ODgwMTYsIC03Ni41Nzk3MjgzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YWZiYzIyNjYzMzU0YTFiYTNmMDU2YjhmNzIxZGVmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODQzMDFkOTkyYjg0Yjg4YTljZGVjNjNiZTBhYTRiZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzg0MzAxZDk5MmI4NGI4OGE5Y2RlYzYzYmUwYWE0YmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxvY2ggUmF2ZW4gVU1DPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YWZiYzIyNjYzMzU0YTFiYTNmMDU2YjhmNzIxZGVmZi5zZXRDb250ZW50KGh0bWxfYzg0MzAxZDk5MmI4NGI4OGE5Y2RlYzYzYmUwYWE0YmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDQ0ZDJmNDU5ZWQ2NGM2MWJjYzhlMjk5NWQxY2VlOWUuYmluZFBvcHVwKHBvcHVwXzRhZmJjMjI2NjMzNTRhMWJhM2YwNTZiOGY3MjFkZWZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NGZlMjU0YTZkMjc0ZTFhOTI3NDhiMGViODIzMTAzOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjQzNTc4NTg2LCAtNzYuNDAxMTE2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODQ2OGY3ZDI1NGI0OTMyYTY4YWViYTJhMGIzYWViOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOWNlMDI2MDZlMTk0MWFkYjUyNDYyYjE3Y2Y4Mjg4NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzljZTAyNjA2ZTE5NDFhZGI1MjQ2MmIxN2NmODI4ODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhlbHBpbmcgSGFuZHMgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4NDY4ZjdkMjU0YjQ5MzJhNjhhZWJhMmEwYjNhZWI5LnNldENvbnRlbnQoaHRtbF8zOWNlMDI2MDZlMTk0MWFkYjUyNDYyYjE3Y2Y4Mjg4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NGZlMjU0YTZkMjc0ZTFhOTI3NDhiMGViODIzMTAzOC5iaW5kUG9wdXAocG9wdXBfOTg0NjhmN2QyNTRiNDkzMmE2OGFlYmEyYTBiM2FlYjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzZGY1ODMyMTAxOTQ3YzFiYWMwMTU5YmY4NTIxNjVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzkzMjg3ODMsIC03NS4zMDA2Njc5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNTMwODM5ZWI5YzU0NmViOGE5YTgzMmFkMGFjNzYyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNGRmYjU0MTg3NTg0YjFkYWViNWYwZjliMTFjOWIxOCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjRkZmI1NDE4NzU4NGIxZGFlYjVmMGY5YjExYzliMTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJsZXNzaW5nIEhvdXNlIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1MzA4MzllYjljNTQ2ZWI4YTlhODMyYWQwYWM3NjJlLnNldENvbnRlbnQoaHRtbF9iNGRmYjU0MTg3NTg0YjFkYWViNWYwZjliMTFjOWIxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81M2RmNTgzMjEwMTk0N2MxYmFjMDE1OWJmODUyMTY1ZC5iaW5kUG9wdXAocG9wdXBfMDUzMDgzOWViOWM1NDZlYjhhOWE4MzJhZDBhYzc2MmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwMTI4Nzc4NDIxZDRhNDRhODQxODBjODE0NDFiZDI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDI0ODc5ODQsIC03Ny40MTA4MTI4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTc1ZWU2MTNkMDg0N2ExOTRlZGE2YjU1YzQ4MGI4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMWU2ZWZmNmRiODQ0NTVjYjBhM2FiN2E4MTg3NmVjOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDFlNmVmZjZkYjg0NDU1Y2IwYTNhYjdhODE4NzZlYzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdG9jdGluIFZpZXc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxNzVlZTYxM2QwODQ3YTE5NGVkYTZiNTVjNDgwYjhiLnNldENvbnRlbnQoaHRtbF9kMWU2ZWZmNmRiODQ0NTVjYjBhM2FiN2E4MTg3NmVjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMDEyODc3ODQyMWQ0YTQ0YTg0MTgwYzgxNDQxYmQyOC5iaW5kUG9wdXAocG9wdXBfZDE3NWVlNjEzZDA4NDdhMTk0ZWRhNmI1NWM0ODBiOGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjMmVmNDIxNTJlMTQwODI5Mzk5ZjhmNzY3MDRkNmY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMDY2MjM4NDcsIC03NS41NjU1MTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzZGQ5Mjg1MDFiYjRmMTdiMzljMTExYzczMzQ0OWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmOTI2ZGNiZDI4MTQ0ZjU5OGM5NzBhNWU3Nzg2YzdiID0gJChgPGRpdiBpZD0iaHRtbF82ZjkyNmRjYmQyODE0NGY1OThjOTcwYTVlNzc4NmM3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UG9jb21va2UgTWlkZGxlIFNjaG9vbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDNkZDkyODUwMWJiNGYxN2IzOWMxMTFjNzMzNDQ5ZjEuc2V0Q29udGVudChodG1sXzZmOTI2ZGNiZDI4MTQ0ZjU5OGM5NzBhNWU3Nzg2YzdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjMmVmNDIxNTJlMTQwODI5Mzk5ZjhmNzY3MDRkNmY0LmJpbmRQb3B1cChwb3B1cF9kM2RkOTI4NTAxYmI0ZjE3YjM5YzExMWM3MzM0NDlmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGJiYzQ4MTgyNDE2NDBkYzllYjI3OTM3NjZmNmNhNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNDgyODQ1OCwgLTc2Ljc2NzE1ODUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlYzM0OWYzNTYwYTRkN2FhYjViYzMzYzM2NGRkM2FmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxNjYzYzEyM2I3NTQ4ODE5MjkxODRjMTAwOGI1ZDAxID0gJChgPGRpdiBpZD0iaHRtbF83MTY2M2MxMjNiNzU0ODgxOTI5MTg0YzEwMDhiNWQwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGliZXJ0eSBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWVjMzQ5ZjM1NjBhNGQ3YWFiNWJjMzNjMzY0ZGQzYWYuc2V0Q29udGVudChodG1sXzcxNjYzYzEyM2I3NTQ4ODE5MjkxODRjMTAwOGI1ZDAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBiYmM0ODE4MjQxNjQwZGM5ZWIyNzkzNzY2ZjZjYTRiLmJpbmRQb3B1cChwb3B1cF81ZWMzNDlmMzU2MGE0ZDdhYWI1YmMzM2MzNjRkZDNhZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWVjYmUxYjZkYmJiNDA1ZWJiMDZjYzNkNWY2Y2Q0OGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zMzM1MTY1OCwgLTc2Ljc0NzQ5MDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2NmE3MTBiMDkwOTQ3MjI5MGVhNmUzYjUwNzA3MjkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJlMjVjMTE2MTU1MTQzZjRhODM0YWQyNDliOTY5NmMwID0gJChgPGRpdiBpZD0iaHRtbF8yZTI1YzExNjE1NTE0M2Y0YTgzNGFkMjQ5Yjk2OTZjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGliZXJ0eSBDb21tdW5pdHkgRGV2ZWxvcG1lbnQgQ29ycDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzY2YTcxMGIwOTA5NDcyMjkwZWE2ZTNiNTA3MDcyOTIuc2V0Q29udGVudChodG1sXzJlMjVjMTE2MTU1MTQzZjRhODM0YWQyNDliOTY5NmMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlY2JlMWI2ZGJiYjQwNWViYjA2Y2MzZDVmNmNkNDhjLmJpbmRQb3B1cChwb3B1cF83NjZhNzEwYjA5MDk0NzIyOTBlYTZlM2I1MDcwNzI5MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjAwZTZjOTlmZGU2NDU1Y2IyOWFkMmNhMWU4ZDJjNDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41NjMzMzY2NSwgLTc2LjA4NjcyNzQwMDAwMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlYTVjNDllMzk3NTQ0M2M4YWIzY2NiYmVmNWEzOGFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhODIzZjBlZTE5NzQ3YTM5MjRhMDc4NTM4M2U1MTE5ID0gJChgPGRpdiBpZD0iaHRtbF9lYTgyM2YwZWUxOTc0N2EzOTI0YTA3ODUzODNlNTExOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVmdWdlIFRlbXBsZS1DYXJlIGFuZCBTaGFyZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmVhNWM0OWUzOTc1NDQzYzhhYjNjY2JiZWY1YTM4YWUuc2V0Q29udGVudChodG1sX2VhODIzZjBlZTE5NzQ3YTM5MjRhMDc4NTM4M2U1MTE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YwMGU2Yzk5ZmRlNjQ1NWNiMjlhZDJjYTFlOGQyYzQzLmJpbmRQb3B1cChwb3B1cF8yZWE1YzQ5ZTM5NzU0NDNjOGFiM2NjYmJlZjVhMzhhZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQ1Mzc1Y2Q3ZDk2NDQ4Zjg4N2MyYmNmNTY3Mzg1OTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yNTY0NTc3MywgLTc2LjczMDA3Mjg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0ZjhmZGMxMzEzZTQwNDk5M2FlMzUwZjAzNzVlNDE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyN2E1MzhjZGE5MjQzYWM4NzMzYWZlZmM4YzYxNjYyID0gJChgPGRpdiBpZD0iaHRtbF9kMjdhNTM4Y2RhOTI0M2FjODczM2FmZWZjOGM2MTY2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29tbXVuaXR5IENvbGxlZ2Ugb2YgQmFsdGltb3JlIENvdW50eSBDYXRvbnN2aWxsZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRmOGZkYzEzMTNlNDA0OTkzYWUzNTBmMDM3NWU0MTQuc2V0Q29udGVudChodG1sX2QyN2E1MzhjZGE5MjQzYWM4NzMzYWZlZmM4YzYxNjYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0NTM3NWNkN2Q5NjQ0OGY4ODdjMmJjZjU2NzM4NTkwLmJpbmRQb3B1cChwb3B1cF8xNGY4ZmRjMTMxM2U0MDQ5OTNhZTM1MGYwMzc1ZTQxNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGYyYzk4OGRjMjU5NGVhNDhhOWY5NmQ2OTNjMDdiMTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42Mjk4ODU3MSwgLTc3LjczMjI2ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjE2YTAwOGMyMmU1NDRhNzliN2YyM2NlMzQzYTE0ZDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTg2NWI2MDA3NGI0NDg2NThhZGFmNTZkZTk3MjY5ODkgPSAkKGA8ZGl2IGlkPSJodG1sXzE4NjViNjAwNzRiNDQ4NjU4YWRhZjU2ZGU5NzI2OTg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbW1hbnVlbCBVbml0ZWQgTWV0aG9kaXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjE2YTAwOGMyMmU1NDRhNzliN2YyM2NlMzQzYTE0ZDcuc2V0Q29udGVudChodG1sXzE4NjViNjAwNzRiNDQ4NjU4YWRhZjU2ZGU5NzI2OTg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRmMmM5ODhkYzI1OTRlYTQ4YTlmOTZkNjkzYzA3YjExLmJpbmRQb3B1cChwb3B1cF8yMTZhMDA4YzIyZTU0NGE3OWI3ZjIzY2UzNDNhMTRkNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Q1MWNjZmUxYzBiNDc5OGFiNDY3ODhjNjY1YzQ5ODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zOTA1ODg5LCAtNzYuNTc5MDU5NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Q0YTY5MzE3OGRlNDVjMTg3OTY5ZGQ3NmQ3MWRkODAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWRlNGNjMTgzMWU3NGI4ZTllYzI5MDQxYmM5ZTY2M2UgPSAkKGA8ZGl2IGlkPSJodG1sXzFkZTRjYzE4MzFlNzRiOGU5ZWMyOTA0MWJjOWU2NjNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Mb2NoIFJhdmVuIFRlY2huaWNhbCBBY2FkZW15PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZDRhNjkzMTc4ZGU0NWMxODc5NjlkZDc2ZDcxZGQ4MC5zZXRDb250ZW50KGh0bWxfMWRlNGNjMTgzMWU3NGI4ZTllYzI5MDQxYmM5ZTY2M2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2Q1MWNjZmUxYzBiNDc5OGFiNDY3ODhjNjY1YzQ5ODkuYmluZFBvcHVwKHBvcHVwXzNkNGE2OTMxNzhkZTQ1YzE4Nzk2OWRkNzZkNzFkZDgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82N2IxNDhmMjkyNzM0MGVkYWIyYzMxMTI3NzY5ODAzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjQ0NzUwNDM2LCAtNzUuNTc1OTI3OTAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTEyM2U4ODE0M2U5NDUyNmI4OTY1Y2Q0ZjJhYjkyZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjYzM2FjY2EwOWVjNGZiNTk3NDVjOWM4ZWQ3MmI4ZDggPSAkKGA8ZGl2IGlkPSJodG1sXzY2MzNhY2NhMDllYzRmYjU5NzQ1YzljOGVkNzJiOGQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZWxtYXIgRWxlbWVudGFyeSBTY2hvb2w8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExMjNlODgxNDNlOTQ1MjZiODk2NWNkNGYyYWI5MmRiLnNldENvbnRlbnQoaHRtbF82NjMzYWNjYTA5ZWM0ZmI1OTc0NWM5YzhlZDcyYjhkOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82N2IxNDhmMjkyNzM0MGVkYWIyYzMxMTI3NzY5ODAzNi5iaW5kUG9wdXAocG9wdXBfMTEyM2U4ODE0M2U5NDUyNmI4OTY1Y2Q0ZjJhYjkyZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRlNzA1MDU1ZGI1MzQ2ZWI4ZmIwM2IyYTI3Nzc4NDkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMzc0NDAwMjUsIC03NS42MDkzNjE3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZThkMTA4MjYzZjI0OTZlOTZkNzgyYjcxZjE4ZGUwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzhkMzJlZmJkY2E0NTA3OWVlYjlmNDA3NWMyN2Q4NCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzc4ZDMyZWZiZGNhNDUwNzllZWI5ZjQwNzVjMjdkODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpvc2VwaCBIb3VzZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGU4ZDEwODI2M2YyNDk2ZTk2ZDc4MmI3MWYxOGRlMDkuc2V0Q29udGVudChodG1sX2M3OGQzMmVmYmRjYTQ1MDc5ZWViOWY0MDc1YzI3ZDg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRlNzA1MDU1ZGI1MzQ2ZWI4ZmIwM2IyYTI3Nzc4NDkxLmJpbmRQb3B1cChwb3B1cF84ZThkMTA4MjYzZjI0OTZlOTZkNzgyYjcxZjE4ZGUwOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTcxMDJjYmQ4YmFhNDJiNTgyZjIwZGRiNjExMDlhY2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4wNjk3ODU2MiwgLTc1LjU2OTY3NjE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmNDBmYzZjYzEzYzQxYjFiMzZlNDBkZWE0NDg2OGFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4Mjg5NTU1Yzk1NTRjNzA4Yjc2ZjM4ZGFkYWU3ZGEyID0gJChgPGRpdiBpZD0iaHRtbF85ODI4OTU1NWM5NTU0YzcwOGI3NmYzOGRhZGFlN2RhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2FtYXJpdGFuIE1pbmlzdHJpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmNDBmYzZjYzEzYzQxYjFiMzZlNDBkZWE0NDg2OGFkLnNldENvbnRlbnQoaHRtbF85ODI4OTU1NWM5NTU0YzcwOGI3NmYzOGRhZGFlN2RhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNzEwMmNiZDhiYWE0MmI1ODJmMjBkZGI2MTEwOWFjYy5iaW5kUG9wdXAocG9wdXBfN2Y0MGZjNmNjMTNjNDFiMWIzNmU0MGRlYTQ0ODY4YWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxZjkzYTIyMjkzODQzODI5ZmExZTM4NmQ1MzU2MGIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjYxODQ5MTksIC03OC43NTUxODczNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MzFiZDRlMDI3ZWI0ODc5YmZlNDg0Y2E5OGYxMWNmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NzBkMTIzNWIzYmY0Y2UzYWU4MmFjZWZlZTkzMGRkYiA9ICQoYDxkaXYgaWQ9Imh0bWxfODcwZDEyMzViM2JmNGNlM2FlODJhY2VmZWU5MzBkZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3Rlcm4gTWFyeWxhbmQgRm9vZCBCYW5rPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MzFiZDRlMDI3ZWI0ODc5YmZlNDg0Y2E5OGYxMWNmZi5zZXRDb250ZW50KGh0bWxfODcwZDEyMzViM2JmNGNlM2FlODJhY2VmZWU5MzBkZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzFmOTNhMjIyOTM4NDM4MjlmYTFlMzg2ZDUzNTYwYjAuYmluZFBvcHVwKHBvcHVwXzYzMWJkNGUwMjdlYjQ4NzliZmU0ODRjYTk4ZjExY2ZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNjY1MzJjMjc3ZDA0MWQ1YTliM2E2ZjRkZGY5OWQyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjMyMDg5NjY0LCAtNzYuNzYzMzUwMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDcyYWE4YTI0YjEzNGY0OThjNWJiYmY5NTAxYzkzMDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTc1NzhhOGM3M2Y1NGRjZGJlNTFkZDFlNjRhNzViNjIgPSAkKGA8ZGl2IGlkPSJodG1sXzk3NTc4YThjNzNmNTRkY2RiZTUxZGQxZTY0YTc1YjYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eb2d3b29kIEVsZW1lbnRhcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3MmFhOGEyNGIxMzRmNDk4YzViYmJmOTUwMWM5MzAzLnNldENvbnRlbnQoaHRtbF85NzU3OGE4YzczZjU0ZGNkYmU1MWRkMWU2NGE3NWI2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNjY1MzJjMjc3ZDA0MWQ1YTliM2E2ZjRkZGY5OWQyZi5iaW5kUG9wdXAocG9wdXBfMDcyYWE4YTI0YjEzNGY0OThjNWJiYmY5NTAxYzkzMDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwMjBkZDQ1ZmIyNDQyODI4ZWFhNzJhODg5NjQ2NzBhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjU3NzMyNjcsIC03OC45MzUxNzA1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOGRhNmNjMDdiNTk0Yzc4YTBhOTVmYTYyNmY0OTE3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YzlkMGY1YzdlNDQ0OTU2YWNlMDMxM2JmZjZmOGFjNSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2M5ZDBmNWM3ZTQ0NDk1NmFjZTAzMTNiZmY2ZjhhYzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyb3N0YnVyZyBTZXZlbnRoIERheSBBZHZlbnRpc3Q8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4ZGE2Y2MwN2I1OTRjNzhhMGE5NWZhNjI2ZjQ5MTdkLnNldENvbnRlbnQoaHRtbF83YzlkMGY1YzdlNDQ0OTU2YWNlMDMxM2JmZjZmOGFjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMDIwZGQ0NWZiMjQ0MjgyOGVhYTcyYTg4OTY0NjcwYS5iaW5kUG9wdXAocG9wdXBfMjhkYTZjYzA3YjU5NGM3OGEwYTk1ZmE2MjZmNDkxN2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3YzVlNjJkMGI5MzQ5NTliOGNmMDgyNzE5NWZiOWQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzQ1MDU3NjgsIC03Ni43NzI1MTkzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODY0N2E2NmM4NjM0NmQ0OTU2YWFhOGE2OTQ3MzE0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNmVmNzU2ODA2M2Y0YTYyOGZiMjNlMjhjOGFmOTBmYSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzZlZjc1NjgwNjNmNGE2MjhmYjIzZTI4YzhhZjkwZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkplc3VzIEhvdXNlIEJhbHRpbW9yZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjg2NDdhNjZjODYzNDZkNDk1NmFhYThhNjk0NzMxNGUuc2V0Q29udGVudChodG1sX2M2ZWY3NTY4MDYzZjRhNjI4ZmIyM2UyOGM4YWY5MGZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ3YzVlNjJkMGI5MzQ5NTliOGNmMDgyNzE5NWZiOWQ5LmJpbmRQb3B1cChwb3B1cF9iODY0N2E2NmM4NjM0NmQ0OTU2YWFhOGE2OTQ3MzE0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGZlZTE3NDdkNTU2NGNmMDhlZjM3NmFlMWJmYTM4NWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNTcxNTY5MSwgLTc2Ljc2Mjk4Mzg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2MjYxZmE5ZGIyZjRhMjI5NGJmOWIwZjVjNTA4NjQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyMjQwZjYyNjRjYzRkZjM4ZmUwYzE1OTY4MTNiM2RlID0gJChgPGRpdiBpZD0iaHRtbF82MjI0MGY2MjY0Y2M0ZGYzOGZlMGMxNTk2ODEzYjNkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2NvdHRzIEJyYW5jaCBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjI2MWZhOWRiMmY0YTIyOTRiZjliMGY1YzUwODY0Mi5zZXRDb250ZW50KGh0bWxfNjIyNDBmNjI2NGNjNGRmMzhmZTBjMTU5NjgxM2IzZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGZlZTE3NDdkNTU2NGNmMDhlZjM3NmFlMWJmYTM4NWQuYmluZFBvcHVwKHBvcHVwXzM2MjYxZmE5ZGIyZjRhMjI5NGJmOWIwZjVjNTA4NjQyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTJlNzRiZTNlZTA0YTA0OWIyOWNjNTZjYTU2MjM3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA5ODg2MjA0LCAtNzYuNjg5MDgzMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTBjNWNhOTQyYmZmNDZmMDg2Mjk2MTAyYmE5YzAwMTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTI4ZjFjZDBiMTMwNDQ4Nzk1ODc3YzUzY2ZmM2U3MmYgPSAkKGA8ZGl2IGlkPSJodG1sX2UyOGYxY2QwYjEzMDQ0ODc5NTg3N2M1M2NmZjNlNzJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZlciBvZiBMaWZlIFdvcnNoaXAgQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGM1Y2E5NDJiZmY0NmYwODYyOTYxMDJiYTljMDAxNy5zZXRDb250ZW50KGh0bWxfZTI4ZjFjZDBiMTMwNDQ4Nzk1ODc3YzUzY2ZmM2U3MmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2UyZTc0YmUzZWUwNGEwNDliMjljYzU2Y2E1NjIzNzcuYmluZFBvcHVwKHBvcHVwXzUwYzVjYTk0MmJmZjQ2ZjA4NjI5NjEwMmJhOWMwMDE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZmU3MWRiMmFhNzM0Mjk0OTk5MzhjY2Q2MmEyYjVkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjExNTM1MzA5LCAtNzYuNTg4MjM3MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDljYzk0ZTM3YzhmNDBkNzg1OTBkNzUzYWQwZWQ2MDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjlmYmNhNDNmZWZlNDdkNWEzZDk2Nzc1NzQ1MzU5MWEgPSAkKGA8ZGl2IGlkPSJodG1sX2I5ZmJjYTQzZmVmZTQ3ZDVhM2Q5Njc3NTc0NTM1OTFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UYWJpdGhhJ3MgQmFja3BhY2s8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5Y2M5NGUzN2M4ZjQwZDc4NTkwZDc1M2FkMGVkNjAwLnNldENvbnRlbnQoaHRtbF9iOWZiY2E0M2ZlZmU0N2Q1YTNkOTY3NzU3NDUzNTkxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZmU3MWRiMmFhNzM0Mjk0OTk5MzhjY2Q2MmEyYjVkYy5iaW5kUG9wdXAocG9wdXBfMDljYzk0ZTM3YzhmNDBkNzg1OTBkNzUzYWQwZWQ2MDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmYjUzMDMwN2Y0ZDQwMDI4YjVhMGQyMWJhMjVmMzA4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDc0Nzg1NzgsIC03Ny4zNTg3MzAwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzg4MjUyMWJiNGU0OWNhOTVjNzMxNTM1OTU3NDZmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMTQ5ZDljZjdhMzE0ODA3OTU0MDYxYmE0MDRhMTljNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTE0OWQ5Y2Y3YTMxNDgwNzk1NDA2MWJhNDA0YTE5YzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhbGtlcnN2aWxsZSBFbGVtZW50YXJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMzg4MjUyMWJiNGU0OWNhOTVjNzMxNTM1OTU3NDZmNy5zZXRDb250ZW50KGh0bWxfZTE0OWQ5Y2Y3YTMxNDgwNzk1NDA2MWJhNDA0YTE5YzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmZiNTMwMzA3ZjRkNDAwMjhiNWEwZDIxYmEyNWYzMDguYmluZFBvcHVwKHBvcHVwXzIzODgyNTIxYmI0ZTQ5Y2E5NWM3MzE1MzU5NTc0NmY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDU1NzhmZjYwNzY0ZjM3OTQzYmJhMzg3OWVmNGUxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM1NzM4MjIzLCAtNzYuNzY4MjExOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTA1ZWUyMGE2MDExNDZmZThhNzkyNzEyM2M4NmNjMGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzkzZjAxMjRlMmI1NDQwOThjYmQwYjNiYjAyZTQ4M2YgPSAkKGA8ZGl2IGlkPSJodG1sXzM5M2YwMTI0ZTJiNTQ0MDk4Y2JkMGIzYmIwMmU0ODNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVhdGVyIEJldGhsZWhlbSBUZW1wbGUgQ2h1cmNoLyBGb3JtYWxseSBMT1VEPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMDVlZTIwYTYwMTE0NmZlOGE3OTI3MTIzYzg2Y2MwZi5zZXRDb250ZW50KGh0bWxfMzkzZjAxMjRlMmI1NDQwOThjYmQwYjNiYjAyZTQ4M2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjA1NTc4ZmY2MDc2NGYzNzk0M2JiYTM4NzllZjRlMTcuYmluZFBvcHVwKHBvcHVwX2EwNWVlMjBhNjAxMTQ2ZmU4YTc5MjcxMjNjODZjYzBmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZmM4MTM4OTQ0MjU0ODczODUwYmE5ODQzNDVmZTc5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI0NjUzMzUwMDAwMDAwNSwgLTc2LjYyMjY0NDY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlZDY2MzExNDBhYTQ3ODE4Y2RjMmRmYmNiOTI3OTRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0NTliZjQ4ZGY2MDQyY2ZiNmYzYTZmYjY4MWZmYzE1ID0gJChgPGRpdiBpZD0iaHRtbF80NDU5YmY0OGRmNjA0MmNmYjZmM2E2ZmI2ODFmZmMxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hlcnJ5IEhpbGwgRWxlbWVudGFyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWVkNjYzMTE0MGFhNDc4MThjZGMyZGZiY2I5Mjc5NGIuc2V0Q29udGVudChodG1sXzQ0NTliZjQ4ZGY2MDQyY2ZiNmYzYTZmYjY4MWZmYzE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVmYzgxMzg5NDQyNTQ4NzM4NTBiYTk4NDM0NWZlNzk4LmJpbmRQb3B1cChwb3B1cF9lZWQ2NjMxMTQwYWE0NzgxOGNkYzJkZmJjYjkyNzk0YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjMwZmNlMGM5YjFmNDFjOWE4OGRhODRiNGY3NTZlNGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yOTU0MzEzNSwgLTc2LjU5MjA2NjY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5YWFkMWJmNDExMjRkOGI5NmE4NTRhY2I5OTE5YTdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhOGJhZGFlN2VkYzRhZjE5MTRjMzMwZGMxYmQ1ZjViID0gJChgPGRpdiBpZD0iaHRtbF8yYThiYWRhZTdlZGM0YWYxOTE0YzMzMGRjMWJkNWY1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Sm9obnMgSG9wa2lucyBIb3NwaXRhbDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzlhYWQxYmY0MTEyNGQ4Yjk2YTg1NGFjYjk5MTlhN2Muc2V0Q29udGVudChodG1sXzJhOGJhZGFlN2VkYzRhZjE5MTRjMzMwZGMxYmQ1ZjViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IzMGZjZTBjOWIxZjQxYzlhODhkYTg0YjRmNzU2ZTRhLmJpbmRQb3B1cChwb3B1cF83OWFhZDFiZjQxMTI0ZDhiOTZhODU0YWNiOTkxOWE3YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWU5OWNiZjU1OGQwNDVjY2IyY2JkZTE4MWI5MGNhYzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNjYwNjk0OCwgLTc2Ljc3NzUwNDc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljNDU2OTNhODFiNDQxMjI4ODZiOWMxNzk0ZmM4ODExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2MDFmM2E4OTg1MjQ0Y2ViOWE3ZDI5ZGFkMGQ5ZTc1ID0gJChgPGRpdiBpZD0iaHRtbF80NjAxZjNhODk4NTI0NGNlYjlhN2QyOWRhZDBkOWU3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VW5pb24gQmV0aGVsIEEuTS5FLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM0NTY5M2E4MWI0NDEyMjg4NmI5YzE3OTRmYzg4MTEuc2V0Q29udGVudChodG1sXzQ2MDFmM2E4OTg1MjQ0Y2ViOWE3ZDI5ZGFkMGQ5ZTc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFlOTljYmY1NThkMDQ1Y2NiMmNiZGUxODFiOTBjYWM3LmJpbmRQb3B1cChwb3B1cF85YzQ1NjkzYTgxYjQ0MTIyODg2YjljMTc5NGZjODgxMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmZhNzcwMjg1Njk3NDA2MTg0ZGQ2OTJhMWFhZWU2NjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4xNDYzMjk1NSwgLTc2LjUyNDU0MjY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzODY5Y2RkOWM4YzRkMzI5NDQ2ZjUxMzI0MGFjNWI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3ZDZhMWQ1YjU1NDRkNGE4MjE5MGJhYTIzMjVlZDY0ID0gJChgPGRpdiBpZD0iaHRtbF8yN2Q2YTFkNWI1NTQ0ZDRhODIxOTBiYWEyMzI1ZWQ2NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29tbXVuaXR5IFVuaXRlZCBNZXRob2Rpc3QgQ2h1cmNoIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTM4NjljZGQ5YzhjNGQzMjk0NDZmNTEzMjQwYWM1Yjkuc2V0Q29udGVudChodG1sXzI3ZDZhMWQ1YjU1NDRkNGE4MjE5MGJhYTIzMjVlZDY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmYTc3MDI4NTY5NzQwNjE4NGRkNjkyYTFhYWVlNjY1LmJpbmRQb3B1cChwb3B1cF9hMzg2OWNkZDljOGM0ZDMyOTQ0NmY1MTMyNDBhYzViOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWU0ZDQxODRmZGIxNDQ2ZTg2NGEzZjAzNWYxNDJmM2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NDU2MTU3MiwgLTc1LjgwMjc5NjYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxMTk3ZThjNTU4ZjQyOTY4YWY1Zjg3Y2RiMzAwYzdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkMjFkNDg1ZDRhMTQwNjZhOWFhNGYyMzM4MGQ0MjMzID0gJChgPGRpdiBpZD0iaHRtbF80ZDIxZDQ4NWQ0YTE0MDY2YTlhYTRmMjMzODBkNDIzMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGVudG9uIENocmlzdGlhbiBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxMTk3ZThjNTU4ZjQyOTY4YWY1Zjg3Y2RiMzAwYzdjLnNldENvbnRlbnQoaHRtbF80ZDIxZDQ4NWQ0YTE0MDY2YTlhYTRmMjMzODBkNDIzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZTRkNDE4NGZkYjE0NDZlODY0YTNmMDM1ZjE0MmYzYy5iaW5kUG9wdXAocG9wdXBfNTExOTdlOGM1NThmNDI5NjhhZjVmODdjZGIzMDBjN2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0YmExZGQwMGVmMDQxMThhYTFlOGVhMDE1MzhlY2NkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNDMwMjQ1ODk5OTk5OTk2LCAtNzUuNjcxODA0MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzJmNzFiOWJjZTllNGJkNjg4ZDFmYzNlODIzNWI0MzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODRlMmNhMzEzZWM4NDk1NGJiODg1MDE0MTBjMTMzMDEgPSAkKGA8ZGl2IGlkPSJodG1sXzg0ZTJjYTMxM2VjODQ5NTRiYjg4NTAxNDEwYzEzMzAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRm9vZCBQYW50cnkgQCBTdC4gUGF1bCdzIEVwaXNjb3BhbCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyZjcxYjliY2U5ZTRiZDY4OGQxZmMzZTgyMzViNDMxLnNldENvbnRlbnQoaHRtbF84NGUyY2EzMTNlYzg0OTU0YmI4ODUwMTQxMGMxMzMwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNGJhMWRkMDBlZjA0MTE4YWExZThlYTAxNTM4ZWNjZC5iaW5kUG9wdXAocG9wdXBfMzJmNzFiOWJjZTllNGJkNjg4ZDFmYzNlODIzNWI0MzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjNzI2NWZkZTA0NTQ0M2ZiNWYwN2QxYTNkZTQ0MTQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzgzOTExOTEsIC03Ni41MzQwNTcxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMDVlMGExMWI5N2I0MTQzOTJlMGRlYzRlMjVhNDY2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGQ4OTU4MDM3ZDc0NDNiYTk0YmMyMDI4OWRlMTlmMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjhkODk1ODAzN2Q3NDQzYmE5NGJjMjAyODlkZTE5ZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBVcnN1bGEgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMDVlMGExMWI5N2I0MTQzOTJlMGRlYzRlMjVhNDY2ZC5zZXRDb250ZW50KGh0bWxfNjhkODk1ODAzN2Q3NDQzYmE5NGJjMjAyODlkZTE5ZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGM3MjY1ZmRlMDQ1NDQzZmI1ZjA3ZDFhM2RlNDQxNDIuYmluZFBvcHVwKHBvcHVwXzEwNWUwYTExYjk3YjQxNDM5MmUwZGVjNGUyNWE0NjZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMjRkNWIxZjZhYWU0MTg3OGU5MjI1MTE2N2E5MzJkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU5ODU3NTQ5LCAtNzYuMDgwODUxOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q1MGFjZTFmMjIyNGY3OWI0MTE0MzllM2U4YTk5MjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmNjOGEzNTYzMDE2NDdhMWI5M2Y0MzU3MDg0NTVjNTQgPSAkKGA8ZGl2IGlkPSJodG1sX2ZjYzhhMzU2MzAxNjQ3YTFiOTNmNDM1NzA4NDU1YzU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db2tlc2J1cnkgVU1DPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZDUwYWNlMWYyMjI0Zjc5YjQxMTQzOWUzZThhOTkyMi5zZXRDb250ZW50KGh0bWxfZmNjOGEzNTYzMDE2NDdhMWI5M2Y0MzU3MDg0NTVjNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzI0ZDViMWY2YWFlNDE4NzhlOTIyNTExNjdhOTMyZDkuYmluZFBvcHVwKHBvcHVwXzdkNTBhY2UxZjIyMjRmNzliNDExNDM5ZTNlOGE5OTIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OTRkMDIxNzJhZmM0ZGQ0YjQ5NDhlM2M2M2JmN2Y5ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjI1MjE1MTU3LCAtNzYuNzI1NjY2OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTIyY2ZjY2M2YmIzNGM4OGE1Y2NiYjU5ZmZmN2U4OWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmU3MzM4NGI1ZDU3NDJhNGFmMWQyNWNjNWQ1NTM1NDEgPSAkKGA8ZGl2IGlkPSJodG1sXzZlNzMzODRiNWQ1NzQyYTRhZjFkMjVjYzVkNTUzNTQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXRvbnN2aWxsZSBDZW50ZXIgZm9yIEFsdGVybmF0aXZlIFN0dWRpZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EyMmNmY2NjNmJiMzRjODhhNWNjYmI1OWZmZjdlODlhLnNldENvbnRlbnQoaHRtbF82ZTczMzg0YjVkNTc0MmE0YWYxZDI1Y2M1ZDU1MzU0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OTRkMDIxNzJhZmM0ZGQ0YjQ5NDhlM2M2M2JmN2Y5ZS5iaW5kUG9wdXAocG9wdXBfYTIyY2ZjY2M2YmIzNGM4OGE1Y2NiYjU5ZmZmN2U4OWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1ZDAyMmIyMzhlYzQ2Nzg5NGRhZjZlMTBlNWRkNzlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODU2NDE5MSwgLTc1LjgxNDgyNzEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiNTU3NTY5ZDkxMzRhMzBhZTFlOTJiYzgxMzgzY2I0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhMDAzYTVlNDQ1OTQ0ZDg4NGM2NjYzOWQzYTA2NjFjID0gJChgPGRpdiBpZD0iaHRtbF9lYTAwM2E1ZTQ0NTk0NGQ4ODRjNjY2MzlkM2EwNjYxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGl2aW5nIFdhdGVycyBBc3NlbWJseTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGI1NTc1NjlkOTEzNGEzMGFlMWU5MmJjODEzODNjYjQuc2V0Q29udGVudChodG1sX2VhMDAzYTVlNDQ1OTQ0ZDg4NGM2NjYzOWQzYTA2NjFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ1ZDAyMmIyMzhlYzQ2Nzg5NGRhZjZlMTBlNWRkNzlmLmJpbmRQb3B1cChwb3B1cF80YjU1NzU2OWQ5MTM0YTMwYWUxZTkyYmM4MTM4M2NiNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2ExNTJmMThiMDNiNDEyYmEzNDU1MzkzYzM4YjEzODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNTI2MTQ2OSwgLTc2LjQ3NTAwODEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhMGQ0M2VjOTQ0MzQ3YTFiMzE1NTI3OThjZDY1OTY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3MzIzN2Y3ZjYzOTRjYTRiZTVmYzVmMTg2ZTQ1NmI3ID0gJChgPGRpdiBpZD0iaHRtbF84NzMyMzdmN2Y2Mzk0Y2E0YmU1ZmM1ZjE4NmU0NTZiNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFzdHNpZGUgRmFtaWx5IENlbnRlcjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWEwZDQzZWM5NDQzNDdhMWIzMTU1Mjc5OGNkNjU5Njkuc2V0Q29udGVudChodG1sXzg3MzIzN2Y3ZjYzOTRjYTRiZTVmYzVmMTg2ZTQ1NmI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdhMTUyZjE4YjAzYjQxMmJhMzQ1NTM5M2MzOGIxMzgwLmJpbmRQb3B1cChwb3B1cF9hYTBkNDNlYzk0NDM0N2ExYjMxNTUyNzk4Y2Q2NTk2OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmE4ZDFhZGFmYWQ3NGQ1YWI3NzQ1OWQ4NjVjYWU0ZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4yMzExOTY0NiwgLTc2LjgyNTA5MjMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5N2UwOTA4OTZkMzQzYWE5Y2E1NTY2MDYwNTU4YzU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxN2IyYzU5NzJiYTQwYjNiY2YzYWRhNmNjZjQ0YWRhID0gJChgPGRpdiBpZD0iaHRtbF80MTdiMmM1OTcyYmE0MGIzYmNmM2FkYTZjY2Y0NGFkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJpZGdld2F5IENvbW11bml0eSBDdXBib2FyZDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDk3ZTA5MDg5NmQzNDNhYTljYTU1NjYwNjA1NThjNTQuc2V0Q29udGVudChodG1sXzQxN2IyYzU5NzJiYTQwYjNiY2YzYWRhNmNjZjQ0YWRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZhOGQxYWRhZmFkNzRkNWFiNzc0NTlkODY1Y2FlNGViLmJpbmRQb3B1cChwb3B1cF9kOTdlMDkwODk2ZDM0M2FhOWNhNTU2NjA2MDU1OGM1NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQ3ZTcxNDIzMTEyNDBkYmE5ZmZjMjQ5MzNhYjIwYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41NjQ0NTQ4NiwgLTc3LjE3OTk2MzUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiNWQ4ZTUyMDY5YjRmNTNiN2ZmNjAyNWIxMzc1MzM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE5ZWQxODFlOTNhMDQyMWViY2U4NTM2ZWFjMDMwYWMxID0gJChgPGRpdiBpZD0iaHRtbF8xOWVkMTgxZTkzYTA0MjFlYmNlODUzNmVhYzAzMGFjMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIFBldGVyJ3MgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiNWQ4ZTUyMDY5YjRmNTNiN2ZmNjAyNWIxMzc1MzM2LnNldENvbnRlbnQoaHRtbF8xOWVkMTgxZTkzYTA0MjFlYmNlODUzNmVhYzAzMGFjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NDdlNzE0MjMxMTI0MGRiYTlmZmMyNDkzM2FiMjBiNS5iaW5kUG9wdXAocG9wdXBfZGI1ZDhlNTIwNjliNGY1M2I3ZmY2MDI1YjEzNzUzMzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxYzY2ZjVmYTMxMTRkNzQ5ZTgyM2M0MmI3ZWQzNGRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTY5MTk3ODMsIC03Ni44MzcyMjIyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZjAyZTgwNTg2NzY0OTdmYTA0NjNlM2JhOTM0NDkzMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZTUwMzhlM2ZhOTE0ZTNiOWM4MGNhMTI5NzQ5ZTBiYiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2U1MDM4ZTNmYTkxNGUzYjljODBjYTEyOTc0OWUwYmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvd2FyZCBDb3VudHkgRm9vZCBCYW5rPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjAyZTgwNTg2NzY0OTdmYTA0NjNlM2JhOTM0NDkzMi5zZXRDb250ZW50KGh0bWxfM2U1MDM4ZTNmYTkxNGUzYjljODBjYTEyOTc0OWUwYmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjFjNjZmNWZhMzExNGQ3NDllODIzYzQyYjdlZDM0ZGEuYmluZFBvcHVwKHBvcHVwXzZmMDJlODA1ODY3NjQ5N2ZhMDQ2M2UzYmE5MzQ0OTMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjMyZmQzZDdhYzM0M2ExYTZlODU1MzhjNDA2MmI1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjM3MzcwMDA3LCAtNzYuODA5NDUyODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGRiM2VkYjcyZjVhNDkyY2E2MTAwZjIxZDQyYWY2MTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzM4YzFhZDZlNjUwNGM3Mzg2NzVmMjMxMmFhNjZkMWYgPSAkKGA8ZGl2IGlkPSJodG1sXzczOGMxYWQ2ZTY1MDRjNzM4Njc1ZjIzMTJhYTY2ZDFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db2xvbmlhbCBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGRiM2VkYjcyZjVhNDkyY2E2MTAwZjIxZDQyYWY2MTguc2V0Q29udGVudChodG1sXzczOGMxYWQ2ZTY1MDRjNzM4Njc1ZjIzMTJhYTY2ZDFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmMzJmZDNkN2FjMzQzYTFhNmU4NTUzOGM0MDYyYjU3LmJpbmRQb3B1cChwb3B1cF9kZGIzZWRiNzJmNWE0OTJjYTYxMDBmMjFkNDJhZjYxOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDhmMTZjNDMzMTM2NDJlNGJmOTdkMmQwMzM1NDVmYjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS40MDk2NjEwOSwgLTc2LjQ2NzQyMjIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2MzQ4ZTcwNmNkNjQ4MzliYzg3NjRkOWM5YjdlN2YxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4YjZhNThlZmVkNzQyM2Y5MjFmZGI4NmQxNjg4MDliID0gJChgPGRpdiBpZD0iaHRtbF81OGI2YTU4ZWZlZDc0MjNmOTIxZmRiODZkMTY4ODA5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVycnkgSGFsbCBVTUM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2MzQ4ZTcwNmNkNjQ4MzliYzg3NjRkOWM5YjdlN2YxLnNldENvbnRlbnQoaHRtbF81OGI2YTU4ZWZlZDc0MjNmOTIxZmRiODZkMTY4ODA5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wOGYxNmM0MzMxMzY0MmU0YmY5N2QyZDAzMzU0NWZiOS5iaW5kUG9wdXAocG9wdXBfYjYzNDhlNzA2Y2Q2NDgzOWJjODc2NGQ5YzliN2U3ZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiYjQ5N2NhYjI0MTRkNmZhNGUyYTZkYzBhMmI3NjVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjMwNDE5MDEsIC03Ni4wNzcwMzg2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81N2RhMjNjMWJjNjI0ZTRiODJiOGEzMDk5YmEyYmY0NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2QxNjZjODljOWU0OTBhODkzOWZmNTVhZjQzNzlhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjNkMTY2Yzg5YzllNDkwYTg5MzlmZjU1YWY0Mzc5YTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJheSBvZiBIb3BlIE1pc3Npb24gQ2VudGVyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81N2RhMjNjMWJjNjI0ZTRiODJiOGEzMDk5YmEyYmY0NS5zZXRDb250ZW50KGh0bWxfYjNkMTY2Yzg5YzllNDkwYTg5MzlmZjU1YWY0Mzc5YTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGJiNDk3Y2FiMjQxNGQ2ZmE0ZTJhNmRjMGEyYjc2NWMuYmluZFBvcHVwKHBvcHVwXzU3ZGEyM2MxYmM2MjRlNGI4MmI4YTMwOTliYTJiZjQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NzUyYjBhNmM2NjY0N2Q4OGVhM2Q1ZTc0MjVhM2M4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjQ1ODQ2ODcyLCAtNzUuNzM4NTA2NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGUzYWU1Y2YwMGJkNGZhYWI4NjFlZjUxNzllYWY3OGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjQ0MmI5NzQ5MGZkNGM3OThhMGY2YzQ1NTRjODU5MTcgPSAkKGA8ZGl2IGlkPSJodG1sX2I0NDJiOTc0OTBmZDRjNzk4YTBmNmM0NTU0Yzg1OTE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgQmxpbmQgb2YgRGVsbWFydmE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlM2FlNWNmMDBiZDRmYWFiODYxZWY1MTc5ZWFmNzhkLnNldENvbnRlbnQoaHRtbF9iNDQyYjk3NDkwZmQ0Yzc5OGEwZjZjNDU1NGM4NTkxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NzUyYjBhNmM2NjY0N2Q4OGVhM2Q1ZTc0MjVhM2M4ZC5iaW5kUG9wdXAocG9wdXBfMGUzYWU1Y2YwMGJkNGZhYWI4NjFlZjUxNzllYWY3OGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxZmIxZjhlNjExYzQwODQ5MDQxZTAzMzBjMGViODliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNDA0NTg2LCAtNzYuOTYxNjU3MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzc4MGNkYTQ3NDMwNDY2Nzg1MDAzOWZkODY5MWU0MjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjY3MTEwNjI5ZDdiNGY0M2JjMzY3ODQ5YTg5NzZmOGIgPSAkKGA8ZGl2IGlkPSJodG1sXzI2NzExMDYyOWQ3YjRmNDNiYzM2Nzg0OWE4OTc2ZjhiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXNsZXkgRnJlZWRvbSBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3ODBjZGE0NzQzMDQ2Njc4NTAwMzlmZDg2OTFlNDI1LnNldENvbnRlbnQoaHRtbF8yNjcxMTA2MjlkN2I0ZjQzYmMzNjc4NDlhODk3NmY4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MWZiMWY4ZTYxMWM0MDg0OTA0MWUwMzMwYzBlYjg5Yi5iaW5kUG9wdXAocG9wdXBfNzc4MGNkYTQ3NDMwNDY2Nzg1MDAzOWZkODY5MWU0MjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyN2ZiZDFhOTNmMDQ4NmQ4YmY0MmM1OTc2NjU1OGM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMTc2OTkxOTgsIC03Ni44NTIxMzg2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODQ0MTE3MmY2NTY0OThmYTVhMzhmNWU1NDI4NDAzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zODRjNjJiOWE4OTA0ZDRkYmZlMmYwY2ExN2U4YWVmNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzg0YzYyYjlhODkwNGQ0ZGJmZTJmMGNhMTdlOGFlZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvcGUgV29ya3Mgb2YgSG93YXJkIENvdW50eTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzg0NDExNzJmNjU2NDk4ZmE1YTM4ZjVlNTQyODQwM2Uuc2V0Q29udGVudChodG1sXzM4NGM2MmI5YTg5MDRkNGRiZmUyZjBjYTE3ZThhZWY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyN2ZiZDFhOTNmMDQ4NmQ4YmY0MmM1OTc2NjU1OGM0LmJpbmRQb3B1cChwb3B1cF83ODQ0MTE3MmY2NTY0OThmYTVhMzhmNWU1NDI4NDAzZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTgyMDkwYzQ1MGI3NDA0NWIzZWY1NjI5NmY1MTdjYTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC40NjkyNTQxOCwgLTc1Ljc0OTgyMTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlMmZiOWEwZjViYjQxZWNiNjI1YmY0NDEzNzA5N2YxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkZjhjN2E0NGY1ZjRkMzdhZjFlNTdjOGU5Y2UwY2Q2ID0gJChgPGRpdiBpZD0iaHRtbF9kZGY4YzdhNDRmNWY0ZDM3YWYxZTU3YzhlOWNlMGNkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGh3ZXN0ZXJuIEVsZW1lbnRhcnkgU2Nob29sPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTJmYjlhMGY1YmI0MWVjYjYyNWJmNDQxMzcwOTdmMS5zZXRDb250ZW50KGh0bWxfZGRmOGM3YTQ0ZjVmNGQzN2FmMWU1N2M4ZTljZTBjZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTgyMDkwYzQ1MGI3NDA0NWIzZWY1NjI5NmY1MTdjYTQuYmluZFBvcHVwKHBvcHVwXzZlMmZiOWEwZjViYjQxZWNiNjI1YmY0NDEzNzA5N2YxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTU3ZjIxNjliM2U0OGQ2YWI2MzYzYTYzYmFlMTc1ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjY5ODA2NjU5LCAtNzYuNTQ3NzczMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGIyNzc2OGI0MGFhNDQ4Y2ExNGM4YzhjYzY3ZjY4ZDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzVjMjVjODgzYWU3NGY1M2I0ZjY4Yjc0OGQ5M2QwOWQgPSAkKGA8ZGl2IGlkPSJodG1sXzM1YzI1Yzg4M2FlNzRmNTNiNGY2OGI3NDhkOTNkMDlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXlzaWRlIEJhcHRpc3QgQ2h1cmNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjI3NzY4YjQwYWE0NDhjYTE0YzhjOGNjNjdmNjhkNy5zZXRDb250ZW50KGh0bWxfMzVjMjVjODgzYWU3NGY1M2I0ZjY4Yjc0OGQ5M2QwOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjU1N2YyMTY5YjNlNDhkNmFiNjM2M2E2M2JhZTE3NWQuYmluZFBvcHVwKHBvcHVwXzRiMjc3NjhiNDBhYTQ0OGNhMTRjOGM4Y2M2N2Y2OGQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZjNlZDRhNTkwNzY0N2MxODIwYzhiN2JlZDViZWEwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjUxMTE5MDEyLCAtNzYuNjM3NTE3MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzBmMGQ2NWExNzZhNDg4ODljNmE5ZDMzYTQzMzI3MmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2VhNzI4NTE5ZTJhNDNjOTg2OTQ2NGEzOTQ0OTllZGUgPSAkKGA8ZGl2IGlkPSJodG1sXzdlYTcyODUxOWUyYTQzYzk4Njk0NjRhMzk0NDk5ZWRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYWx2ZXJ0IENodXJjaGVzIENvbW11bml0eSBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzBmMGQ2NWExNzZhNDg4ODljNmE5ZDMzYTQzMzI3MmUuc2V0Q29udGVudChodG1sXzdlYTcyODUxOWUyYTQzYzk4Njk0NjRhMzk0NDk5ZWRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VmM2VkNGE1OTA3NjQ3YzE4MjBjOGI3YmVkNWJlYTBkLmJpbmRQb3B1cChwb3B1cF8zMGYwZDY1YTE3NmE0ODg4OWM2YTlkMzNhNDMzMjcyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWNmMThmYmM0MTlkNDNkNjg4N2Q4NmZjNDE5YWMxN2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC40NjkyNjk1LCAtNzYuNTEyNzcyNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTRkNWQxZTQ1YTBjNDA5NGI5MDQ5NWJiN2RhNjljYzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzE2YjgxMjIyNzBlNDViNWE0OWJmZjgwMTYwY2Q1YmEgPSAkKGA8ZGl2IGlkPSJodG1sXzMxNmI4MTIyMjcwZTQ1YjVhNDliZmY4MDE2MGNkNWJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Dcm9zc3JvYWRzIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNGQ1ZDFlNDVhMGM0MDk0YjkwNDk1YmI3ZGE2OWNjMy5zZXRDb250ZW50KGh0bWxfMzE2YjgxMjIyNzBlNDViNWE0OWJmZjgwMTYwY2Q1YmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWNmMThmYmM0MTlkNDNkNjg4N2Q4NmZjNDE5YWMxN2YuYmluZFBvcHVwKHBvcHVwXzE0ZDVkMWU0NWEwYzQwOTRiOTA0OTViYjdkYTY5Y2MzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYzU3NjA3N2Q4NWU0MDQxOGI5ODVjYmY3MGIwNDA4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjY2MDU5NDc1LCAtNzYuNjA3MjExOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MDllY2QyNTVhNTY0ZjI5OGYwMWY2ZjcxODM5MWE2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZGVkN2Q4MWExMzM0N2VjYTg2MTM1Yzg4N2M1ZDFmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmRlZDdkODFhMTMzNDdlY2E4NjEzNWM4ODdjNWQxZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZpcnN0IEx1dGhlcmFuIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjA5ZWNkMjU1YTU2NGYyOThmMDFmNmY3MTgzOTFhNmEuc2V0Q29udGVudChodG1sX2ZkZWQ3ZDgxYTEzMzQ3ZWNhODYxMzVjODg3YzVkMWYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VjNTc2MDc3ZDg1ZTQwNDE4Yjk4NWNiZjcwYjA0MDg2LmJpbmRQb3B1cChwb3B1cF82MDllY2QyNTVhNTY0ZjI5OGYwMWY2ZjcxODM5MWE2YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjUyNGU5MTkxZWI4NDM4MGJkYWNmOWFiNmY2YTY1OTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41NDkzNDk5NywgLTc2LjU5NDA5MTEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4MmY2YzM0NzdmNTQ0ODhiNGVjNzhiZDU4ZjgxMjM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzYTc1NWMzYjQ0YzRjYTFhZDViMGNlODI5NjMzNzI3ID0gJChgPGRpdiBpZD0iaHRtbF9hM2E3NTVjM2I0NGM0Y2ExYWQ1YjBjZTgyOTYzMzcyNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFuZHMgb2YgR09EIE1vYmlsZSBTdHJlZXQgTWluaXN0cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4MmY2YzM0NzdmNTQ0ODhiNGVjNzhiZDU4ZjgxMjM5LnNldENvbnRlbnQoaHRtbF9hM2E3NTVjM2I0NGM0Y2ExYWQ1YjBjZTgyOTYzMzcyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNTI0ZTkxOTFlYjg0MzgwYmRhY2Y5YWI2ZjZhNjU5OS5iaW5kUG9wdXAocG9wdXBfMjgyZjZjMzQ3N2Y1NDQ4OGI0ZWM3OGJkNThmODEyMzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhMDE1NzQ4ZThlMTRkNTNhM2FkMzY5YTdkZTIwNWE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNDA1NDk0NTQsIC03Ni40OTY3ODcxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MDhiYTQ1OWIzMjk0NmQ3OGU0NzQ3YmE2OGEyZjkzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NDcwOWZmYWQzMTc0MTU2YWQ2OWM4YmVjZDViYmEyYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzQ3MDlmZmFkMzE3NDE1NmFkNjljOGJlY2Q1YmJhMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hbm5hIGZyb20gaW4gR29kJ3MgQ2FyZSBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwOGJhNDU5YjMyOTQ2ZDc4ZTQ3NDdiYTY4YTJmOTNhLnNldENvbnRlbnQoaHRtbF83NDcwOWZmYWQzMTc0MTU2YWQ2OWM4YmVjZDViYmEyYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYTAxNTc0OGU4ZTE0ZDUzYTNhZDM2OWE3ZGUyMDVhNi5iaW5kUG9wdXAocG9wdXBfOTA4YmE0NTliMzI5NDZkNzhlNDc0N2JhNjhhMmY5M2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiNGMzZmZhNmZjMjQ0NWNiODU2MTc3MzBhODkzYmY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNTUwODkyNjYsIC03Ni41ODIyOTAyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZDJhNjkzZTg0OGE0MDYxYTExN2U1MmE2MmNkYTkxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjllZjFmZGJlMmU0N2IxYjE4NzFlMGRlY2Q1ZDgxNCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTI5ZWYxZmRiZTJlNDdiMWIxODcxZTBkZWNkNWQ4MTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk10LiBPbGl2ZSBVbml0ZWQgTWV0aG9kaXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2QyYTY5M2U4NDhhNDA2MWExMTdlNTJhNjJjZGE5MTYuc2V0Q29udGVudChodG1sXzUyOWVmMWZkYmUyZTQ3YjFiMTg3MWUwZGVjZDVkODE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiNGMzZmZhNmZjMjQ0NWNiODU2MTc3MzBhODkzYmY5LmJpbmRQb3B1cChwb3B1cF8zZDJhNjkzZTg0OGE0MDYxYTExN2U1MmE2MmNkYTkxNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODlmNGIxMjY5MTk3NDRmM2EyYzkzZTMyZmY3MmM3MjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC42NjY2OTI1MiwgLTc2LjUzMDM4ODgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1ZDBiZjE1ZmE4OTRjMmRiMjAwOTg1ZWZlNWVlODJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4MDQ3NmFiODYyMDRiOWU4NjFkMTY4MjQ2YzZiYjE5ID0gJChgPGRpdiBpZD0iaHRtbF83ODA0NzZhYjg2MjA0YjllODYxZDE2ODI0NmM2YmIxOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFuZGxlIENsaWZmIENvbW11bml0eSBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDVkMGJmMTVmYTg5NGMyZGIyMDA5ODVlZmU1ZWU4MmEuc2V0Q29udGVudChodG1sXzc4MDQ3NmFiODYyMDRiOWU4NjFkMTY4MjQ2YzZiYjE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg5ZjRiMTI2OTE5NzQ0ZjNhMmM5M2UzMmZmNzJjNzIxLmJpbmRQb3B1cChwb3B1cF80NWQwYmYxNWZhODk0YzJkYjIwMDk4NWVmZTVlZTgyYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2EyZGYzYTkzYTgwNDhiNDlmZGRiOWM0ZDJkMWJmZWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zOTgxMzU2MiwgLTc2LjQzNzE3NzAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0NzFlMDExMWVkMjRlZjZiNjRhMDgyYjhmNTJmNTk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzZDJhZmU0ODM0OTQ0NzRhNjAzZWI4YjAwMzVjOGFiID0gJChgPGRpdiBpZD0iaHRtbF8zM2QyYWZlNDgzNDk0NDc0YTYwM2ViOGIwMDM1YzhhYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U01JTEU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0NzFlMDExMWVkMjRlZjZiNjRhMDgyYjhmNTJmNTk0LnNldENvbnRlbnQoaHRtbF8zM2QyYWZlNDgzNDk0NDc0YTYwM2ViOGIwMDM1YzhhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYTJkZjNhOTNhODA0OGI0OWZkZGI5YzRkMmQxYmZlZS5iaW5kUG9wdXAocG9wdXBfYzQ3MWUwMTExZWQyNGVmNmI2NGEwODJiOGY1MmY1OTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliYWExYmIwNjlmYjRlNjc5NmExMDI1MjExYzI0MzcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNzAzNTg4MjgsIC03Ni41MzQ2NDczOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xM2Q5OTNhOGFhZjU0NTU0YTRjZjFmZTU5OTY2MzZmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNjAwYzEwZmNiOWE0ZDBjOTU1M2I5OTMwZjlkZTQ1NiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzYwMGMxMGZjYjlhNGQwYzk1NTNiOTkzMGY5ZGU0NTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBBbnRob255J3MgQ2h1cmNoLCBMYWRpZXMgb2YgQ2hhcml0eTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTNkOTkzYThhYWY1NDU1NGE0Y2YxZmU1OTk2NjM2ZjIuc2V0Q29udGVudChodG1sXzM2MDBjMTBmY2I5YTRkMGM5NTUzYjk5MzBmOWRlNDU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzliYWExYmIwNjlmYjRlNjc5NmExMDI1MjExYzI0MzcyLmJpbmRQb3B1cChwb3B1cF8xM2Q5OTNhOGFhZjU0NTU0YTRjZjFmZTU5OTY2MzZmMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Y4NTE4YjFmMzc2NDVkZmIzOWIxNWQ4YTY0MDg5ZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41Mzc3MzU2MSwgLTc2LjU4MTMxMzQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiZTljNjZlNTExNTRkYWE5ZTIzNmU0YWNkMjZkNDU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1YTk1YThkMjNkOTQ5NzY4NTE4OTA4MDFjZjhkMjIxID0gJChgPGRpdiBpZD0iaHRtbF8xNWE5NWE4ZDIzZDk0OTc2ODUxODkwODAxY2Y4ZDIyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIEpvaG4gVmlhbm5leSBJbnRlci1GYWl0aCBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmJlOWM2NmU1MTE1NGRhYTllMjM2ZTRhY2QyNmQ0NTkuc2V0Q29udGVudChodG1sXzE1YTk1YThkMjNkOTQ5NzY4NTE4OTA4MDFjZjhkMjIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NmODUxOGIxZjM3NjQ1ZGZiMzliMTVkOGE2NDA4OWZmLmJpbmRQb3B1cChwb3B1cF9iYmU5YzY2ZTUxMTU0ZGFhOWUyMzZlNGFjZDI2ZDQ1OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTMyMjMzYzZmMGMyNDE5ZmFlZWU3OWEzMjdmNDYyYWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC42MTcxMDgwNCwgLTc2LjkwMTM1MDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk3Y2UyMjBjMjM3NTQ1NTY5NTBjMGUzZGNlZjAxZjEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwOGM2NTRlY2ZkYzRkODQ5NWFjNGJhNzE2ZjViNzI1ID0gJChgPGRpdiBpZD0iaHRtbF9lMDhjNjU0ZWNmZGM0ZDg0OTVhYzRiYTcxNmY1YjcyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2FsdmF0aW9uIEFybXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk3Y2UyMjBjMjM3NTQ1NTY5NTBjMGUzZGNlZjAxZjEyLnNldENvbnRlbnQoaHRtbF9lMDhjNjU0ZWNmZGM0ZDg0OTVhYzRiYTcxNmY1YjcyNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMzIyMzNjNmYwYzI0MTlmYWVlZTc5YTMyN2Y0NjJhZi5iaW5kUG9wdXAocG9wdXBfOTdjZTIyMGMyMzc1NDU1Njk1MGMwZTNkY2VmMDFmMTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RlYThlOTlhYTc3ZDQ1Yzg5Yjk5YjZlZGFlZWNlYzQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNDM0MDcwODMsIC03Ni45MTA1OTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViOWE4YWJlZGVkYzRkODhiNjQ2NjY4NzM2MTc1NGZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjZWYyYWI0YzRmMDRjMTc4MTk0YzJjOWYyYmIwYTMyID0gJChgPGRpdiBpZD0iaHRtbF9lY2VmMmFiNGM0ZjA0YzE3ODE5NGMyYzlmMmJiMGEzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R29vZCBTaGVwYXJkIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YjlhOGFiZWRlZGM0ZDg4YjY0NjY2ODczNjE3NTRmYS5zZXRDb250ZW50KGh0bWxfZWNlZjJhYjRjNGYwNGMxNzgxOTRjMmM5ZjJiYjBhMzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGVhOGU5OWFhNzdkNDVjODliOTliNmVkYWVlY2VjNDIuYmluZFBvcHVwKHBvcHVwXzViOWE4YWJlZGVkYzRkODhiNjQ2NjY4NzM2MTc1NGZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZTc2NGQ4MGVhMmI0NzcxYWQ2ODJkZjU1MjAzNzQ1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjU3NDEyNjMzLCAtNzYuODkwMzY1MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDBkZGIzYWI0ZjM5NDNlYmI5MzYzMjIwOGIyZmI2YTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGZkYWJlY2UzNTU3NDBkZWIyYTU3OTljMjc1MDZhNzEgPSAkKGA8ZGl2IGlkPSJodG1sXzRmZGFiZWNlMzU1NzQwZGViMmE1Nzk5YzI3NTA2YTcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2x5IFNhbmN0dWFyeSBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwZGRiM2FiNGYzOTQzZWJiOTM2MzIyMDhiMmZiNmExLnNldENvbnRlbnQoaHRtbF80ZmRhYmVjZTM1NTc0MGRlYjJhNTc5OWMyNzUwNmE3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZTc2NGQ4MGVhMmI0NzcxYWQ2ODJkZjU1MjAzNzQ1Ny5iaW5kUG9wdXAocG9wdXBfMDBkZGIzYWI0ZjM5NDNlYmI5MzYzMjIwOGIyZmI2YTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FhMDYyZmM1ZGIyOTQ3YzQ5Y2NiMWY2ZWUyOGM3NDRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNTI2MTU3NDYsIC03Ni45Nzg1MTEwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OWEyNGJjYTU3Zjg0NWU5Yjg5NTgwM2Y3MTNmZDdkMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lODcxMjhlNmNhNDE0YzlkOTk3ZjE1YTk5YTYzZTc4YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTg3MTI4ZTZjYTQxNGM5ZDk5N2YxNWE5OWE2M2U3OGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxvcmV0dGEgJiBNYXJ54oCZcyBGb29kIFBhbnRyeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjlhMjRiY2E1N2Y4NDVlOWI4OTU4MDNmNzEzZmQ3ZDIuc2V0Q29udGVudChodG1sX2U4NzEyOGU2Y2E0MTRjOWQ5OTdmMTVhOTlhNjNlNzhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FhMDYyZmM1ZGIyOTQ3YzQ5Y2NiMWY2ZWUyOGM3NDRkLmJpbmRQb3B1cChwb3B1cF82OWEyNGJjYTU3Zjg0NWU5Yjg5NTgwM2Y3MTNmZDdkMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjZjMmI0ODUzN2QyNDE3Mjk0ODI2OGZhMjVlMTI3ZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41Mjk2NDI1NSwgLTc2Ljk3OTc0NTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5YTU0N2U2NTAxODRmZDNiODkyYmRjMWI3ZDI3YjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5YmM2N2E3YjE3ZTQ0MjZhNWVmOGVlMzI1OGVjMDQ1ID0gJChgPGRpdiBpZD0iaHRtbF83OWJjNjdhN2IxN2U0NDI2YTVlZjhlZTMyNThlYzA0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hyaXN0IENodXJjaCwgTGEgUGxhdGEgUGFyaXNoIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OWE1NDdlNjUwMTg0ZmQzYjg5MmJkYzFiN2QyN2I4Yy5zZXRDb250ZW50KGh0bWxfNzliYzY3YTdiMTdlNDQyNmE1ZWY4ZWUzMjU4ZWMwNDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjZjMmI0ODUzN2QyNDE3Mjk0ODI2OGZhMjVlMTI3ZDMuYmluZFBvcHVwKHBvcHVwXzk5YTU0N2U2NTAxODRmZDNiODkyYmRjMWI3ZDI3YjhjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDU5NDg1ODU3M2Q0ZTI3YmVjYTQ1ZjY5MTU0MjQ2OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjI5OTEwMjEyLCAtNzYuODgwODk0MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVkN2Y1ZTEyNGRmNDU3MzhiY2U2NjYyNzFlMDA4ZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQzYWJkNjAxZmE1NDJlNmFkN2ZmMDE5YWU1ZWM1ZjkgPSAkKGA8ZGl2IGlkPSJodG1sXzQ0M2FiZDYwMWZhNTQyZTZhZDdmZjAxOWFlNWVjNWY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXlzaWRlIEZvb2QgQmFuaywgSW5jLjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjVkN2Y1ZTEyNGRmNDU3MzhiY2U2NjYyNzFlMDA4ZWYuc2V0Q29udGVudChodG1sXzQ0M2FiZDYwMWZhNTQyZTZhZDdmZjAxOWFlNWVjNWY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwNTk0ODU4NTczZDRlMjdiZWNhNDVmNjkxNTQyNDY5LmJpbmRQb3B1cChwb3B1cF9mNWQ3ZjVlMTI0ZGY0NTczOGJjZTY2NjI3MWUwMDhlZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmFlZDA4ZGE0YTJhNDE1Yjk4YzFiYWRhMDFmNzY3YWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC42MTkwNjc1NywgLTc2Ljg2MzkzNjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhlMTFlNGU4YmFjZTRkNTA5NmM2OTVhZjdiZGExNTA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiZjNiNTVjMDY2NjQxNGNiODg4NWEzZmFjY2FkYTBhID0gJChgPGRpdiBpZD0iaHRtbF82YmYzYjU1YzA2NjY0MTRjYjg4ODVhM2ZhY2NhZGEwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIFZpbmNlbnQgZGUgUGF1bCBGb29kIFBhbnRyeSBvZiBTdC4gUGV0ZXLigJlzIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGUxMWU0ZThiYWNlNGQ1MDk2YzY5NWFmN2JkYTE1MDYuc2V0Q29udGVudChodG1sXzZiZjNiNTVjMDY2NjQxNGNiODg4NWEzZmFjY2FkYTBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZhZWQwOGRhNGEyYTQxNWI5OGMxYmFkYTAxZjc2N2FkLmJpbmRQb3B1cChwb3B1cF84ZTExZTRlOGJhY2U0ZDUwOTZjNjk1YWY3YmRhMTUwNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmRhZDQ4MTI3NjNhNGNiN2I0YTZjNjI2ZTIyNWNmMjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC40NzM3MTk4NywgLTc3LjE1NTcxNDUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5NTVmZjI0ZmRmNzQxZmFhOGM5NzRmYzMyZjMwOTg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2MGI1OTliMzdiMTQwODM5OGM2NDE1OThlYWU3YzM5ID0gJChgPGRpdiBpZD0iaHRtbF9mNjBiNTk5YjM3YjE0MDgzOThjNjQxNTk4ZWFlN2MzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Sm9l4oCZcyBQbGFjZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDk1NWZmMjRmZGY3NDFmYWE4Yzk3NGZjMzJmMzA5ODUuc2V0Q29udGVudChodG1sX2Y2MGI1OTliMzdiMTQwODM5OGM2NDE1OThlYWU3YzM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZkYWQ0ODEyNzYzYTRjYjdiNGE2YzYyNmUyMjVjZjIzLmJpbmRQb3B1cChwb3B1cF9kOTU1ZmYyNGZkZjc0MWZhYThjOTc0ZmMzMmYzMDk4NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGYzZGIxNTE4Y2EyNGNjNjlhMDFlNGMxYzRlZjQ2ODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC42MDM1MDAzOTk5OTk5OTQsIC03Ni45MTA4Njk3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDhmZjQzNTU3NTg0OGNlYTA5MzQ0MDZhODBlYWEwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjk1NmYwOGUxOGM0NzBhOTBhOThjNDY1MDYwNjUyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTY5NTZmMDhlMThjNDcwYTkwYTk4YzQ2NTA2MDY1MjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBlYWNlIEx1dGhlcmFuIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDQ4ZmY0MzU1NzU4NDhjZWEwOTM0NDA2YTgwZWFhMDkuc2V0Q29udGVudChodG1sX2U2OTU2ZjA4ZTE4YzQ3MGE5MGE5OGM0NjUwNjA2NTI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmM2RiMTUxOGNhMjRjYzY5YTAxZTRjMWM0ZWY0Njg2LmJpbmRQb3B1cChwb3B1cF9kNDhmZjQzNTU3NTg0OGNlYTA5MzQ0MDZhODBlYWEwOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTZlMTFkN2M5ZGQ4NGQ3YWE2YWNmZjkyM2YxOTAwYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC42MTA1NzEzMywgLTc2LjkwMjAwNjA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliMjA1MGRkNTlmOTQ0Y2RhOGYyYjU0YTcwNTYxYzhkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxMDk2ZTVhYWE1MzQwNWU4ZmQ3NTgyYmNlMTA0YTZiID0gJChgPGRpdiBpZD0iaHRtbF83MTA5NmU1YWFhNTM0MDVlOGZkNzU4MmJjZTEwNGE2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hhcmxlcyBDb3VudHkgQ2hpbGRyZW7igJlzIEFpZCBTb2NpZXR5LCBJbmMuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YjIwNTBkZDU5Zjk0NGNkYThmMmI1NGE3MDU2MWM4ZC5zZXRDb250ZW50KGh0bWxfNzEwOTZlNWFhYTUzNDA1ZThmZDc1ODJiY2UxMDRhNmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTZlMTFkN2M5ZGQ4NGQ3YWE2YWNmZjkyM2YxOTAwYjMuYmluZFBvcHVwKHBvcHVwXzliMjA1MGRkNTlmOTQ0Y2RhOGYyYjU0YTcwNTYxYzhkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OTZlNTBmNzdiMGM0NWI4YWY5MjAyMGZkZWQ4NWJlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjYzMjE1LCAtNzcuMDc5MTE5OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjFiNGRjYjczMjZhNGM0ZWI4ODk5ZDQzNTllM2Q1ZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGY3ODczNjc5OGU3NDMwZTliMTQ1YWQ4NWRlYzNjMGMgPSAkKGA8ZGl2IGlkPSJodG1sXzBmNzg3MzY3OThlNzQzMGU5YjE0NWFkODVkZWMzYzBjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaXNnYWggU2V2ZW50aCBEYXkgQWR2ZW50aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjFiNGRjYjczMjZhNGM0ZWI4ODk5ZDQzNTllM2Q1ZDkuc2V0Q29udGVudChodG1sXzBmNzg3MzY3OThlNzQzMGU5YjE0NWFkODVkZWMzYzBjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc5NmU1MGY3N2IwYzQ1YjhhZjkyMDIwZmRlZDg1YmUzLmJpbmRQb3B1cChwb3B1cF9mMWI0ZGNiNzMyNmE0YzRlYjg4OTlkNDM1OWUzZDVkOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODY4NDA0ZTZhNzM3NGFkMDhmNzA3MjdkMjU1YzU0MzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC42MjIyOTg1NCwgLTc2LjkwMzkyMTYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxY2ZiZWNmYWU3ZDQ4Y2E5NzM3MzA0NzNiODM3ZWQxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyZWM3YjllOTY5MzRhNGY5NGM4OTMzNjc1NGI5MjgxID0gJChgPGRpdiBpZD0iaHRtbF85MmVjN2I5ZTk2OTM0YTRmOTRjODkzMzY3NTRiOTI4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FsdmFyeSBVbml0ZWQgTWV0aG9kaXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzFjZmJlY2ZhZTdkNDhjYTk3MzczMDQ3M2I4MzdlZDEuc2V0Q29udGVudChodG1sXzkyZWM3YjllOTY5MzRhNGY5NGM4OTMzNjc1NGI5MjgxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg2ODQwNGU2YTczNzRhZDA4ZjcwNzI3ZDI1NWM1NDM3LmJpbmRQb3B1cChwb3B1cF8zMWNmYmVjZmFlN2Q0OGNhOTczNzMwNDczYjgzN2VkMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTQwYjcxMzQ5YTNkNDkwY2EzODBkMmM4Zjk5NjA0YjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41MzA3MjEwOCwgLTc2Ljc4Mjg0ODcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhNzkzNmI5MzY3ZDQ3MTNiOTEzOGEzOTk2ZDkyNWI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzZDlkYjU0NGViOTQxZjA5MDFjZTdkZTliNjVlYWM4ID0gJChgPGRpdiBpZD0iaHRtbF81M2Q5ZGI1NDRlYjk0MWYwOTAxY2U3ZGU5YjY1ZWFjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SHVnaGVzdmlsbGUgQmFwdGlzdCBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhNzkzNmI5MzY3ZDQ3MTNiOTEzOGEzOTk2ZDkyNWI1LnNldENvbnRlbnQoaHRtbF81M2Q5ZGI1NDRlYjk0MWYwOTAxY2U3ZGU5YjY1ZWFjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NDBiNzEzNDlhM2Q0OTBjYTM4MGQyYzhmOTk2MDRiNC5iaW5kUG9wdXAocG9wdXBfMWE3OTM2YjkzNjdkNDcxM2I5MTM4YTM5OTZkOTI1YjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhYmQxZTJmMGVmYTQyNWZhODdjZWFlN2FjYzEzZGI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNTE2OTQ4NTcsIC03Ni45ODI3ODE5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iY2ViZjFkM2U3ZjI0NGIzYTA5Njg0MTMyY2NmNDFjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNGM2NmEzZDA3MTc0NTk3YWMxYmNkODQyNmRkODQ1NyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTRjNjZhM2QwNzE3NDU5N2FjMWJjZDg0MjZkZDg0NTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxpZmVzdHlsZXM8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JjZWJmMWQzZTdmMjQ0YjNhMDk2ODQxMzJjY2Y0MWM4LnNldENvbnRlbnQoaHRtbF9lNGM2NmEzZDA3MTc0NTk3YWMxYmNkODQyNmRkODQ1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYWJkMWUyZjBlZmE0MjVmYTg3Y2VhZTdhY2MxM2RiNC5iaW5kUG9wdXAocG9wdXBfYmNlYmYxZDNlN2YyNDRiM2EwOTY4NDEzMmNjZjQxYzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2OWI3ZDZjYTFlOTRlZGVhMTMzNWRlYzMxMGM5OTJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNTk2MzQ3MjcsIC03Ny4xNjc1NTgwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZWZhMGY2MjZmMTU0ZGJiYmU4Y2U3OWE1MWQ3NTQ1NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTQ2ZjUzN2ZmZDY0OTkxYjdkMDAyMjMyYjBiZTNiNSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2E0NmY1MzdmZmQ2NDk5MWI3ZDAwMjIzMmIwYmUzYjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0YXIgb2YgdGhlIFNlYSBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllZmEwZjYyNmYxNTRkYmJiZThjZTc5YTUxZDc1NDU2LnNldENvbnRlbnQoaHRtbF9jYTQ2ZjUzN2ZmZDY0OTkxYjdkMDAyMjMyYjBiZTNiNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NjliN2Q2Y2ExZTk0ZWRlYTEzMzVkZWMzMTBjOTkyYS5iaW5kUG9wdXAocG9wdXBfOWVmYTBmNjI2ZjE1NGRiYmJlOGNlNzlhNTFkNzU0NTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ0MWJhYmEwYTgzZjQwMzM4MmMzMDdkOWI0NWI0YmJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNTU5NDEwNTgsIC03Ny4xNjY0OTM1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZmYwMjcwNGNjOWQ0YTg0YWQ3YmQ2NjU1YWI3ZmRiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOTg2M2Q2ODc1MzM0YWUyYTRlNWE4MzAyMmE0M2NiZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDk4NjNkNjg3NTMzNGFlMmE0ZTVhODMwMjJhNDNjYmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBsZWFzYW50IEdyb3ZlIE1pc3Npb25hcnkgQmFwdGlzdCBDaHVyY2ggUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZmYwMjcwNGNjOWQ0YTg0YWQ3YmQ2NjU1YWI3ZmRiNi5zZXRDb250ZW50KGh0bWxfMDk4NjNkNjg3NTMzNGFlMmE0ZTVhODMwMjJhNDNjYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDQxYmFiYTBhODNmNDAzMzgyYzMwN2Q5YjQ1YjRiYmEuYmluZFBvcHVwKHBvcHVwXzZmZjAyNzA0Y2M5ZDRhODRhZDdiZDY2NTVhYjdmZGI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MWNiNzIxOTcwOWE0ZDY2ODEzOTYxMmU5OTQzNmZiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjU5Njk2NDE3LCAtNzYuOTM2NDkyNjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2E2ODNhNDM2MDZlNDZmZjkxZjhlNGI1NWRhZDhjYTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjczMzBiZTYxYzMyNGU4YmJlOTQzNmJjOTA2MTY1NDkgPSAkKGA8ZGl2IGlkPSJodG1sXzI3MzMwYmU2MWMzMjRlOGJiZTk0MzZiYzkwNjE2NTQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXcgSG9wZSBDb21tdW5pdHkgT3V0cmVhY2ggU2VydmljZXMsIEluYy48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhNjgzYTQzNjA2ZTQ2ZmY5MWY4ZTRiNTVkYWQ4Y2E4LnNldENvbnRlbnQoaHRtbF8yNzMzMGJlNjFjMzI0ZThiYmU5NDM2YmM5MDYxNjU0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MWNiNzIxOTcwOWE0ZDY2ODEzOTYxMmU5OTQzNmZiOS5iaW5kUG9wdXAocG9wdXBfM2E2ODNhNDM2MDZlNDZmZjkxZjhlNGI1NWRhZDhjYTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MyNTJkOTcyNjJiZTRiM2ZiMWM5NzY0NGYzNjU3NTBhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNTI4NDU5NjAwMDAwMDA1LCAtNzYuOTg0ODkyNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWViN2I2MWUwZTYzNDFlMmFiZTdjMWQyNzI3ZTY0N2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTA2ZTZlNWJlNzJlNDIyZThkODEwNWNmZWYyOGY3MmEgPSAkKGA8ZGl2IGlkPSJodG1sX2EwNmU2ZTViZTcyZTQyMmU4ZDgxMDVjZmVmMjhmNzJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYSBQbGF0YSBVbml0ZWQgTWV0aG9kaXN0IENodXJjaCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlYjdiNjFlMGU2MzQxZTJhYmU3YzFkMjcyN2U2NDdhLnNldENvbnRlbnQoaHRtbF9hMDZlNmU1YmU3MmU0MjJlOGQ4MTA1Y2ZlZjI4ZjcyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMjUyZDk3MjYyYmU0YjNmYjFjOTc2NDRmMzY1NzUwYS5iaW5kUG9wdXAocG9wdXBfMWViN2I2MWUwZTYzNDFlMmFiZTdjMWQyNzI3ZTY0N2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmYjY4YTkxNjk0MjQ1YmJiZmE3ZTdkYzIyZjJiYWJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNDkxODIzNDk5OTk5OTk1LCAtNzcuMDY2ODc3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDYyM2E0ZWU3YTU0NjJiOTk5NDNhMjYxZjNiZTRiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YWQyYWFkODE2NjQ0Yzg4YmQ5MTJiNmVhYTYxNmMzNyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWFkMmFhZDgxNjY0NGM4OGJkOTEyYjZlYWE2MTZjMzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBDYXRoZXJpbmUvU3QuIElnbmF0aXVzIEhpbGx0b3AgRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0NjIzYTRlZTdhNTQ2MmI5OTk0M2EyNjFmM2JlNGIzLnNldENvbnRlbnQoaHRtbF85YWQyYWFkODE2NjQ0Yzg4YmQ5MTJiNmVhYTYxNmMzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZmI2OGE5MTY5NDI0NWJiYmZhN2U3ZGMyMmYyYmFiZS5iaW5kUG9wdXAocG9wdXBfMjQ2MjNhNGVlN2E1NDYyYjk5OTQzYTI2MWYzYmU0YjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlN2ZiYWE5NDA4MjRiZWNhZTFkZWQwYjg0YzE4ZDkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMjk5ODQzMzIsIC03Ni42NDE4NTA0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NmY0NDY5OWFkMDM0ZTk2ODk2NDYzNmYxODRjZTAyYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTY1NDcyM2RlMGY0MDlmYjc5NjA0ZjViMzVkMjRkNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzE2NTQ3MjNkZTBmNDA5ZmI3OTYwNGY1YjM1ZDI0ZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0LiBQYXVs4oCZcyBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2ZjQ0Njk5YWQwMzRlOTY4OTY0NjM2ZjE4NGNlMDJiLnNldENvbnRlbnQoaHRtbF83MTY1NDcyM2RlMGY0MDlmYjc5NjA0ZjViMzVkMjRkNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZTdmYmFhOTQwODI0YmVjYWUxZGVkMGI4NGMxOGQ5Mi5iaW5kUG9wdXAocG9wdXBfODZmNDQ2OTlhZDAzNGU5Njg5NjQ2MzZmMTg0Y2UwMmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjNzQ5NmUxZDU0MDRjOTViN2ZjYTFmNmExN2E5MzlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMjQwMDE3NDMsIC03Ni40OTM3NzQ4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjY4YWE5MGVmOTU0MTc1YmZkM2Q0YTI1MTJhM2FmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzY2NTNkMWVjZWM0YTA5OGM1ZDhjNjA5MGVkMmZjYyA9ICQoYDxkaXYgaWQ9Imh0bWxfY2M2NjUzZDFlY2VjNGEwOThjNWQ4YzYwOTBlZDJmY2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk91ciBEYWlseSBCcmVhZCDigJPCoEdvb2QgU2FtYXJpdGFuIENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTI2OGFhOTBlZjk1NDE3NWJmZDNkNGEyNTEyYTNhZjYuc2V0Q29udGVudChodG1sX2NjNjY1M2QxZWNlYzRhMDk4YzVkOGM2MDkwZWQyZmNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVjNzQ5NmUxZDU0MDRjOTViN2ZjYTFmNmExN2E5MzlmLmJpbmRQb3B1cChwb3B1cF8xMjY4YWE5MGVmOTU0MTc1YmZkM2Q0YTI1MTJhM2FmNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODk2ZWIwNDhlOWI2NDliZGE4YWMyZjQzMjczZmM3YTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4xMjAwNjUxMywgLTc2LjM3MzQwODU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1ZmJiMGEyNjhlNTQ3MmE5YThhZDg4NDFjOGZhNmI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM0MzMxNzBiZGRkMjRiZGQ5MDI2MzM3ZWI3OTcwZTM5ID0gJChgPGRpdiBpZD0iaHRtbF8zNDMzMTcwYmRkZDI0YmRkOTAyNjMzN2ViNzk3MGUzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rmlyc3QgRnJpZW5kc2hpcCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1ZmJiMGEyNjhlNTQ3MmE5YThhZDg4NDFjOGZhNmI2LnNldENvbnRlbnQoaHRtbF8zNDMzMTcwYmRkZDI0YmRkOTAyNjMzN2ViNzk3MGUzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84OTZlYjA0OGU5YjY0OWJkYThhYzJmNDMyNzNmYzdhMC5iaW5kUG9wdXAocG9wdXBfMTVmYmIwYTI2OGU1NDcyYTlhOGFkODg0MWM4ZmE2YjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4NDM1NzYxNmMzZjRlYzU4NWU3NDQ4NmY2NTc0ZWJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMjYwNjc3NiwgLTc2LjQ1OTI0OTI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyODI2NzYwODhjZDQ0MDQ4OGY1NDcxYzJkYjAyZmIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkZGI3NTJhYjQ0MTQwNGU4NTI1ODY1MzRhNzU3OWU0ID0gJChgPGRpdiBpZD0iaHRtbF9iZGRiNzUyYWI0NDE0MDRlODUyNTg2NTM0YTc1NzllNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHJpbml0eSBMdXRoZXJhbiBDaHVyY2ggRm9vZCBQYW50cnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyODI2NzYwODhjZDQ0MDQ4OGY1NDcxYzJkYjAyZmIwLnNldENvbnRlbnQoaHRtbF9iZGRiNzUyYWI0NDE0MDRlODUyNTg2NTM0YTc1NzllNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zODQzNTc2MTZjM2Y0ZWM1ODVlNzQ0ODZmNjU3NGViZS5iaW5kUG9wdXAocG9wdXBfNTI4MjY3NjA4OGNkNDQwNDg4ZjU0NzFjMmRiMDJmYjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiNTE4OGIxOWEwYTRhNzU4ZTJlNzc0NWE4MzkxNTZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMjQ0NzQwNTIsIC03Ni40OTEwNDE0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZWRjYjQxNmNiZDU0NmYzODIxNTk5ZTdjMGUyN2E0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NTZmYmEyMjZkMTE0NmE5YjVkYzA1MjI3ODI4MjhlNCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTU2ZmJhMjI2ZDExNDZhOWI1ZGMwNTIyNzgyODI4ZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBNaXNzaW9uPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZWRjYjQxNmNiZDU0NmYzODIxNTk5ZTdjMGUyN2E0YS5zZXRDb250ZW50KGh0bWxfOTU2ZmJhMjI2ZDExNDZhOWI1ZGMwNTIyNzgyODI4ZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2I1MTg4YjE5YTBhNGE3NThlMmU3NzQ1YTgzOTE1NmEuYmluZFBvcHVwKHBvcHVwXzhlZGNiNDE2Y2JkNTQ2ZjM4MjE1OTllN2MwZTI3YTRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMzJiNmNjOTI2ZjM0YzM5YjJmM2E4YWU3ZWNiNjhjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjE5ODMyMTczLCAtNzYuNDk0NTE4NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDc2MDYzZjNiMTUzNDEyZDlkODU1YTk1ZTc5NWVlYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDY1ZDc5MWQyMDFhNDE5MmIxY2IxODIzNzg2ZDU5YmYgPSAkKGA8ZGl2IGlkPSJodG1sXzA2NWQ3OTFkMjAxYTQxOTJiMWNiMTgyMzc4NmQ1OWJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gTWFyayBCcmVhZCBvZiBMaWZlIEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzYwNjNmM2IxNTM0MTJkOWQ4NTVhOTVlNzk1ZWVjNC5zZXRDb250ZW50KGh0bWxfMDY1ZDc5MWQyMDFhNDE5MmIxY2IxODIzNzg2ZDU5YmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjMyYjZjYzkyNmYzNGMzOWIyZjNhOGFlN2VjYjY4YzIuYmluZFBvcHVwKHBvcHVwXzQ3NjA2M2YzYjE1MzQxMmQ5ZDg1NWE5NWU3OTVlZWM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYjAwY2U3MDY3OTQ0MGM1YTc4MzBkZjJiODNiMDFkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjI2MTc4MDE3LCAtNzYuNDYyNTUxOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGU5MTAzM2E0MTFmNGQ3MThlYTFmMjBmNjcyZWQ5ZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjA3OTU3ODUzMDgxNGQyNWI5ZjE0ZTBmYzU1NDg5MjQgPSAkKGA8ZGl2IGlkPSJodG1sX2YwNzk1Nzg1MzA4MTRkMjViOWYxNGUwZmM1NTQ4OTI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib3BlOiBDaHVyY2ggb2YgdGhlIEFzY2Vuc2lvbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGU5MTAzM2E0MTFmNGQ3MThlYTFmMjBmNjcyZWQ5ZjAuc2V0Q29udGVudChodG1sX2YwNzk1Nzg1MzA4MTRkMjViOWYxNGUwZmM1NTQ4OTI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NiMDBjZTcwNjc5NDQwYzVhNzgzMGRmMmI4M2IwMWRkLmJpbmRQb3B1cChwb3B1cF80ZTkxMDMzYTQxMWY0ZDcxOGVhMWYyMGY2NzJlZDlmMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWY0ODkzNmU0NjdjNDUxNGFlNGIxMDFlN2I2OGE4NDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4yODE4OTIxOSwgLTc2LjQ3MDU4ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTg3YjFjYzE3MjQxNGQ3OGE1N2ZjMTkwOGNiNjFlOGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmNlMDc5ZTVkNmEzNDc2Yjk5ODczOTBmNjFhMGY4OTEgPSAkKGA8ZGl2IGlkPSJodG1sXzJjZTA3OWU1ZDZhMzQ3NmI5OTg3MzkwZjYxYTBmODkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JbW1hY3VsYXRlIEhlYXJ0IG9mIE1hcnk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4N2IxY2MxNzI0MTRkNzhhNTdmYzE5MDhjYjYxZThmLnNldENvbnRlbnQoaHRtbF8yY2UwNzllNWQ2YTM0NzZiOTk4NzM5MGY2MWEwZjg5MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZjQ4OTM2ZTQ2N2M0NTE0YWU0YjEwMWU3YjY4YTg0OC5iaW5kUG9wdXAocG9wdXBfZTg3YjFjYzE3MjQxNGQ3OGE1N2ZjMTkwOGNiNjFlOGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxN2QyMGM0YmI0ZDRiMDA4YmY5M2MzNjI5ZDJkYTA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNDQzNDgzNzYsIC03Ni43NDg0NTI5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzNkYjdlNCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hNzczN2QzMjQwZmY0YmQzODg5ZjM3ZTgyYjE5M2M5Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNDRlNzZjZjNlMTc0MTQwYTY2YWI1ZmY5MzljZGE4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iODY4NmI0YjA4Zjg0YjJmODI2OGM0NzhmOTlmM2Y2NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjg2ODZiNGIwOGY4NGIyZjgyNjhjNDc4Zjk5ZjNmNjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhlbHBpbmcgSGFuZHPCoEZvb2QgUGFudHJ5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNDRlNzZjZjNlMTc0MTQwYTY2YWI1ZmY5MzljZGE4Yy5zZXRDb250ZW50KGh0bWxfYjg2ODZiNGIwOGY4NGIyZjgyNjhjNDc4Zjk5ZjNmNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDE3ZDIwYzRiYjRkNGIwMDhiZjkzYzM2MjlkMmRhMDYuYmluZFBvcHVwKHBvcHVwX2E0NGU3NmNmM2UxNzQxNDBhNjZhYjVmZjkzOWNkYThjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMTljMDRkNDA5N2I0MDU2Yjc4ZTIyOTg4MDU2MWRkMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjI2MTkwOTk3LCAtNzYuNDU0OTEwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzMzODhmZiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzZGI3ZTQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjRhODQyYTJlZDExNDM4NzkzMzJiYzE5NmNhNWFjZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQ3MmNjZGNhMGM5NGU0ZjhhZTJiNjY4M2Y3Yzc1MWEgPSAkKGA8ZGl2IGlkPSJodG1sX2E0NzJjY2RjYTBjOTRlNGY4YWUyYjY2ODNmN2M3NTFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZXhpbmd0b24gUGFyayBCYXB0aXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjRhODQyYTJlZDExNDM4NzkzMzJiYzE5NmNhNWFjZTcuc2V0Q29udGVudChodG1sX2E0NzJjY2RjYTBjOTRlNGY4YWUyYjY2ODNmN2M3NTFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QxOWMwNGQ0MDk3YjQwNTZiNzhlMjI5ODgwNTYxZGQxLmJpbmRQb3B1cChwb3B1cF9iNGE4NDJhMmVkMTE0Mzg3OTMzMmJjMTk2Y2E1YWNlNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRhODA3MzIxMWI3NGI2ZTljZTE5YzQzMWE5YzBkMzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4yNTE5NTU1NiwgLTc2LjQzMDYwODYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0MTcwYmQ1YzJkZTQ1ODFiMzYyZTk2ZTkzZDljYzNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhMmY1MDgyNTFhMDQ0YjI4YzdmZjRlMzZkMzgxYWFiID0gJChgPGRpdiBpZD0iaHRtbF8xYTJmNTA4MjUxYTA0NGIyOGM3ZmY0ZTM2ZDM4MWFhYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WmlvbiBVbml0ZWQgTWV0aG9kaXN0IENodXJjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTQxNzBiZDVjMmRlNDU4MWIzNjJlOTZlOTNkOWNjM2Muc2V0Q29udGVudChodG1sXzFhMmY1MDgyNTFhMDQ0YjI4YzdmZjRlMzZkMzgxYWFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0YTgwNzMyMTFiNzRiNmU5Y2UxOWM0MzFhOWMwZDMxLmJpbmRQb3B1cChwb3B1cF81NDE3MGJkNWMyZGU0NTgxYjM2MmU5NmU5M2Q5Y2MzYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQyNzM2MDcxMjllNDVmMzlhZTY4NTI3MWE5NTM0YjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4xODg5NzY3NSwgLTc2LjQxOTI5MjY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMzMzg4ZmYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjM2RiN2U0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2E3NzM3ZDMyNDBmZjRiZDM4ODlmMzdlODJiMTkzYzkyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmMDBjNzk0OGJhYzRkYWViNTA2MTgxZWE4YTMxNDZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljZGE4MjEwOGFhNDQ3YTVhMjk0MmM0NzNlZjA5MjA3ID0gJChgPGRpdiBpZD0iaHRtbF85Y2RhODIxMDhhYTQ0N2E1YTI5NDJjNDczZWYwOTIwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIENlY2lsbGlh4oCZcyBDYXRob2xpYyBDaHVyY2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmMDBjNzk0OGJhYzRkYWViNTA2MTgxZWE4YTMxNDZhLnNldENvbnRlbnQoaHRtbF85Y2RhODIxMDhhYTQ0N2E1YTI5NDJjNDczZWYwOTIwNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZDI3MzYwNzEyOWU0NWYzOWFlNjg1MjcxYTk1MzRiNC5iaW5kUG9wdXAocG9wdXBfNWYwMGM3OTQ4YmFjNGRhZWI1MDYxODFlYThhMzE0NmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBoZWF0X21hcF84MmNjYmM5YTU5NDI0YWEzOWQ3MTdlYzRjNjIyYTJhOCA9IEwuaGVhdExheWVyKAogICAgICAgICAgICAgICAgW1szOS4wMTk3MjEzOCwgLTc3LjA1NjczMTM2XSwgWzM4LjgxNzI0MywgLTc2Ljk5MDM1Nl0sIFszOS4wMTkwOTUxNCwgLTc2Ljk5MTU1MzU5XSwgWzM5LjAyNDYyNzAxLCAtNzcuMTQ5Mjg3MjldLCBbMzguODkwNzU2NDEsIC03Ni44ODk3NDI0MV0sIFszOS4xODMyODc1OSwgLTc3LjIxNDYzNTM4XSwgWzM5LjAwMjUyMDE1LCAtNzcuMjEyODQxMTVdLCBbMzguOTg4OTQ1LCAtNzYuODI0OTEzNV0sIFszOS4wMjg2MjYsIC03Ni45MTc2NzY1XSwgWzM5LjAzMTM1NDY5LCAtNzcuMDQ4MTk1MjldLCBbMzkuMDI2MTE1MDAwMDAwMDA0LCAtNzYuOTA4MzM5XSwgWzM4Ljk4NTU2MSwgLTc2LjgyMjc2N10sIFszOC45ODU2OTYwMDAwMDAwMDQsIC03Ni44MjE1MDI1MDAwMDAwMV0sIFszOC43NDE3MzMsIC03Ni45OTI2NzhdLCBbMzkuMDM1MTc3MjcsIC03Ny4wMzYyMDU3NV0sIFszOC43OTQ4NDE5OTk5OTk5OTYsIC03Ni45ODkzNTI1XSwgWzM5LjAzNDA3OTk5OTk5OTk5NiwgLTc2Ljk0NDMwNzVdLCBbMzkuMDM2OTQ5LCAtNzcuMDUxMTU0MTNdLCBbMzkuMDM2OTI4MTEsIC03Ny4wNDQyMzQxNl0sIFszOC45MDM4MTQwMDAwMDAwMDQsIC03Ni45MTM0NDJdLCBbMzkuMDE4MjAwMzMsIC03Ny4wMjkwNTM0OV0sIFszOS4wOTM0NzI1LCAtNzcuMTM1OTE1MjhdLCBbMzguNzM5NTczLCAtNzcuMDAwMDMxXSwgWzM5LjAzNjI5MDYsIC03Ny4wMjc5MjYzNF0sIFszOS4wNDMwNzEwMDAwMDAwMDUsIC03Ni45MTgwNDFdLCBbMzkuMDAxODg2OTk5OTk5OTk2LCAtNzYuODc2MzcwOTk5OTk5OTldLCBbMzkuMDUyNDI4OTQsIC03Ni45NjkxMzIzNV0sIFszOC44NzIwMzUsIC03Ni44OTU3NTI1XSwgWzM4LjcyMjg3OCwgLTc2Ljg5MzA4ODVdLCBbMzkuMDU2MDIwMjMsIC03Ny4wNDk5MjgxM10sIFszOS4wNTYwMjAyMywgLTc3LjA0OTkyODEzXSwgWzM4LjcyMDU5MTk5OTk5OTk5NiwgLTc2Ljk4NTIxN10sIFszOC44NzM5NDA4MSwgLTc2LjkyOTMwMDEzXSwgWzM5LjA2MjM0MjEzLCAtNzYuOTk4ODYyODFdLCBbMzkuMDYzOTU5NTQsIC03Ni45NDUwMzc4N10sIFszOS4wNjM3NTQ3OSwgLTc3LjA5NjAyNzY3XSwgWzM4Ljg3MzQ1NywgLTc2LjkyODU5MzVdLCBbMzguOTYzMjIzLCAtNzYuNzI4OTE1XSwgWzM5LjAwODM0OSwgLTc2Ljc4MTQ3OTVdLCBbMzkuMDEwMDI4Mzk5OTk5OTk2LCAtNzYuNjk4ODE2OTRdLCBbMzguOTk3NTAxNSwgLTc3LjAzMTU0NDEyXSwgWzM5LjA4OTc3ODExLCAtNzcuMTA0ODEwMzZdLCBbMzguNjYwNDM2LCAtNzYuNzcyMzQ0NDk5OTk5OTldLCBbMzguOTkzMDg1LCAtNzYuNzIzNjgxNV0sIFszOS4wNzc1NjgsIC03Ni44NDc0NDk1XSwgWzM5LjA4MDQxODYxLCAtNzcuMDQ3MDc4NDhdLCBbMzguNzAxOTYyLCAtNzYuODcxMTA2MDAwMDAwMDFdLCBbMzguOTk2ODUxMTUsIC03Ny4wMzMxNzY5N10sIFszOC45NTcwODUsIC03Ni45ODUyNTc0OTk5OTk5OV0sIFszOC44NzE5MzYsIC03Ni44ODg5OF0sIFszOC45ODc3MDMsIC03Ni45ODE3N10sIFszOC44MTQzMjcsIC03Ni43NTMxMzRdLCBbMzguOTkyODc4MDAwMDAwMDA1LCAtNzYuOTgxNjE3XSwgWzM5LjA0NTE3MDIxLCAtNzcuMDMxMzgzNzVdLCBbMzkuMTAyNzM4MjUsIC03Ni45OTc4NTI5NF0sIFszOS4xMDQ5NzQ4MiwgLTc3LjAwMjU3ODAyXSwgWzM5LjEwOTYzNzMxLCAtNzYuOTM1MDIyNzFdLCBbMzguOTI3NzI3MDAwMDAwMDA0LCAtNzYuNzMxNTE2XSwgWzM4LjY3MDAyMTAwMDAwMDAwNiwgLTc3LjAwNjA2MV0sIFszOS4xMTYwODkyNywgLTc3LjA1MjI2MzA5XSwgWzM4LjY3MDYwNTA2LCAtNzcuMDEyNjg5ODRdLCBbMzguODg0ODQzODEsIC03Ni43MzA5NTU0Ml0sIFszOS4xMTY5Mjc4OSwgLTc3LjE2MDgyOTQ0XSwgWzM5LjAxMDU4ODA2LCAtNzYuOTgxNzI5NzNdLCBbMzguOTQwNzY4LCAtNzYuNzI1MjI1XSwgWzM5LjEyMTMwNjI3LCAtNzcuMTU4OTE1MDNdLCBbMzkuMDQ2NTg3NTgsIC03Ni45NzcxMjA0N10sIFszOS4xMzYzOTk4NSwgLTc3LjIwNjM5NjQyXSwgWzM4Ljg2NTMyMSwgLTc2LjkyMzU4MDVdLCBbMzkuMTU0OTU1OTksIC03Ny4xOTcyMzAyXSwgWzM4LjkxNDQ1MTc1LCAtNzYuODgyMDE5NzFdLCBbMzkuMTY3ODkwNDUsIC03Ny4xNzI2MTA3XSwgWzM5LjA2NDI4NzE0LCAtNzcuMDM5NDIyMzhdLCBbMzkuMDQwMDA4NTQsIC03Ny4wNDM0MzU5OF0sIFszOS4xNzQyODE5MywgLTc3LjIwNjExMDQxXSwgWzM5LjE3ODk1OTU2LCAtNzcuMDk5NzM2M10sIFszOS4xMzgyMzE5NiwgLTc3LjE5NDUyNDYyXSwgWzM5LjAyMDk0MjkxLCAtNzcuMDA1NTA2MDAwMDAwMDFdLCBbMzguOTE4MzAxMiwgLTc2Ljg4ODA1MTY2XSwgWzM4LjkxNzI4NDE2LCAtNzYuODQzNzM1NDhdLCBbMzkuMTg0ODE4OSwgLTc3LjI0Njc1MTk0XSwgWzM4LjkxOTA1MDU3LCAtNzYuODg3NTM3OThdLCBbMzguODYxMjcxLCAtNzYuOTMzNDcxNV0sIFszOC44OTE1MjksIC03Ni45MDkxOTRdLCBbMzguODkxNTI5LCAtNzYuOTA5MTk0XSwgWzM5LjA1NDg3MzA0LCAtNzYuOTY5OTM3NTJdLCBbMzguOTk4Njc0LCAtNzYuODc0NDM2XSwgWzM5LjA2NzI1NjIxLCAtNzcuMTIyNDE0ODRdLCBbMzkuMTQxMTk1NTksIC03Ny4xOTk2NTE0M10sIFszOC44NTgwNjcsIC03Ni44ODk1NjVdLCBbMzkuMDc3NTU2MzEsIC03Ni45NTk5NzY3N10sIFszOC44MTY2MTMwMDAwMDAwMDQsIC03Ni45NjUxODc1XSwgWzM4LjkyMzc1OCwgLTc2Ljg5NDAxNTUwMDAwMDAxXSwgWzM5LjAwMDUwMSwgLTc2Ljg3NzQ1MTAwMDAwMDAxXSwgWzM4Ljg4NjMyNywgLTc2LjkxMjA5NjQ5OTk5OTk5XSwgWzM4LjkyMTU4LCAtNzYuOTI5Mzk0NV0sIFszOS4wNzcwNjI0MywgLTc2Ljk1ODU4NjE5XSwgWzM5LjAwMjU4MzY0LCAtNzYuOTYzNzMyNzFdLCBbMzguOTI2NzM3LCAtNzYuODA2MDcyXSwgWzM4LjkzMTYwNiwgLTc2LjgwNjQ3N10sIFszOS4wOTg0NTcsIC03Ni44NTA2MjJdLCBbMzguOTQ5OTMsIC03Ni45NjY3NDldLCBbMzkuMTAxODUsIC03Ni44NDc3MDE1XSwgWzM4Ljg1MDYyMzk5OTk5OTk5NiwgLTc2Ljk1MzZdLCBbMzguOTMyMDYzOTYsIC03Ni44ODg3Mzg1MV0sIFszOC44MDI1NTUsIC03Ni45NTI5ODhdLCBbMzkuMDE5NDQ4MTIsIC03Ny4wMTI2OTI5M10sIFszOC44NDUwNzk1NSwgLTc2LjkwNTM4OTE3XSwgWzM5LjAzNjQ2NSwgLTc2Ljk0OTEyN10sIFszOC45MzE3NjQwNCwgLTc2Ljg3NzAzNDIyXSwgWzM4LjkzMTAxMTc5LCAtNzYuODgwNjQ3NjVdLCBbMzguOTM1NDk0LCAtNzYuODU4ODAzMDAwMDAwMDFdLCBbMzguOTM0ODM3LCAtNzYuOTYyNTg2NV0sIFszOC44NDA0NzAxMSwgLTc2Ljk0NzQ5NzY3XSwgWzM4LjkzNDcwMiwgLTc2Ljk2MDAwMzVdLCBbMzguODM2Mzk1LCAtNzYuNzc0NzA2OTk5OTk5OTldLCBbMzguNjA3NDk5OTUsIC03Ni45MjU4MTQ3MV0sIFszOC45Mzc2ODEsIC03Ni45MzYzNDddLCBbMzguODM2MDUwNjgsIC03Ni45NDA0Njg1M10sIFszOC44MzYwNTA2OCwgLTc2Ljk0MDQ2ODUzXSwgWzM5LjAzMTc3MDk4LCAtNzcuMDc5NTkyMDNdLCBbMzguOTM4MjE2NTksIC03Ni45MzYxMTM4MV0sIFszOC45ODczMTYsIC03Ni45NDQ2NTg1XSwgWzM4LjkzODQwMSwgLTc2Ljk2MTY3NzUwMDAwMDAxXSwgWzM4Ljg5NTk3NSwgLTc2Ljg4ODQ1MzVdLCBbMzguODY0MTk0OTcsIC03Ni45NDU3NDQ1OF0sIFszOC45NDM5MDkwMDAwMDAwMDUsIC03Ni45NTE5NDg1XSwgWzM4Ljg5NDk2MjkzLCAtNzYuODUxMjYwMjNdLCBbMzguODQwODc3LCAtNzYuOTM5MDMzNV0sIFszOC44ODM1OTA5OTk5OTk5OTYsIC03Ni44OTYyODhdLCBbMzguOTM5NDI3LCAtNzYuOTI2NjQ5NV0sIFszOC44MTY0OTYsIC03Ni45MzcwODA1MDAwMDAwMV0sIFszOC45NDAxMDE1NSwgLTc2Ljk2MTMxNDU2XSwgWzM4Ljg2MzQ5NCwgLTc2Ljk0MjAzOTVdLCBbMzguOTM5OTc2LCAtNzYuOTQ5MDQxNV0sIFszOS4wMDg0MTc5MywgLTc2Ljk5ODU1NTY4XSwgWzM4Ljk0MjM1MiwgLTc2LjkxNzg5MjUwMDAwMDAxXSwgWzM4Ljc5OTk1NCwgLTc2LjkzNTQyNDVdLCBbMzguOTQzODgyLCAtNzYuOTE0MDQ5NV0sIFszOC45NDI0MDYsIC03Ni45NTgxMDldLCBbMzguOTQ3MjkyMTgsIC03Ni44MDU2MDIxXSwgWzM4Ljg5NTI5NTExLCAtNzYuODUxMzQ0NzVdLCBbMzkuMTQwNDUwNTEsIC03Ny4yMDk4MjA5OTk5OTk5OV0sIFszOS4wMzg2ODgsIC03Ni45MTg1Njc1MDAwMDAwMV0sIFszOC45NDYzNjYsIC03Ni45MTE4MDg0OTk5OTk5OV0sIFszOC44MDQyOTIsIC03Ni45MzIyNjFdLCBbMzguOTQ1OTk3LCAtNzYuODg5ODMwNV0sIFszOC44MzA0ODE0OSwgLTc2LjkzMjE5MTk1XSwgWzM4Ljk0NTU0NywgLTc2LjkxNzQ0MjVdLCBbMzkuMDM1NzgxLCAtNzYuOTEzNzQzNTAwMDAwMDFdLCBbMzguOTQ0MDYyLCAtNzYuOTc0MjE4OTk5OTk5OTldLCBbMzkuMDg1MTQyODMsIC03Ny4wOTA5NjE5NF0sIFszOC45NTMzMDUsIC03Ni44MzA2MTUwMDAwMDAwMV0sIFszOC45NTk4MywgLTc2LjkzNDkyOTUwMDAwMDAxXSwgWzM4Ljk5MTUxLCAtNzYuOTMxODUxNTAwMDAwMDFdLCBbMzguODczNDg0MDAwMDAwMDA1LCAtNzYuOTMyOTYzXSwgWzM4Ljk5ODAxNywgLTc2LjkyNzk5OTVdLCBbMzguODIzMjYwMTcsIC03Ni45NTAyMjczNF0sIFszOC44MjMyNjQsIC03Ni45NDA1NDU1XSwgWzM4LjgyMzAzOSwgLTc2Ljk0MDA1NV0sIFszOC44MjE2OTgsIC03Ni45Njg4MTQ1MDAwMDAwMV0sIFszOC44MTgzMzIsIC03Ni45NDkzMzg1XSwgWzM4Ljk1MDIxOCwgLTc2Ljk0MjY0N10sIFszOC44ODM3MTk5NCwgLTc2LjgzMjM1NTg3XSwgWzM4Ljg0OTU5OCwgLTc2LjkyMDk3OTVdLCBbMzkuMTA3MzMxLCAtNzYuODQ5OTQ3XSwgWzM4Ljk5MTM4MzQzLCAtNzcuMDExODQzN10sIFszOC44ODI2NjQsIC03Ni44NTE5MTgwMDAwMDAwMV0sIFszOC44ODM1MTksIC03Ni45MTE2NjQ1XSwgWzM5LjA5NTQ5ODc5LCAtNzcuMTU4NjAwNzhdLCBbMzguODUxMzA4LCAtNzYuOTE5NTg0NV0sIFszOC45NDg3NjksIC03Ni44NTQ5Mzc1XSwgWzM4Ljg2OTA5MTk5OTk5OTk5NSwgLTc2LjkxODk1NDVdLCBbMzkuMDY2MjEzMjEsIC03Ny4wMjA1NTI2Ml0sIFszOC44NTIyNDk2MSwgLTc2LjkxNzQ3Mjc2XSwgWzM4LjkzNjYwOTk5OTk5OTk5NSwgLTc2LjkyNzMwMl0sIFszOS4wNjY1MzE5MSwgLTc3LjAyMDE3MTAyXSwgWzM5LjA5NzIzMTU1LCAtNzcuMTA3MjQxNzVdLCBbMzguOTU1MTQxLCAtNzYuOTQwODc0XSwgWzM4Ljk5MzQ5LCAtNzYuOTIxNDYxXSwgWzM4Ljg2MjYxMiwgLTc2LjkxMzQ0NjQ5OTk5OTk5XSwgWzM4Ljg1MjAxLCAtNzYuOTEyMjgxMDAwMDAwMDFdLCBbMzguODYxMDY0LCAtNzYuOTEwMzk1NDk5OTk5OTldLCBbMzguODExNTU1LCAtNzYuODM3NTcyXSwgWzM4Ljk1OTAzOCwgLTc2LjkyMjY2N10sIFszOC45NTg1MjUsIC03Ni45OTI4MzU1XSwgWzM4Ljk2MDA4Mjg5OTk5OTk5NiwgLTc2Ljk4NjEyMDk1XSwgWzM4Ljg5NjY5NSwgLTc2LjkwNzkyOTUwMDAwMDAxXSwgWzM4Ljg5NjY5NSwgLTc2LjkwNzkyOTUwMDAwMDAxXSwgWzM4Ljk1ODM0NSwgLTc2Ljk0NTg0NjVdLCBbMzguODAwNDEzLCAtNzYuOTA2NDMxMDAwMDAwMDFdLCBbMzguOTQ3MjIxLCAtNzYuOTExMTE1NTAwMDAwMDFdLCBbMzguODg1MjExLCAtNzYuOTEzODgzXSwgWzM4Ljk1MjU1OCwgLTc2LjkxNDUxNzVdLCBbMzguODA2Nzg1LCAtNzYuOTU4MjM1XSwgWzM4Ljk2NDkwMjQyLCAtNzYuODY0NDA1NTRdLCBbMzguODkzMDk1LCAtNzYuOTAyMjI4MDAwMDAwMDFdLCBbMzguODg0ODI5OSwgLTc2LjkxMzI3MTk2XSwgWzM4Ljg4NDg0NDEzLCAtNzYuOTEyNTcwMTldLCBbMzguODg0ODQ0MTMsIC03Ni45MTI1NzAxOV0sIFszOC45NjI2MTEyNywgLTc2Ljk4NDg3NDE5XSwgWzM5LjAwNjA3MTk5OTk5OTk5NiwgLTc2LjkwMjgyNjVdLCBbMzguOTY0MTA0OTk5OTk5OTk2LCAtNzYuOTg3MTY5OTk5OTk5OTldLCBbMzguOTY0ODk3LCAtNzYuOTg0NzMxMDAwMDAwMDFdLCBbMzguODc5MzU4ODEsIC03Ni43MzA1MTgwMl0sIFszOC45NjcyODIsIC03Ni44ODE0NjA1XSwgWzM4Ljk2NzI4MiwgLTc2Ljg4MTQ2MDVdLCBbMzguODg2MTg0MDMsIC03Ni45MDMzMzA3N10sIFszOC45NjUwODYsIC03Ni45MTA4OTA1MDAwMDAwMV0sIFszOC45NjQ3NjIsIC03Ni45NTE3OTFdLCBbMzguOTYwMzYxLCAtNzYuOTExNzA5NV0sIFszOC45NjYwNTgwMDAwMDAwMDQsIC03Ni45ODYxNTc0OTk5OTk5OV0sIFszOC45NjQ4MzQsIC03Ni45MTc5OTE1XSwgWzM4LjgwMTE4NywgLTc2Ljk4NjI1MjAwMDAwMDAxXSwgWzM4Ljk2ODAxMSwgLTc2Ljk3MDczNl0sIFszOC44MDE3OTksIC03Ni45ODQ2MjNdLCBbMzguOTgwMzU5LCAtNzYuNzU3Mjg3NV0sIFszOC44NDA2NjE0NywgLTc2Ljg5NDgxMTMxXSwgWzM4Ljg2MTA1NSwgLTc2Ljg5MjQyN10sIFszOC43OTg1NTk1MiwgLTc2Ljk4MjA4NzM0XSwgWzM4Ljg1MTg2Nzc1LCAtNzYuODkxNDYzNjFdLCBbMzguNzk2MjU1LCAtNzYuOTc5MzEzXSwgWzM4Ljg2ODQ3MSwgLTc2Ljg5MDQ0MjVdLCBbMzguODY4NDcxLCAtNzYuODkwNDQyNV0sIFszOC44Njk0ODgsIC03Ni44OTA4NTJdLCBbMzguOTAwOTE1OTk5OTk5OTk1LCAtNzYuOTAzNTE5NV0sIFszOC45NTc2NDMsIC03Ni44OTgxNTU1XSwgWzM4Ljk3NzAwODc1LCAtNzYuOTkyMzMxMDRdLCBbMzguOTc1MDg3NzcsIC03Ny4wMTA0NDg0M10sIFszOC45NzUwODc3NywgLTc3LjAxMDQ0ODQzXSwgWzM5LjAwOTEyNjA0LCAtNzYuOTg0MDY1MjJdLCBbMzkuMDA4NDg1NzMsIC03Ni45ODQxMzkyM10sIFszOC44NTkwMjEwMDAwMDAwMDYsIC03Ni44ODA4OTM1XSwgWzM4Ljc4ODgxMiwgLTc2Ljg0MDU1MV0sIFszOC45NjE0OTUsIC03Ni44ODU4NDhdLCBbMzguOTg0MjEzMjQsIC03Ni45ODg1MTY0Ml0sIFszOC45NDgxOTQxMSwgLTc2Ljg4NTY2MTQ1XSwgWzM4Ljk4Mjc5Nzk5OTk5OTk5NSwgLTc2Ljk1NDA1NDVdLCBbMzguOTAyNjE3LCAtNzYuODc3NzYxNV0sIFszOC45OTM0NjMsIC03Ni44MjAxMzldLCBbMzguOTQ4ODg2LCAtNzYuODg1NjA1XSwgWzM4Ljk4MzYyNTI1LCAtNzcuMDIwMjQ4NDhdLCBbMzguNzAxMDcxLCAtNzYuODc0NTQ0XSwgWzM4Ljk4NzEwNzYyLCAtNzcuMDk2MDI0OTddLCBbMzguOTgwODA5LCAtNzYuODcxMDI5NV0sIFszOC45MTg2ODkyLCAtNzYuODcxNTg4OV0sIFszOC45MTI3NjY1OSwgLTc2Ljg3MTU0MjQ3XSwgWzM4Ljg0MjMyMDUsIC03Ni44NzA4MjM4NV0sIFszOC44NDcxODAwNSwgLTc2Ljg3MjAyNDg3XSwgWzM4Ljg4OTEyODIyLCAtNzYuODcxNjYwMzJdLCBbMzguODQ3MTUzMTEsIC03Ni44NzE2NDU3NV0sIFszOS4wODA5NzksIC03Ni44NjgyMjE0OTk5OTk5OV0sIFszOC44NDYzNDksIC03Ni44Njg1MzJdLCBbMzguOTIxNTA0NzEsIC03Ni44Njk4OTk4XSwgWzM5LjE2OTc2Nzk1LCAtNzcuMTYxNzA4NjFdLCBbMzguODMzNDYxLCAtNzYuODY2NzU5XSwgWzM4Ljg0ODQ4OTU1LCAtNzYuODY3OTI3Ml0sIFszOS4wMzE0MzYzMiwgLTc3LjAyMjE1NDFdLCBbMzguOTAwNTk4MzUsIC03Ni44NTMyMjM5N10sIFszOC45OTAzNjUzOSwgLTc3LjAyNjY4Nzg5XSwgWzM5LjE1NjA2ODI3LCAtNzcuMjExMjAzMThdLCBbMzguOTAyMTU4LCAtNzYuOTA1NzY1XSwgWzM4Ljk2NTYxNywgLTc2Ljk5MzM4OTAwMDAwMDAxXSwgWzM4Ljk5NTcxMzE2LCAtNzcuMDIzNzM3OTddLCBbMzguNzc0MzU4LCAtNzcuMDEzOTU0XSwgWzM4Ljk3OTI3ODg3LCAtNzYuODYyNjc0MzRdLCBbMzguODMzNTE1MDAwMDAwMDA2LCAtNzYuODYyNzQwNV0sIFszOC45NDAyOTA1MiwgLTc2Ljg2MjE4ODQwMDAwMDAxXSwgWzM4Ljk5OTQ3NSwgLTc2Ljk4MjQ0OTVdLCBbMzkuMDg4NTIxLCAtNzYuODUyMzQ1NV0sIFszOC44NzQ4ODgsIC03Ni44NTM3NjNdLCBbMzguODY4ODMzNTMsIC03Ni44NTI2OTU1OF0sIFszOC45MzQ5MDI2MywgLTc2Ljg1ODAyNjY5XSwgWzM4Ljk5OTc0MzQ4LCAtNzYuOTkzOTUzMTFdLCBbMzguOTk5NzQzNDgsIC03Ni45OTM5NTMxMV0sIFszOS4wMDAwNjA3MiwgLTc2Ljk3Mzg4Nzk4XSwgWzM4Ljg4MTkyNiwgLTc2Ljg1MTk4MTAwMDAwMDAxXSwgWzM5LjAwMTY2MTYxLCAtNzYuOTcyMzUxNzFdLCBbMzkuMTQzMTAwOTcsIC03Ny4yMDI0MzcxNl0sIFszOS4wODMyODQzNywgLTc3LjE0ODk0NzcwMDAwMDAxXSwgWzM5LjA3OTA3MSwgLTc2Ljg0NDA4OF0sIFszOC43NjYxMzIsIC03Ni44Mjg3NTY1XSwgWzM4Ljk0ODIxMSwgLTc2Ljg0OTI0NV0sIFszOC44NzcyMzcsIC03Ni44OTQ0Mjk1XSwgWzM5LjAyNzM0MTM2LCAtNzYuOTkwODg2MjJdLCBbMzguOTY0NDgzLCAtNzYuODUzMDc0NV0sIFszOS4wMDcyNDIsIC03Ni45MzAyNDVdLCBbMzkuMTE3Nzg1Mjk5OTk5OTk0LCAtNzcuMTkyMDQ2OTVdLCBbMzkuMDA4NDA4NDMsIC03Ny4xNzQwNjgyOV0sIFszOC45NjUyNDc5OTk5OTk5OTUsIC03Ni44NDA5MzhdLCBbMzguOTY1MjQ3OTk5OTk5OTk1LCAtNzYuODQwOTM4XSwgWzM4Ljk2NTI0Nzk5OTk5OTk5NSwgLTc2Ljg0MDkzOF0sIFszOS4wODkxNzE1MSwgLTc3LjE1NDI1NDA0XSwgWzM4Ljc1OTAyMTk5OTk5OTk5NSwgLTc2LjkxNjU2MDVdLCBbMzguNzU5OTU4MDAwMDAwMDA1LCAtNzYuOTE3ODU2NV0sIFszOS4wOTI1MjMxNiwgLTc3LjE5Nzk4NzIyXSwgWzM5LjAxMjY0MiwgLTc2LjkyMjMyOTVdLCBbMzguNzU1ODE4LCAtNzcuMDAwODA1XSwgWzM4Ljc1NDk4MSwgLTc3LjAxNTQ2MTVdLCBbMzguNzUzODczOTk5OTk5OTk2LCAtNzYuOTIyNDAxNV0sIFszOC45ODk2MDIwMDAwMDAwMDUsIC03Ni44Mzc4MTA1XSwgWzM5LjAxNjU4NCwgLTc2LjkyMDAzOV0sIFszOC44MjMyMDk5OTk5OTk5OTYsIC03Ni45NDgzOF0sIFszOS42Mzg2MTI2MywgLTc4Ljc2MDA1NzQ1XSwgWzM4Ljk4MjAzNjE2LCAtNzYuNTY2MTU1NjRdLCBbMzkuNTc1NTM2MDcsIC03Ni45OTQ0ODI3NF0sIFszOS42MjEzMjY2MSwgLTc3LjQxMjQxNTk4XSwgWzM4Ljk4NDA0NjE4LCAtNzYuNTMzNTI5MDddLCBbMzkuNjUxODUzMTIsIC03OC43NjIwNjc0Nl0sIFszOS40MjU3MTI1MywgLTc2Ljc3NjM0OTA2XSwgWzM5LjI4NzIwNDU3LCAtNzYuNjE0OTg1NzddLCBbMzkuNDQ1MzcxODQsIC03Ni42MjA2NTg3OF0sIFszOC43ODcwMzI0NywgLTc2LjIyNTQ3MzAyXSwgWzM5LjMwNTMzNDUzLCAtNzYuNjE3MTYyMDVdLCBbMzkuNjUxMjMxNzcsIC03Ny4xNzAyNzU0NF0sIFszOS4yODMxMjg4OSwgLTc2LjY3NjYxODIwMDAwMDAxXSwgWzM5LjI5ODg3Mjc0LCAtNzYuNjI2NDU0NTRdLCBbMzkuNDExNzA5NDUsIC03Ny40MTEyMjkxN10sIFszOS4yNzY0NDkxOCwgLTc2LjczOTUxNzQxXSwgWzM4LjU1OTgzMjc1LCAtNzYuMDczNTM3MjhdLCBbMzkuMjk0MDUzMjksIC03Ni40NTQzMDk5OV0sIFszOS4yOTYxMTM5NiwgLTc2LjYxNTU5NTg5XSwgWzM5LjU4OTQzNTI3LCAtNzcuNjU3ODg2MTNdLCBbMzguMzQ1NzU4MTcsIC03NS4yMTg1Njc2NF0sIFszOC4zNDU3NTgxNywgLTc1LjIxODU2NzY0XSwgWzM4Ljc5MTg2OTI2LCAtNzYuMDY2Mjg1NTNdLCBbMzkuMDU0MjY5NzUsIC03Ni41MTU5MTU0NF0sIFszOS4zMTc0MTQzNiwgLTc3LjYxMTU4Njk1XSwgWzM5LjY1Mzg4ODY2LCAtNzguOTM0MTk1NTRdLCBbMzkuNjQyMzQxMjYsIC03Ny43MjU1Mzk1MV0sIFszOS4yOTA2NTAwMiwgLTc2LjYwMjIwNTQ0XSwgWzM5LjQyOTgxODM0LCAtNzcuNDEyODA3NzRdLCBbMzkuMzAyODc5MzEsIC03Ni42MDQ5MjUwOF0sIFszOS4yOTE0OTMwMiwgLTc2LjYwNjAzMzU3XSwgWzM4LjQxMzI4MjI1LCAtNzUuMDU4MDc0MTldLCBbMzkuMzExODI5NTcsIC03Ni42MDA5OTA1OF0sIFszOS4zMDg5NTYyMSwgLTc2LjYxNDgzNzM2XSwgWzM5LjMxMTI5NDQ3LCAtNzYuNjEzNjcxNTddLCBbMzkuMzA4OTE2NDYsIC03Ni42MTI1NDU1M10sIFszOS40NzI4NTM4MSwgLTc2LjYzMDg2NjM0XSwgWzM5LjE2MTMwMDA1LCAtNzYuNjExODI3NDVdLCBbMzkuNDE1OTA2LCAtNzYuODAwMTQ0OTFdLCBbMzguMTc5ODY5ODEsIC03NS45MDE2ODgzM10sIFszOC45NDY0NzYxOSwgLTc1Ljg4MzcxODYxXSwgWzM5LjIxNDgyMDI2LCAtNzYuODc3MDEyNzhdLCBbMzguMTgwMDg5OTksIC03NS42ODU2NTQ5OV0sIFszOC45MDg4MTkyNSwgLTc1LjgzOTYyMzk4XSwgWzM5LjQwMjI2MDEsIC03OS4zODk2MTU4Nl0sIFszOS41NDM0MDY5NiwgLTc3LjAwMzU2NDg5XSwgWzM5LjMyNDEzMTkyLCAtNzcuNjI1MzY3MDldLCBbMzkuNDM5MjM2NDksIC03Ni4zNDAxOTIyNl0sIFszOS4zMDg1Mzk4NCwgLTc2LjQ1NTQwMDkzXSwgWzM4LjU1ODQ2Mzc2LCAtNzYuMDg5OTQ3ODldLCBbMzguMDY2OTgwODEsIC03NS41NTY1MDM0NF0sIFszOS4yODYyODI2MSwgLTc2LjU3NzE0MDFdLCBbMzkuNjE2MzgyMzMsIC03Ny44MTQwODU2M10sIFszOS4xMjYyNTgxMywgLTc2LjczNzkxNTg0XSwgWzM5LjM3NzEzOTc1LCAtNzYuNTczNDA3OTFdLCBbMzkuMjkzNTA3MDgsIC03Ni42MDY1MzM2NV0sIFszOC42MzQ4MDgxNSwgLTc1Ljg2NDI2MDc0XSwgWzM4LjM4NzU0NjY3LCAtNzUuMTg3MjIwMDFdLCBbMzkuNTA0NDUyMjgsIC03Ni4zODQ3MDQ3NF0sIFszOS40MzAxMTY3OSwgLTc2LjgxMjExNTU4XSwgWzM4LjE5Mzg1NDA3LCAtNzUuNjkwMzcwNl0sIFszOS42Mjc3MDMyMywgLTc3LjY2MjQ3NTkzXSwgWzM5LjcwMDM1NjM2LCAtNzguMTgxNTM4MTNdLCBbMzkuNTgyMjkzMzIsIC03NS45NzIxMDU2NF0sIFszOS40NTcxMzY1OCwgLTc2LjYzNzEyMjIwMDAwMDAxXSwgWzM5LjY0MTM3NDgyLCAtNzcuNzI0MTg1NzVdLCBbMzkuMDc1MTg2ODcsIC03Ni42ODY5MDMzOV0sIFszOS42MzYxNDM5MiwgLTc3LjY5MTc5NjM4XSwgWzM5LjU3NjM4MjI1LCAtNzcuMTc1Mjc5NDFdLCBbMzguMzI3OTUwNjQsIC03NS4wODc2NzQxNl0sIFszOS4yODk0NTM0MywgLTc2LjYwODkxOTIzXSwgWzM5LjQwMDg5MTE5LCAtNzYuNjA1ODAzNzNdLCBbMzkuMjU0NTM0NzYsIC03Ni42OTk0NTUxMV0sIFszOS4yOTU0ODcwNSwgLTc2LjYwMTc0Mzg4XSwgWzM4LjM0NjY0MDY0LCAtNzUuNTg4NTY0MjFdLCBbMzkuMzA0NjkyMzksIC03Ni42MDkzMTQ0OV0sIFszOS4yOTcwNzE1MywgLTc2LjYxMDI2MDI4XSwgWzM4LjM3MzM0MzM1LCAtNzUuNTc1NDEzODJdLCBbMzguNDUyMTA4OTcsIC03NS41NjE0OTU0NF0sIFszOC4zNDYyMDUyNCwgLTc1LjYwODU4NDA2XSwgWzM5LjYzOTE4NjMsIC03Ny43MTgxNzUxMl0sIFszOS4yOTgyMDQ1OSwgLTc2LjYxMDU2MDE2XSwgWzM5LjI5ODIwNDU5LCAtNzYuNjEwNTYwMTZdLCBbMzkuNTQwNDMyNjIsIC03Ni45OTQxMzg4M10sIFszOC4zMjY1MzM3NCwgLTc1LjIyMDAyMjczXSwgWzM5LjYzNzY3MDc5OTk5OTk5NSwgLTc3LjcxOTI0MDc2XSwgWzM5LjQyMjM0NzQzLCAtNzYuNzkzNTkxNTNdLCBbMzkuMTY5MTI4MTMsIC03Ni45NDc5Mjc3XSwgWzM5LjU3Mzg3NDQyLCAtNzcuNTUxMjI0OTAwMDAwMDFdLCBbMzkuMzI1ODk4MjIsIC03Ni40Mzc3MTgzMl0sIFszOS4yOTgyMDQ1OSwgLTc2LjYxMDU2MDE2XSwgWzM5LjI5ODIwNDU5LCAtNzYuNjEwNTYwMTZdLCBbMzguMjI0NTUxNTQsIC03NS42OTMwOTc5NF0sIFszOC43NzE5MzQ5OCwgLTc2LjA3ODg3NTY2XSwgWzM5LjY1Njc0Mzk3LCAtNzcuOTM1MzM5ODVdLCBbMzkuMjk4MjA0NTksIC03Ni42MTA1NjAxNl0sIFszOC4zMzE3MDAxOCwgLTc1LjEwNzUxNTM3XSwgWzM5LjQxMDE5NDYxLCAtNzcuNDUwMjEzODNdLCBbMzkuMzAwNzc2NDcsIC03Ni41ODc1NDM0NV0sIFszOS42NTg0MDA3NiwgLTc3LjczMTAyNDk4XSwgWzM5LjMwMDczNTU1LCAtNzYuNTg3MTExMDVdLCBbMzkuMjk3Nzg0NjYsIC03Ni41ODI4NTA2M10sIFszOS40NDIxNjU4LCAtNzcuMDQxODcyOThdLCBbMzkuMzA0ODQ3MTMsIC03Ni41NTM3MDQyM10sIFszOS4yOTY4MzYwNCwgLTc2LjU5NzQ2NzA4XSwgWzM5LjMwMzc5OTc1LCAtNzYuNTU0ODM3MDldLCBbMzkuMjk2NzM3LCAtNzYuNTk3NTI2NDFdLCBbMzkuNDMxNjQ4ODcsIC03Ni4zMjkxMDU4N10sIFszOC4zODc4NDA5NywgLTc1LjYxMTEyNTA2XSwgWzM4LjM4ODkxOTk4LCAtNzUuNjExMjU1MDFdLCBbMzguMzkxMDk4OTIsIC03NS42MDI1MjQ1N10sIFszOS4yOTgwMzk3MSwgLTc2LjU4NTExODg4XSwgWzM5LjYwOTkwOTg0LCAtNzUuODI4NTgyXSwgWzM5LjI5NzkxNDA1LCAtNzYuNTg3ODU2OTZdLCBbMzkuNjkxMjcyOTYsIC03Ny43OTA1NzMwM10sIFszOS4zNTY5OTA3MiwgLTc1Ljg1MjAwOTY0XSwgWzM5LjI3NDc4MTk4LCAtNzYuOTk2NDY0MjZdLCBbMzkuMDI2MTc5NDQsIC03Ni42MDA3ODU5NF0sIFszOS4zMzkxMTg5MiwgLTc2LjU1MjE1MTEzXSwgWzM5LjMzNTgwMTA5LCAtNzYuNTQ5MTA2NzNdLCBbMzkuMzIyMjQ5ODgsIC03Ni41NDUxNjgwMV0sIFszOS4yODMxMDM3OTk5OTk5OSwgLTc2LjQ5NjY0MzU1XSwgWzM5LjMzNzc0ODgyLCAtNzYuNTUyMjQ1OV0sIFszOC41NzkwMzI3NSwgLTc2LjA4OTI0NTczXSwgWzM5LjMzMTMyNzE5LCAtNzYuNTI5MjIyOTNdLCBbMzkuMzE4MjAyNTgsIC03Ni41NDAwMjAyNV0sIFszOS4zNTI2NjkzNCwgLTc2LjUzMzEyMjIwMDAwMDAxXSwgWzM4LjUxMDg1ODEyLCAtNzYuNjQ4MzA5MzVdLCBbMzguOTgzODM2NzksIC03Ni41MTM2Mjc0Nl0sIFszOS41MzQ2NDcyNSwgLTc2Ljk5NDY3Nzk2XSwgWzM5LjAxMzU4NTQyLCAtNzUuODkwMDc5MzNdLCBbMzkuNzE0Njc2NjYsIC03Ny40OTE1ODUwNl0sIFszOS42Mzc2MzUyMSwgLTc3LjQxMDU5Nzk0XSwgWzM5LjY0NTUwNDExLCAtNzcuNzE2NjEyMDhdLCBbMzkuMzMwMTgzNjYsIC03Ni42OTQ2MTE0OV0sIFszOS4zMzQ3Mzc3MiwgLTc2LjcwNTIwNjg0XSwgWzM5LjM3NjE5ODE2LCAtNzYuNzI2OTgxMjZdLCBbMzkuMzMxMzk5NTMsIC03Ni42ODQ1OV0sIFszOS4zMjU0NDAwMSwgLTc2LjQ1MTA0MzI3XSwgWzM5LjY0MTUzMjQ2LCAtNzcuNzIwNTQyMjddLCBbMzkuMzE1NTI2MTQsIC03Ni40NTAyNTI5OV0sIFszOS41MzAzMTE1MywgLTc2Ljk5Mzg2OTNdLCBbMzguMzk1NDgxNTEsIC03NS42MDQwODAyNF0sIFszOS4zMTE3NzU1NSwgLTc2LjcwMzc3NTI4XSwgWzM5LjM3OTAzNDM5OTk5OTk5NSwgLTc2LjcyNzU0MzgxXSwgWzM5LjY1MTkwOTU0LCAtNzcuODA4MjcxNDJdLCBbMzkuMzA1ODc5ODMsIC03Ni43MDkzODA0OV0sIFszOS4zMzM2MjY4NCwgLTc2LjcwMjU0NzU2XSwgWzM5LjM0ODU3MzQ2LCAtNzcuMDk2MjQxNjNdLCBbMzkuMDEyOTA4MywgLTc2LjY4MTI2MjMzXSwgWzM5LjY1NDM5NDA2LCAtNzcuNTcyNTQ1NzddLCBbMzkuMzcyNDA5NDk5OTk5OTk2LCAtNzYuNzAwODEyODldLCBbMzkuMzQ2MDY2OTUsIC03Ni42NTk1MDYwNV0sIFszOS4zNDY2MDk0MSwgLTc2LjY1ODE1MDExXSwgWzM5LjMzMDM4MzIxLCAtNzYuNjM3NTE2MDVdLCBbMzkuMzE5OTUzODEsIC03Ni42MjE0Njc3NF0sIFszOS4zNjAxNzkxNywgLTc3LjY3NjEwMDMyXSwgWzM5LjMzNzIxMjQ1LCAtNzYuNjI5MDM0MzhdLCBbMzguOTY4Nzk4MzMsIC03Ni41MTg5MTc1OF0sIFszOS40NTU2NzgwOSwgLTc3Ljc1ODA0NTQ3XSwgWzM5LjY5OTA5MjQ4LCAtNzcuNzQ2OTQwOTddLCBbMzkuMzQyNzA4NzksIC03Ni42MDc4NzgwM10sIFszOS4yOTM5NDM2LCAtNzYuNDE5NjQzOTZdLCBbMzkuMzQ0MTA1MjYsIC03Ni42MDk2MTg4OF0sIFszOS42OTA1MTgyNCwgLTc3LjczNjgyMDc5XSwgWzM4Ljk2OTQ2MzMzLCAtNzYuNTMwMjU5NDVdLCBbMzguMzg2MTM0MTYsIC03NS41NzQ3MDAxNF0sIFszOS4zNjY4MzY4MSwgLTc3LjY3MTE5MDQyXSwgWzM5LjM1NTc0NTAyLCAtNzYuNjA5ODU0OTRdLCBbMzkuMzI0MjM1NDgsIC03Ni43NDA4MDM3NV0sIFszOS4zNTcyNzksIC03Ni42MDk5NjA4OF0sIFszOS4zNDI2ODA1LCAtNzYuNjAzNDkxODZdLCBbMzkuNjQzNDU2MjcsIC03Ny43MjQ2MDQ0NV0sIFszOS4yNjcxMDI5OCwgLTc2LjcyOTg1NjA3XSwgWzM5LjMwNDkyNzc5LCAtNzYuNTg4MTk4MTRdLCBbMzkuNDA3OTU4ODksIC03Ny40MTQxNDQ0NV0sIFszOS41NDMxNTk4OSwgLTc3LjEwODE3Nzk0XSwgWzM5LjMwNTIxMzk0LCAtNzYuNTk5NjQxMjFdLCBbMzguNDE5NjA1MDksIC03NS42ODgzMjExNl0sIFszOS4xNDI3ODYwNSwgLTc2LjU5NTkxOTc3XSwgWzM4Ljk4MzM2Njk4LCAtNzYuNTMwMzE2NThdLCBbMzkuMzA2ODAwMDUsIC03Ni41OTgxNTg0N10sIFszOS4zMTYyNDIzNiwgLTc2LjkyODMzODA5OTk5OTk5XSwgWzM5LjMwNzIzOTA2LCAtNzYuNTgyNzc4NTddLCBbMzkuMzA3MTA5MjgsIC03Ni41ODcxNDQ3M10sIFszOS42MjI2Njk1NywgLTc3LjY3MjE5NDk1XSwgWzM5LjMwOTc2NTg5OTk5OTk5NSwgLTc2LjU5ODM5ODQyXSwgWzM5LjMxMjc3MjQyLCAtNzYuNTk1MjUxMzRdLCBbMzguMzY2MDg5NTYsIC03NS41ODI0MTY3Nl0sIFszOS40Mjc0OTA1MywgLTc3LjQ2MDYyNTA3XSwgWzM5LjMwMzM5NjU1LCAtNzYuNTg5NjIyMDVdLCBbMzkuMzgwOTA2NSwgLTc3LjE0NTE1NDg1XSwgWzM5LjMwNjc2OTAzLCAtNzYuNTg3NDA4ODldLCBbMzguNTcwMTY5ODMsIC03Ni4wNzA1NTM3NF0sIFszOC4zNTg1NTcxLCAtNzUuNjAwODU4OTddLCBbMzkuNDA2ODQ0MzUsIC03OS40MDYwNTQ3Nl0sIFszOS40MDY4NDQzNSwgLTc5LjQwNjA1NDc2XSwgWzM5LjUzMTcwNjE5LCAtNzYuMzQyNjEzMjNdLCBbMzkuMzEyNjAyNDksIC03Ni41ODM2MTk2MV0sIFszOS40ODE2NDA4NCwgLTc3LjM1MDUwNzMxXSwgWzM5LjMwNTc1NjUsIC03Ni41ODIzNDc4OF0sIFszOS4zMDkwMDY0OSwgLTc2LjU4MDU5MDEzXSwgWzM5LjMwNzA2ODUzLCAtNzYuNTc5NzczNDVdLCBbMzkuMzY2MzAyNDgsIC03Ni41Njk5MDA4M10sIFszOS4zNTA3NDM4NiwgLTc2LjU2MjcyOTM0XSwgWzM4LjM2ODY4Nzc2LCAtNzUuNTYyNjE1OTNdLCBbMzkuMzU5NTcyNTQsIC03Ni41NTgyOTY3N10sIFszOS42MzM0NzcwNCwgLTc4Ljc1MzI0Nzg4XSwgWzM5LjM2NDc0MTA5LCAtNzYuNTcyMTkyMzhdLCBbMzkuMzMzNzYyMiwgLTc2LjY2MTAxODE5XSwgWzM5LjMzMzQ4Nzg3LCAtNzYuNjY0ODM0MTddLCBbMzkuNTIxMDE0MzcsIC03Ni45MTk1NDAxNV0sIFszOC42MTM5Nzg2MSwgLTc2LjkwOTU1NTc0XSwgWzM5LjMyMDYxNzEyLCAtNzYuNjU0MjA3ODJdLCBbMzkuMzQ0OTg3NjYsIC03Ni42NjMzNzkyNF0sIFszOS4zMjM4OTksIC03Ni42NjAxMjE5M10sIFszOS4zNDc3MDI5NSwgLTc2LjY3MDcyNTQ1XSwgWzM5LjMyMzQyODc4LCAtNzYuNjY4ODYyODddLCBbMzkuMzI1ODE0MTQsIC03Ni42NzQyNzA1NV0sIFszOS40NTQ3MzMzNCwgLTc3LjQ1MDY4NDcwMDAwMDAxXSwgWzM5LjM1MDU4MzU5LCAtNzYuNjg1MzUwMjhdLCBbMzkuMzQ4NzgzMywgLTc2LjY4ODU0OTgyXSwgWzM5LjY0MDYyNjYsIC03Ni44NjkxNzMwNV0sIFszOS4zMzM5MzcxMywgLTc2LjY4MzQyNjI2XSwgWzM5LjMzMDM3MDU0LCAtNzYuNjY4MzI0MTddLCBbMzkuMzQzNzU0NjgsIC03Ni42ODgzNjYxXSwgWzM5LjM1OTgwMDMyLCAtNzYuNzEzMTU4NDddLCBbMzguMTY5NjI4NiwgLTc1LjM4NzI2NzI3XSwgWzM5LjMzNzAxMjYxLCAtNzYuNjg0NzE1OTRdLCBbMzkuMzQyNTg1MTksIC03Ni42ODA0ODQzOF0sIFszOS42Nzc0MTc1LCAtNzUuOTY2MjM2NDhdLCBbMzkuMjcwOTEwNzEsIC03Ni43MzEwMjczXSwgWzM5LjY0NjY0NzMsIC03Ny43MTUzNjYyM10sIFszOS42NDI0NDU5MSwgLTc3LjcyMzMyNjE3XSwgWzM5LjM0Nzc4MTgzLCAtNzYuNjc2MTkyMV0sIFszOS4zNDg3MzIxMiwgLTc2LjY3ODE2OTM0XSwgWzM5LjM0MzQ4NzIxLCAtNzYuNjg0MjY2NTldLCBbMzkuMzQ4OTExNTcsIC03Ni43MTAxMDIyNl0sIFszOC43NTM3ODY0OCwgLTc1LjgyNTc3MTg0XSwgWzM5LjM4NzUyMDQzLCAtNzYuNTM5NDg0NzddLCBbMzkuMzU5MTMzNjIsIC03Ni42OTIwODM1XSwgWzM5LjM1OTk1NTU0LCAtNzYuNzA3NDU3OTVdLCBbMzkuMzY0ODE4OTksIC03Ni43MDI5MjU3Nl0sIFszOS4zMDQ2NTk5NywgLTc2LjY1NTYxODU5XSwgWzM5LjYzNzMzOTA1LCAtNzcuNzIyNDQwNDAwMDAwMDFdLCBbMzkuMzAzNTk4NzYsIC03Ni42NzA2NzcwOTk5OTk5OV0sIFszOC45NzI2MDY0MiwgLTc2LjU2MzAyNTM5XSwgWzM5LjI1MzY1MTE5LCAtNzYuNjIwNTM0OTNdLCBbMzkuMzA1MTk2NjIsIC03Ni42NjM3NDc1XSwgWzM5LjI0MzUxNjk5LCAtNzYuNjYwOTA1ODldLCBbMzkuMzA2NDY2MjEsIC03Ni42NzIxMjYwN10sIFszOC4wMjg3MTU5OSwgLTc1LjgwNjc1NDY0XSwgWzM4LjM2ODkyMDU0LCAtNzUuNjUwODk4NTVdLCBbMzkuNTkzMDM5MzIsIC03OS4zNDQ5NDYxNF0sIFszOS4yOTU3OTY4NSwgLTc2LjgxMTU4MzldLCBbMzkuMzA3OTc4NzEsIC03Ni42NTI1NTc2Nl0sIFszOS4zMTE3MzExNCwgLTc2LjY1NzEyNTk0XSwgWzM5LjMxMjE1OTQ2LCAtNzYuNjc1NDYyNTk5OTk5OTldLCBbMzkuNTA3NjEzMzUsIC03NS44MzEwMjAxM10sIFszOS4zMTMwNDc3OSwgLTc2LjY2MDM5NzkxXSwgWzM4LjM4NDc0MjE2LCAtNzUuNjI0ODM4ODldLCBbMzguNzg5NjkwOTQsIC03Ni4wODA4OTM5M10sIFszOC4wNDAyNTQ0MiwgLTc1Ljc1ODk0MjMxXSwgWzM5LjY5ODA4MzQ1LCAtNzguMTk1MzYyM10sIFszOS4zMTIzMjM0NywgLTc2LjY1NjA4MDM4XSwgWzM5LjMwOTQ3MzQ4LCAtNzYuNjU3MTk0Ml0sIFszOC43NzY5Njk0OCwgLTc2LjA1Mjc0MTJdLCBbMzkuNTk5MTQ1NDksIC03Ny44MTk3NDI1Nl0sIFszOC4zNDc4Nzg1MSwgLTc1LjU5NTA4MTQ5OTk5OTk5XSwgWzM5LjU4Njc4ODc3LCAtNzYuOTg0NzYyXSwgWzM5LjE4MzM2MzY0LCAtNzUuODU4MTk1XSwgWzM5LjUzNjE1OTI1LCAtNzYuMDk5NjkwNThdLCBbMzkuNzAxNDgwOTMsIC03Ny4zMjgyMjMwN10sIFszOS4zMDkyODc1NSwgLTc2LjY2MDUxMTUzXSwgWzM5LjMwNTgxODUsIC03Ni42NjgyNDIzNl0sIFszOC42MzAwMzIyMSwgLTc1Ljg2MzAzOTk1XSwgWzM5LjY1MzY3NDY1LCAtNzguNzY5ODU5MDZdLCBbMzkuMDQ4MDY2OTIsIC03Ni4wNjk0NDg0N10sIFszOS4zMTAwNDQ1MDAwMDAwMDQsIC03Ni42NzEzMTU0NV0sIFszOS4zMTkzNjc1NSwgLTc2LjY3MzgzMTM2XSwgWzM5LjQ0NDA1MjA5LCAtNzcuNTQ4ODczMzNdLCBbMzguNjg5NjU1NzcsIC03NS43ODAwNzg2M10sIFszOC42MzExOTQ5MiwgLTc1Ljg2MTkyNTc0XSwgWzM4LjYzMTE5NDkyLCAtNzUuODYxOTI1NzRdLCBbMzkuNTYwNTMyOSwgLTc2LjA3MTM0NzQ3XSwgWzM5LjIxMzQ2MTU2LCAtNzYuMDYzNTUwNTVdLCBbMzguMjA0MjU5NzcsIC03NS42OTI5NjgzMV0sIFszOC4xOTg5OTcxOCwgLTc1LjY4OTU1ODA5OTk5OTk5XSwgWzM4LjE5OTQxNzA1LCAtNzUuNjg3NjE1NTldLCBbMzkuNDYyMDA1OTIsIC03Ni44MjgxMTY2Nl0sIFszOS4yNjM2MDcyMiwgLTc2LjcxNjUzNzM1XSwgWzM5LjMxNjg0MzcyLCAtNzYuNjgzMTAxMzVdLCBbMzkuMjk3NDY3MDIsIC03Ni42NTk0OTU0NF0sIFszOC4zNzc2NzA5NCwgLTc1LjUyMTMxMDg5XSwgWzM4LjM3NjM4OTI2LCAtNzUuNTA2MzU5NzNdLCBbMzkuNDg0MzA5OTUsIC03OS4wNDUzMDAxOV0sIFszOS4yOTkxNjE0NywgLTc2LjYzNTU4Mzg5XSwgWzM4LjM3MzU2Mjg1LCAtNzUuNTAyNjAwNDddLCBbMzkuMzAwNzY3MTMsIC03Ni42NDU5MTg0XSwgWzM5LjY2MTg5NzYyLCAtNzYuODg1MDcyMDk5OTk5OTldLCBbMzkuMjQ1ODM0NTcsIC03Ni42MjcyNjkwOF0sIFszOC4zNzEyODM0NCwgLTc1LjU5MDQ2NzEzXSwgWzM5LjI5OTg3Mjg4LCAtNzYuNjMwMTU5MjFdLCBbMzkuMzA5MjQzMDYsIC03Ni42MjQ4MTYwMV0sIFszOS4zMDI2NTIxNywgLTc2LjYyNzgwNjA5XSwgWzM5LjU5Mjk1ODgzLCAtNzcuODEzMjg2NjRdLCBbMzkuMzAyNjUyMTcsIC03Ni42Mjc4MDYwOV0sIFszOS4zMDMzOTg1OSwgLTc2LjY0MzE3NjA1XSwgWzM5LjMwMTQwNjMzLCAtNzYuNjMxOTcxMjVdLCBbMzkuMzA2MjY3NTEsIC03Ni42MjUwODcxOF0sIFszOS4zMDYzNTYwNSwgLTc2LjY0MzQwNTk3XSwgWzM5LjMwNjczNDgzLCAtNzYuNjI5ODIwNjVdLCBbMzkuMjQ1NzU5NTMsIC03Ni41MDg0OTc5N10sIFszOS4zOTgyMDA1MiwgLTc2LjU5NDg1XSwgWzM5LjY0MTQwMTE5LCAtNzcuNzE5MDM0MjhdLCBbMzkuMzA2MzY4NDksIC03Ni42MzA5MjMzMl0sIFszOS4zMDYzNjg0OSwgLTc2LjYzMDkyMzMyXSwgWzM5LjI5NjM3NjQ5LCAtNzYuNjQ2NjUxMzZdLCBbMzguMzgzNjE3ODQsIC03NS41OTI5OTI5OV0sIFszOS4zMDk3ODE0MywgLTc2LjY0OTEzNTEyXSwgWzM5LjMwOTY3NjUxLCAtNzYuNjUwMjAwMDhdLCBbMzkuMzEwOTU2MTIsIC03Ni42MzI2OTg0OV0sIFszOS4zMTIzNjA2MSwgLTc2LjY0ODMzNzk1XSwgWzM5LjIzNjEzNzM1LCAtNzYuNjA1OTUxMzddLCBbMzkuMjMzODA3ODksIC03Ni41OTgyNzc0NV0sIFszOS4zMTU1MTcxMywgLTc2LjY1NDkwMDg5XSwgWzM4LjUwMzYyNTA5LCAtNzYuNzcxOTA1MTddLCBbMzkuMjQ0NDI3MzQsIC03Ni42NDg5MjYyOV0sIFszOS4zMDU5NjI3OTk5OTk5OTYsIC03Ni42MzEzODgzNF0sIFszOS41OTMwNTgwNywgLTc3LjEzMzM4NTZdLCBbMzguNzExOTAxLCAtNzUuNzc2OTEwOTRdLCBbMzkuNDY4OTkwOTk5OTk5OTk1LCAtNzYuOTQyMTk5ODVdLCBbMzkuNjMzNzY3NTgsIC03Ny43MTkyNzE3N10sIFszOS4zNjE4MDQzNSwgLTc3LjUzNDEwNjI5OTk5OTk5XSwgWzM5LjMwNTQ1NDA4LCAtNzYuNjM2MDE1NDddLCBbMzkuMjk1ODQ1NzAwMDAwMDEsIC03Ni42MzQxNTg1OV0sIFszOS4yOTk0MTU1NCwgLTc2LjYzNDE5MDczXSwgWzM5LjIyOTcwMzU3LCAtNzYuNTg4ODE2MjddLCBbMzkuMjU4NzI2ODEsIC03NS44Mzc5MDQ5NV0sIFszOS4yOTc5MDUxMywgLTc2LjYzNzI1NTQxXSwgWzM5LjI5Nzg4ODM4LCAtNzYuNjQ0MjM5NF0sIFszOS4zMTk0NzUyMDAwMDAwMSwgLTc2LjYxNTkxNTFdLCBbMzkuNjEyNzU1MDYsIC03Ny43MzQ0OTI5OV0sIFszOS4zMTUxNTk1NywgLTc2LjYxODYzODc3XSwgWzM5LjMxNzk0NTQ1LCAtNzYuNjE0OTI0NTZdLCBbMzkuMzQ0NDYzMjgsIC03Ny40NzQ3NzQ5Nl0sIFszOC44ODgyMTUsIC03NS44MTAwMjg2OV0sIFszOS4yMTA1OTgyOTk5OTk5OTQsIC03Ni4wNjg5OTUzN10sIFszOS4yMTA1OTgyOTk5OTk5OTQsIC03Ni4wNjg5OTUzN10sIFszOS4zMTc5NDU0NSwgLTc2LjYxNDkyNDU2XSwgWzM4LjM4OTUxNzQ1LCAtNzUuNTY5ODYwNDddLCBbMzguMzYyMDMxNSwgLTc1LjU5MzY2OTg2XSwgWzM5LjYyMTIxMTA0LCAtNzcuNDA0MTQ1NzhdLCBbMzguMzcwMjkwNDQsIC03NS42MDg0MDY2OV0sIFszOC44OTEzMjk5NywgLTc1LjgyODA0NzE5XSwgWzM5LjMyNDgwMTQ5LCAtNzYuNjAwMjY1NDZdLCBbMzkuMzIzMzgxMDksIC03Ni41OTk1OTcxXSwgWzM5LjMxMzM3ODUsIC03Ni42MTMyNDA4MV0sIFszOS40MTExODA0NywgLTc3LjQxODc0MDNdLCBbMzguMzY5MTcwMTQsIC03NS41OTMwMDM0OF0sIFszOC41Njk0MjcxNSwgLTc2LjA3OTgzOTkwMDAwMDAxXSwgWzM5LjA4NTMzODk2LCAtNzYuNTQ4Njc3NDVdLCBbMzkuMzE1Nzk4MzEsIC03Ni42MTY4MjUwN10sIFszOS4zMTY2MzUxNSwgLTc2LjYxNTI2NTA0XSwgWzM5LjI1ODE4Njg1LCAtNzYuNDYyMzA0OThdLCBbMzkuMzE2NjAwMTcsIC03Ni42MDg1OTU0Ml0sIFszOS4zMTkzMjcxNywgLTc2LjYwMDg2OTk2XSwgWzM5LjY1ODIyNTQ3LCAtNzguOTI5MTUyNDVdLCBbMzkuMzMwMjcsIC03Ni42MDM2MjgwMl0sIFszOS4zMjkxMTg5NywgLTc2LjYxNzk3MzI0XSwgWzM5LjMzMDA2ODkyLCAtNzYuNjA4MjE2MDNdLCBbMzkuNTM2Mzk2ODcsIC03Ni45OTI5MzQ0OF0sIFszOS4zMzIxNTI4OCwgLTc2LjU4OTAxNTE2XSwgWzM5LjMxODA1NTUxLCAtNzYuNjEwMTE5MzldLCBbMzkuMzE0NjM3OTksIC03Ni42MDg2NzEyMl0sIFszOC45MjY4OTY1NSwgLTc2LjYwNjIyMzk5XSwgWzM5LjMxODMzNTUzLCAtNzYuNjAzMjcwNV0sIFszOS4yOTIzNzk1MSwgLTc2LjYzNTEwODYxXSwgWzM5LjQ0MDgzMzgyLCAtNzcuMDU1NTQyNDRdLCBbMzguNDg4ODUxOTQsIC03NS44MzM0MTY5MV0sIFszOS41NjAyMDIxNSwgLTc2Ljk5MjY3ODk2XSwgWzM5LjM0MTUzMjg1LCAtNzYuNDU1MTU0NzJdLCBbMzkuMzA3NTQ4MjUsIC03Ni40NzUxMjQwN10sIFszOS4yOTA4NTg0NSwgLTc2LjYzOTc1MTYzXSwgWzM5LjI4NTEzMzUsIC03Ni42NDc4NDMyOF0sIFszOS4yODgwMDk1NSwgLTc2LjY0OTc1MDU1XSwgWzM5LjQxNDI3MDgxLCAtNzYuNTk4OTAzMzFdLCBbMzkuMjkxNDk3MDgsIC03Ni42NDUzOTg1Ml0sIFszOS4zNjc4NDA1MywgLTc2LjcxNjU4OTgxXSwgWzM5LjMyNjEzNjQ3LCAtNzYuNDYxNTQ2NTFdLCBbMzkuMjg5MjA5NSwgLTc2LjY1NDk2MDcyXSwgWzM4LjM3NjY1NDk5LCAtNzUuNTg2Nzg2ODhdLCBbMzkuNzAzMTYxNTMsIC03Ny4zMjA0NDA3NF0sIFszOC42MjU2NTA3OCwgLTc1Ljg2MDc3NzY0XSwgWzM5LjI5NDcyMDUxLCAtNzYuNjU2NjcxOTVdLCBbMzkuMjc4ODM4OTksIC03Ni42NTY0MDAzN10sIFszOS42MzkxNzI0OSwgLTc4Ljc1NTQ2MTY3XSwgWzM4LjY0MDQ0OTQxLCAtNzUuODY1NzI4OTJdLCBbMzkuMjkyNDI0NTYsIC03Ni42NTAyNTU1NV0sIFszOS4yODc2MTkyMywgLTc2LjYzMzY3ODA3XSwgWzM5LjI4MDIzOTY3LCAtNzYuNjYyNDE3OTddLCBbMzkuMzYzNjE0ODUsIC03Ni43NzcwMDhdLCBbMzguMTY1OTMwMjgsIC03NS4zOTY5ODg3XSwgWzM4LjM5NTM4ODUsIC03NS42MDMxODE5N10sIFszOS4zMTA0OTI4NCwgLTc2LjQ3NjIyOTA0XSwgWzM5LjI5NDAxOTQ2LCAtNzYuNjQ1NDQ2MTddLCBbMzkuMjgxMjI5MTgsIC03Ni42NTA3MjQzM10sIFszOC4zNzM0NzYzNCwgLTc1LjYwNTIwNzg5XSwgWzM5LjI5NTA3MTUwMDAwMDAwNiwgLTc2LjUzMzI2MDI0XSwgWzM4LjM3NzQxNTA2LCAtNzUuNjA1MDg0NTZdLCBbMzkuMzA4MTc2MTgsIC03Ni40NzM1OTA3M10sIFszOS4yOTUxNTAzMiwgLTc2LjU3OTMyNTkxXSwgWzM5LjY0ODA2NTcwMDAwMDAwNCwgLTc3LjcyNzUxNzM5XSwgWzM5LjI4OTExMTc1LCAtNzYuNTY1NDQ2MDZdLCBbMzkuMzc3ODAzNTUsIC03Ny40Mjk3MzczNV0sIFszOS4yOTI0MzUyMywgLTc2LjU3ODk3MDc5XSwgWzM5LjI4NzA3NTUsIC03Ni41NTUyNjAyN10sIFszOS4yODQzMDQ0OCwgLTc2LjU1Mjc0NzA5OTk5OTk5XSwgWzM5LjI5NDgwODkzLCAtNzYuNTEyNTEwMDFdLCBbMzguMzE0NzE5MDksIC03NS42Mjc3Mjk5N10sIFszOS4yOTg3Mjg1MywgLTc2LjUxNTgxMTkxXSwgWzM4LjgxMTg4MzQ1LCAtNzYuNTM5MTQ5NDJdLCBbMzkuMjgzOTI2OSwgLTc2LjU1NTY1NzM2XSwgWzM5LjIzMjg4NTI5LCAtNzYuNTkzMzcxMDRdLCBbMzkuMjIwODE4NDgsIC03Ni44ODgzNDYyXSwgWzM5LjM4NDU4NDk5OTk5OTk5NCwgLTc3LjI2OTc5NTkxXSwgWzM5LjI1MTczNTU1LCAtNzYuNjI3Mzg1MDhdLCBbMzkuMjQ5NTc3ODksIC03Ni43MDUzNTk5Nl0sIFszOC4xODcxMTQwMSwgLTc1LjM3ODk1NTQ4XSwgWzM5LjIzNTc2NzIzLCAtNzYuNjEwOTUwMTFdLCBbMzkuNTcwMzUwNDgsIC03Ni45NzcwNDI1MDAwMDAwMV0sIFszOS42NTQ2MDc0OSwgLTc4LjgxMjA2MjM0XSwgWzM5LjIyNTE4MTY4LCAtNzYuNTkzNjU4NTldLCBbMzkuNTgzNzk0OTgsIC03Ni45OTQxNDk1NF0sIFszOS4yMzYxODkyOCwgLTc2LjYwMjA0MjQwMDAwMDAyXSwgWzM5LjI1MzI4NDA4LCAtNzYuNzAwNzk3ODddLCBbMzkuMjM2NjMzODMsIC03Ni42NTQ4Nzc1XSwgWzM4LjEzMzY3NDQ0LCAtNzUuMzk0MjQzNTJdLCBbMzkuMzEwNzg0MDUsIC03Ny42MTkxMTUyNl0sIFszOS4yMzA3MzkzNSwgLTc2LjcwMDQzNDQ2XSwgWzM5LjY0NjU5NTgyLCAtNzcuNzI5OTA5MDVdLCBbMzkuMjYzNzY3NTUsIC03Ni42ODc0NjAxOV0sIFszOS4yODc2NDc5MiwgLTc2LjY3MjMzODA5XSwgWzM4LjY1NjM0OTgxLCAtNzYuNjA2MTc4NDNdLCBbMzguMzU5ODg3ODUsIC03NS43Mzc2MDY1MV0sIFszOS40Nzc2NDAzOSwgLTc2Ljg0NjQxOTgyXSwgWzM4LjM4MTM5NTUyLCAtNzUuNjA1NTcxMTJdLCBbMzkuMzQxMTMwNjYsIC03Ni40NDg2NzAzNF0sIFszOS4yODc2NDc5MiwgLTc2LjY3MjMzODA5XSwgWzM5LjI4MjQ0NTU4LCAtNzYuNjcyMTU3NDRdLCBbMzkuMDcwNDczMjksIC03Ni41NDU0NTc1NV0sIFszOC43ODYxOTc5LCAtNzYuMDY5MTExNDldLCBbMzkuMjgyNDIyNzYsIC03Ni42NzQ3MDExNl0sIFszOS4yOTQwODA0NSwgLTc2LjY3NTgzMzAzXSwgWzM5LjI5MTg1NzQzLCAtNzYuNjc2NDYxMTddLCBbMzguOTgzOTIxMDYsIC03NS44MDA0Mjc2N10sIFszOC4zMzE4MTE3OCwgLTc1LjYyNjAxNjg2XSwgWzM5LjY1ODY0MjUyLCAtNzguNzcyNTkwN10sIFszOC4zNjUzNTYxLCAtNzUuNTg5NDM4NDZdLCBbMzkuNDA3MTIwNTcsIC03Ny4zNDQ1NDUwNF0sIFszOS41OTI2MDY0NywgLTc2Ljk3MDM4MDVdLCBbMzkuMjY1OTA5NDgsIC03Ni42OTUzNDI5MV0sIFszOS4yOTI2MjE4NiwgLTc2LjY5OTI2MDYzXSwgWzM5LjI4MTEzMDM2LCAtNzYuNzAwMzIzMzhdLCBbMzkuNTkyNTYzODMsIC03Ni45NzAzNTA2OV0sIFszOS4yODE4NzcyNCwgLTc2LjYzMjczOTk3XSwgWzM5LjI3NTI4NDM5LCAtNzYuNzM4NTczNTFdLCBbMzkuMTg2NDEwMjgsIC03Ni44Nzg1OTU0Ml0sIFszOS4zMjE5NjM0OCwgLTc2LjczODk1NTczXSwgWzM5LjI3ODQ0NTc5LCAtNzYuNTMwNDIxNDldLCBbMzkuMzg3NDIxNzcsIC03Ny4wNTU1MDM2NV0sIFszOS4yODAyOTEwOCwgLTc2LjYzNTc0OTNdLCBbMzkuMzUxNzMxMDUsIC03Ni43MjEyMTgwOF0sIFszOS4yNzYxMjU5NywgLTc2LjYxODk3NTddLCBbMzkuMjY2MjQ1MzcsIC03Ni42NTY5NjE3Ml0sIFszOS4zNjE3ODY0LCAtNzYuMzY2MDA5M10sIFszOS40NDQ2NDQ4MywgLTc2Ljc5MjI3MDEzXSwgWzM5LjYzNTY3NTM2LCAtNzguNzUyMDk5MzddLCBbMzkuNjY2NDEyMDQsIC03Ny43MTMyMzU0OF0sIFszOS4yNjg0NjI5NSwgLTc2LjY1MjM1NjUxXSwgWzM5LjI2MTg5MDAyLCAtNzYuNjM4NDc0NjFdLCBbMzkuNjY4MDc1NDksIC03Ni4zNzc4MDI5M10sIFszOS4zOTMwOTYxLCAtNzcuNDI1MTYyMTJdLCBbMzguMzc2MjAwMDQsIC03NS42MDMyNjY1M10sIFszOS4yNTIyOTUxOSwgLTc2LjY1MDQ3ODk3XSwgWzM5LjY0OTkxMjg4LCAtNzcuNzI5MzI1ODFdLCBbMzguNTYzMjkzODksIC03Ni4wNzYyMTExXSwgWzM5LjI1NDgyNDE2LCAtNzYuNjU2NzEyNjJdLCBbMzkuMjU0MTcxNjYsIC03Ni42NDUyNzY2OV0sIFszOS4yODE5NzIzOSwgLTc2LjYxMzA3ODg3XSwgWzM5LjI4MDY3MDUxLCAtNzYuNjE0NTk2NjRdLCBbMzkuMjkzNDE1NjEsIC03Ni41ODc1NDg5NF0sIFszOS4yOTQzMzkzNywgLTc2LjU4NzUxMzY0XSwgWzM5LjI5MDUxOTczLCAtNzYuNTk3MTY4NjFdLCBbMzkuMjg2NDMyOTYsIC03Ni41OTU0NjE5N10sIFszOS4zNjgxMjk3NSwgLTc2LjU0Nzc5NDM1XSwgWzM5LjQ1MTg5NjQ1LCAtNzYuODIwMTkyODVdLCBbMzkuMzczNDg3NTksIC03Ni45NjUwMzQzOV0sIFszOS4yNTg5NTg3OSwgLTc2LjUxMzQyMTM0XSwgWzM5LjIyMDc2NjQzLCAtNzYuNDUwNjczODNdLCBbMzkuMzM3MzUyMTksIC03Ni40NTM4NjE0MDAwMDAwMV0sIFszOS4xNjAyNDg0MSwgLTc2LjYxNTAzOTU0XSwgWzM5LjY1NzgyODUsIC03NS44MjUyNDI2Ml0sIFszOS4xNTM4NDU5NywgLTc2LjU4NTI3NzI4XSwgWzM5LjUyMzE2MjM4LCAtNzcuNjYxODUyODddLCBbMzkuMTc0MTM4NTUsIC03Ni41NTMyMDk3Nl0sIFszOS4xNTQyMTkyNSwgLTc2LjU4Njk5NDg4XSwgWzM5LjUyNjY4NjIyLCAtNzcuNzQyNDY2OTJdLCBbMzkuMzU2MTYzMDk5OTk5OTk2LCAtNzYuNTc4NTA4NjVdLCBbMzkuMjc0NDQxOTksIC03Ni40ODQ2NjcwMV0sIFszOS4xMzgwODEyNSwgLTc2LjU3MjkyNzc5OTk5OTk5XSwgWzM5LjM3MDczMjU0LCAtNzYuNTgyNzI1NTNdLCBbMzkuMzc3ODgwMTYsIC03Ni41Nzk3MjgzNl0sIFszOS40MzU3ODU4NiwgLTc2LjQwMTExNjhdLCBbMzguMzkzMjg3ODMsIC03NS4zMDA2Njc5Ml0sIFszOS40MjQ4Nzk4NCwgLTc3LjQxMDgxMjg3XSwgWzM4LjA2NjIzODQ3LCAtNzUuNTY1NTEzN10sIFszOS4zNDgyODQ1OCwgLTc2Ljc2NzE1ODUyXSwgWzM5LjMzMzUxNjU4LCAtNzYuNzQ3NDkwMjVdLCBbMzguNTYzMzM2NjUsIC03Ni4wODY3Mjc0MDAwMDAwMl0sIFszOS4yNTY0NTc3MywgLTc2LjczMDA3Mjg0XSwgWzM5LjYyOTg4NTcxLCAtNzcuNzMyMjY4NV0sIFszOS4zOTA1ODg5LCAtNzYuNTc5MDU5NjldLCBbMzguNDQ3NTA0MzYsIC03NS41NzU5Mjc5MDAwMDAwMV0sIFszOC4zNzQ0MDAyNSwgLTc1LjYwOTM2MTc4XSwgWzM4LjA2OTc4NTYyLCAtNzUuNTY5Njc2MTVdLCBbMzkuNjYxODQ5MTksIC03OC43NTUxODczNl0sIFszOS4zMjA4OTY2NCwgLTc2Ljc2MzM1MDE1XSwgWzM5LjY1NzczMjY3LCAtNzguOTM1MTcwNThdLCBbMzkuMzQ1MDU3NjgsIC03Ni43NzI1MTkzMV0sIFszOS4zNTcxNTY5MSwgLTc2Ljc2Mjk4Mzg1XSwgWzM5LjA5ODg2MjA0LCAtNzYuNjg5MDgzMjZdLCBbMzkuMTE1MzUzMDksIC03Ni41ODgyMzcwOF0sIFszOS40NzQ3ODU3OCwgLTc3LjM1ODczMDAzXSwgWzM5LjM1NzM4MjIzLCAtNzYuNzY4MjExOThdLCBbMzkuMjQ2NTMzNTAwMDAwMDA1LCAtNzYuNjIyNjQ0NjhdLCBbMzkuMjk1NDMxMzUsIC03Ni41OTIwNjY2OV0sIFszOS4zNjYwNjk0OCwgLTc2Ljc3NzUwNDc3XSwgWzM5LjE0NjMyOTU1LCAtNzYuNTI0NTQyNjZdLCBbMzguODQ1NjE1NzIsIC03NS44MDI3OTY2MV0sIFszOC40MzAyNDU4OTk5OTk5OTYsIC03NS42NzE4MDQwNF0sIFszOS4zODM5MTE5MSwgLTc2LjUzNDA1NzEyXSwgWzM5LjU5ODU3NTQ5LCAtNzYuMDgwODUxOTFdLCBbMzkuMjUyMTUxNTcsIC03Ni43MjU2NjY5OV0sIFszOC44NTY0MTkxLCAtNzUuODE0ODI3MTJdLCBbMzkuMzUyNjE0NjksIC03Ni40NzUwMDgxMl0sIFszOS4yMzExOTY0NiwgLTc2LjgyNTA5MjMxXSwgWzM5LjU2NDQ1NDg2LCAtNzcuMTc5OTYzNTNdLCBbMzkuMTY5MTk3ODMsIC03Ni44MzcyMjIyOF0sIFszOS4zNzM3MDAwNywgLTc2LjgwOTQ1Mjg4XSwgWzM5LjQwOTY2MTA5LCAtNzYuNDY3NDIyMjNdLCBbMzkuNjMwNDE5MDEsIC03Ni4wNzcwMzg2NV0sIFszOC40NTg0Njg3MiwgLTc1LjczODUwNjQ2XSwgWzM5LjQwNDU4NiwgLTc2Ljk2MTY1NzM0XSwgWzM5LjE3Njk5MTk4LCAtNzYuODUyMTM4NjRdLCBbMzguNDY5MjU0MTgsIC03NS43NDk4MjE4NV0sIFszOC42OTgwNjY1OSwgLTc2LjU0Nzc3MzI0XSwgWzM4LjUxMTE5MDEyLCAtNzYuNjM3NTE3MzJdLCBbMzguNDY5MjY5NSwgLTc2LjUxMjc3Mjc1XSwgWzM4LjY2MDU5NDc1LCAtNzYuNjA3MjExOF0sIFszOC41NDkzNDk5NywgLTc2LjU5NDA5MTEzXSwgWzM4LjQwNTQ5NDU0LCAtNzYuNDk2Nzg3MTVdLCBbMzguNTUwODkyNjYsIC03Ni41ODIyOTAyOV0sIFszOC42NjY2OTI1MiwgLTc2LjUzMDM4ODgxXSwgWzM4LjM5ODEzNTYyLCAtNzYuNDM3MTc3MDNdLCBbMzguNzAzNTg4MjgsIC03Ni41MzQ2NDczOV0sIFszOC41Mzc3MzU2MSwgLTc2LjU4MTMxMzQ1XSwgWzM4LjYxNzEwODA0LCAtNzYuOTAxMzUwMjVdLCBbMzguNDM0MDcwODMsIC03Ni45MTA1OTA0XSwgWzM4LjU3NDEyNjMzLCAtNzYuODkwMzY1MjddLCBbMzguNTI2MTU3NDYsIC03Ni45Nzg1MTEwNV0sIFszOC41Mjk2NDI1NSwgLTc2Ljk3OTc0NTM5XSwgWzM4LjI5OTEwMjEyLCAtNzYuODgwODk0MTddLCBbMzguNjE5MDY3NTcsIC03Ni44NjM5MzY1NV0sIFszOC40NzM3MTk4NywgLTc3LjE1NTcxNDUxXSwgWzM4LjYwMzUwMDM5OTk5OTk5NCwgLTc2LjkxMDg2OTc4XSwgWzM4LjYxMDU3MTMzLCAtNzYuOTAyMDA2MDZdLCBbMzguNjMyMTUsIC03Ny4wNzkxMTk5OTk5OTk5OV0sIFszOC42MjIyOTg1NCwgLTc2LjkwMzkyMTYxXSwgWzM4LjUzMDcyMTA4LCAtNzYuNzgyODQ4NzJdLCBbMzguNTE2OTQ4NTcsIC03Ni45ODI3ODE5NF0sIFszOC41OTYzNDcyNywgLTc3LjE2NzU1ODAxXSwgWzM4LjU1OTQxMDU4LCAtNzcuMTY2NDkzNTVdLCBbMzguNTk2OTY0MTcsIC03Ni45MzY0OTI2MV0sIFszOC41Mjg0NTk2MDAwMDAwMDUsIC03Ni45ODQ4OTI1M10sIFszOC40OTE4MjM0OTk5OTk5OTUsIC03Ny4wNjY4NzcyXSwgWzM4LjI5OTg0MzMyLCAtNzYuNjQxODUwNDZdLCBbMzguMjQwMDE3NDMsIC03Ni40OTM3NzQ4OF0sIFszOC4xMjAwNjUxMywgLTc2LjM3MzQwODU0XSwgWzM4LjI2MDY3NzYsIC03Ni40NTkyNDkyNV0sIFszOC4yNDQ3NDA1MiwgLTc2LjQ5MTA0MTQ3XSwgWzM4LjE5ODMyMTczLCAtNzYuNDk0NTE4NjddLCBbMzguMjYxNzgwMTcsIC03Ni40NjI1NTE5Nl0sIFszOC4yODE4OTIxOSwgLTc2LjQ3MDU4ODFdLCBbMzguNDQzNDgzNzYsIC03Ni43NDg0NTI5MV0sIFszOC4yNjE5MDk5NywgLTc2LjQ1NDkxMDA1XSwgWzM4LjI1MTk1NTU2LCAtNzYuNDMwNjA4NjJdLCBbMzguMTg4OTc2NzUsIC03Ni40MTkyOTI2NF1dLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1pbk9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICBtYXhab29tOiAxOCwKICAgICAgICAgICAgICAgICAgICBtYXg6IDEuMCwKICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDE1LAogICAgICAgICAgICAgICAgICAgIGJsdXI6IDE1LAogICAgICAgICAgICAgICAgICAgIGdyYWRpZW50OiBudWxsCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYTc3MzdkMzI0MGZmNGJkMzg4OWYzN2U4MmIxOTNjOTIpOwogICAgICAgIAo8L3NjcmlwdD4= onload="this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>

Legal

Disclaimer

Views Expressed: All views expressed in this tutorial are the authors own and do not represent the opinions of any entity whatsover with which they have been, are now, or will be affiliated.

Responsibility, Errors and Ommissions: The author makes no assurance about the reliability of the information. The author makes takes no responsibility for updating the tutorial nor maintaining it porformant status. Under no circumstances shall the Author or its affiliates be liable for any indirect incedental, consequential, or special and or exemplary damages arising out of or in connection with this tutorial. Information is provided 'as is' with distinct plausability of errors and ommitions. Information found within the contents is attached with an MIT license. Please refer to the License for more information.

Use at Risk: Any action you take upon the information on this Tutorial is strictly at your own risk, and the author will not be liable for any losses and damages in connection with the use of this tutorial and subsequent products.

Fair Use this site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. While no intention is made to unlawfully use copyrighted work, circumstanes may arise in which such material is made available in effort to advance scientific literacy. We believe this constitutes a 'fair use' of any such copyrighted material as provided for in section 107 of the US Copyright Law. In accordance with Titile 17 U.S.C. Section 108, the material on this tutorial is distributed without profit to those who have expressed a prior interest in receiving the included information for research and education purposes.

for more information go to: http://www.law.cornell.edu/uscode/17/107.shtml. If you wish to use copyrighted material from this site for purposes of your own that go beyond 'fair use', you must obtain permission from the copyright owner.

License

Copyright © 2019 BNIA-JFI

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dataplay-0.0.13.tar.gz (4.8 MB view hashes)

Uploaded Source

Built Distribution

dataplay-0.0.13-py3-none-any.whl (272.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page