ato-water-lib 0.0.131 → 0.0.133

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- import { Directive, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
1
+ import { Directive, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
2
  import { AtoGojsEditorModel } from './gojs-editor.model';
3
3
  import * as go from 'gojs';
4
4
  import _ from 'lodash';
@@ -158,14 +158,12 @@ export class AtoDefaultGojsEditor {
158
158
  });
159
159
  // Remove Node and Node Group
160
160
  _.forEach(this.myDiagram.nodeTemplateMap?.Hb, (temp) => {
161
- if (temp?.key &&
162
- !this.editor.data?.nodeDataArray?.some((node) => node?.type === temp?.key)) {
161
+ if (temp?.key && !this.editor.data?.nodeDataArray?.some((node) => node?.type === temp?.key)) {
163
162
  this.myDiagram.nodeTemplateMap.remove(temp?.key);
164
163
  }
165
164
  });
166
165
  _.forEach(this.myDiagram.groupTemplateMap?.Hb, (temp) => {
167
- if (temp?.key &&
168
- !this.editor.data?.nodeDataArray?.some((node) => node?.type === temp?.key)) {
166
+ if (temp?.key && !this.editor.data?.nodeDataArray?.some((node) => node?.type === temp?.key)) {
169
167
  this.myDiagram.groupTemplateMap.remove(temp?.key);
170
168
  }
171
169
  });
@@ -191,13 +189,11 @@ export class AtoDefaultGojsEditor {
191
189
  this.makeGroupCoolingTowerTemplate(AtoGojsEditorModel.NODE_TEMPLATES[node?.type].icon, AtoGojsEditorModel.NODE_TEMPLATES[node?.type].name);
192
190
  return;
193
191
  }
194
- if (node?.type ===
195
- AtoGojsEditorModel.ENUM_TEMPLATES.IMMERSED_UF_WATER_TREATMENTS) {
192
+ if (node?.type === AtoGojsEditorModel.ENUM_TEMPLATES.IMMERSED_UF_WATER_TREATMENTS) {
196
193
  this.makeGroupImmersedUFTemplate(AtoGojsEditorModel.NODE_TEMPLATES[node?.type].icon, AtoGojsEditorModel.NODE_TEMPLATES[node?.type].name);
197
194
  return;
198
195
  }
199
- if (node?.type ===
200
- AtoGojsEditorModel.ENUM_TEMPLATES.PRESSURIZED_UF_WATER_TREATMENTS) {
196
+ if (node?.type === AtoGojsEditorModel.ENUM_TEMPLATES.PRESSURIZED_UF_WATER_TREATMENTS) {
201
197
  this.makeGroupCoolingTowerTemplate(AtoGojsEditorModel.NODE_TEMPLATES[node?.type].icon, AtoGojsEditorModel.NODE_TEMPLATES[node?.type].name);
202
198
  return;
203
199
  }
@@ -205,8 +201,7 @@ export class AtoDefaultGojsEditor {
205
201
  this.makeGroupZoneTemplate();
206
202
  return;
207
203
  }
208
- if (node?.type === AtoGojsEditorModel.ENUM_TEMPLATES.PLANT_CELL &&
209
- node?.isGroup) {
204
+ if (node?.type === AtoGojsEditorModel.ENUM_TEMPLATES.PLANT_CELL && node?.isGroup) {
210
205
  this.groupPlantCellTemplate(AtoGojsEditorModel.NODE_TEMPLATES[node?.type].icon, AtoGojsEditorModel.NODE_TEMPLATES[node?.type].name);
211
206
  return;
212
207
  }
@@ -230,13 +225,11 @@ export class AtoDefaultGojsEditor {
230
225
  }
231
226
  // Not Group
232
227
  // Component Water Normal
233
- if (AtoGojsEditorModel.TYPE_TEMPLATE_WATER_NORMAL?.includes(node?.type) &&
234
- !node?.isGroup) {
228
+ if (AtoGojsEditorModel.TYPE_TEMPLATE_WATER_NORMAL?.includes(node?.type) && !node?.isGroup) {
235
229
  this.makeEntityTemplate(AtoGojsEditorModel.NODE_TEMPLATES[node?.type].icon ?? '', AtoGojsEditorModel.NODE_TEMPLATES[node?.type].name ?? '');
236
230
  }
237
231
  // Component Water Withdraw Or Discharge
238
- if (AtoGojsEditorModel.TYPE_TEMPLATE_WATER_WITHDRAW_OR_DISCHARGE?.includes(node?.type) &&
239
- !node?.isGroup) {
232
+ if (AtoGojsEditorModel.TYPE_TEMPLATE_WATER_WITHDRAW_OR_DISCHARGE?.includes(node?.type) && !node?.isGroup) {
240
233
  this.makeEntityWithdrawOrDischarge(AtoGojsEditorModel.NODE_TEMPLATES[node?.type].icon ?? '', AtoGojsEditorModel.NODE_TEMPLATES[node?.type].name ?? '');
241
234
  }
242
235
  // Component Energy Normal
@@ -289,8 +282,7 @@ export class AtoDefaultGojsEditor {
289
282
  this.makeSpecialTemplate(AtoGojsEditorModel.NODE_TEMPLATES[node?.type].icon, AtoGojsEditorModel.NODE_TEMPLATES[node?.type].name);
290
283
  }
291
284
  // Plant Cell
292
- if (node?.type === AtoGojsEditorModel.ENUM_TEMPLATES.PLANT_CELL &&
293
- !node?.isGroup) {
285
+ if (node?.type === AtoGojsEditorModel.ENUM_TEMPLATES.PLANT_CELL && !node?.isGroup) {
294
286
  this.plantCellTemplate(AtoGojsEditorModel.NODE_TEMPLATES[node?.type].icon, AtoGojsEditorModel.NODE_TEMPLATES[node?.type].name);
295
287
  }
296
288
  }
@@ -318,8 +310,7 @@ export class AtoDefaultGojsEditor {
318
310
  this.myDiagram.dragSelectingTool = this.initialOptions?.dragSelectingTool;
319
311
  this.myDiagram.toolManager.draggingTool.isGridSnapEnabled =
320
312
  this.initialOptions?.['draggingTool.isGridSnapEnabled'] ?? false;
321
- if (this.myDiagram.toolManager &&
322
- this.myDiagram.toolManager.draggingTool) {
313
+ if (this.myDiagram.toolManager && this.myDiagram.toolManager.draggingTool) {
323
314
  if (this.initialOptions?.['draggingTool.gridSnapCellSize']) {
324
315
  this.myDiagram.toolManager.draggingTool.gridSnapCellSize =
325
316
  this.initialOptions?.['draggingTool.gridSnapCellSize'];
@@ -337,8 +328,7 @@ export class AtoDefaultGojsEditor {
337
328
  this.initialOptions?.['linkingTool.linkValidation'];
338
329
  }
339
330
  }
340
- this.myDiagram.contentAlignment =
341
- this.initialOptions?.contentAlignment ?? go.Spot.Center;
331
+ this.myDiagram.contentAlignment = this.initialOptions?.contentAlignment ?? go.Spot.Center;
342
332
  this.myDiagram.layout = this.initialOptions?.layout;
343
333
  // this.myDiagram.minViewportBounds = new go.Rect(0, 0, 1200, 1200);
344
334
  if (!!this.editor?.data) {
@@ -362,8 +352,7 @@ export class AtoDefaultGojsEditor {
362
352
  // if (!this.isAddedModelChangedListeners) {
363
353
  this.isAddedModelChangedListeners = true;
364
354
  this.myDiagram.addModelChangedListener(function (e) {
365
- if (e.change === go.ChangedEvent.Remove &&
366
- e.propertyName === 'nodeDataArray') {
355
+ if (e.change === go.ChangedEvent.Remove && e.propertyName === 'nodeDataArray') {
367
356
  const data = e.oldValue;
368
357
  self.onDeleteNode.emit(data);
369
358
  }
@@ -592,12 +581,7 @@ export class AtoDefaultGojsEditor {
592
581
  }
593
582
  initSolarDiagram() {
594
583
  const { SOLAR_POWER, POWER_CONDITIONING_UNIT, BATTERIES: BATTERY, INVERTERS: INVERTER, } = AtoGojsEditorModel.ENUM_TEMPLATES;
595
- const ListItemsCreateEntityTemplate = [
596
- SOLAR_POWER,
597
- POWER_CONDITIONING_UNIT,
598
- BATTERY,
599
- INVERTER,
600
- ];
584
+ const ListItemsCreateEntityTemplate = [SOLAR_POWER, POWER_CONDITIONING_UNIT, BATTERY, INVERTER];
601
585
  ListItemsCreateEntityTemplate.map((e) => {
602
586
  if (!!AtoGojsEditorModel.NODE_TEMPLATES[e]) {
603
587
  this.makeEntityTemplateEnergy(AtoGojsEditorModel.NODE_TEMPLATES[e].icon, AtoGojsEditorModel.NODE_TEMPLATES[e].name);
@@ -678,11 +662,7 @@ export class AtoDefaultGojsEditor {
678
662
  toolTip: this.$('ToolTip', this.$(go.TextBlock, {
679
663
  margin: 4,
680
664
  }, new go.Binding('text', 'textComponent'))),
681
- }, new go.Binding('text', 'textComponent'), new go.Binding('background', 'textComponent', (x) => x ? 'white' : 'transparent')
682
- // new go.Binding('margin', 'isFormat', (x) =>
683
- // x ? new go.Margin(5, 0, 5, 5) : new go.Margin(5, 5, 5, 5),
684
- // ),
685
- )));
665
+ }, new go.Binding('text', 'textComponent'), new go.Binding('background', 'textComponent', (x) => (x ? 'white' : 'transparent')))));
686
666
  // arrow
687
667
  elements.push(this.$(go.Shape, // the "from" arrowhead
688
668
  {
@@ -799,9 +779,7 @@ export class AtoDefaultGojsEditor {
799
779
  click: function (e, obj) {
800
780
  alert('Option 2 clicked!');
801
781
  },
802
- })
803
- // ... add more options as needed ...
804
- );
782
+ }));
805
783
  const node = this.$(go.Node, 'Spot', {
806
784
  // fromSpot: go.Spot.RightSide,
807
785
  // toSpot: go.Spot.LeftSide,
@@ -852,8 +830,7 @@ export class AtoDefaultGojsEditor {
852
830
  },
853
831
  doubleClick: (e, obj) => {
854
832
  const node = obj.part;
855
- if (node?.ob?.isTypeInflowOfPlantCell &&
856
- !this._initialOptions?.isReadOnly) {
833
+ if (node?.ob?.isTypeInflowOfPlantCell && !this._initialOptions?.isReadOnly) {
857
834
  // obj?.data?.onSelected(node?.ob?.nodePlantCellParent);
858
835
  // this.isShowNodeInfo
859
836
  // ? self.onDoubleClickNode.emit({
@@ -1161,11 +1138,10 @@ export class AtoDefaultGojsEditor {
1161
1138
  ? this.generateActionGroup([
1162
1139
  AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES.RO_WATER_TREATMENT].name,
1163
1140
  AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES.COOLING_TOWER].name,
1164
- AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES.BOILER].name,
1165
- AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES
1166
- .IMMERSED_UF_WATER_TREATMENTS].name,
1167
- AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES
1168
- .PRESSURIZED_UF_WATER_TREATMENTS].name,
1141
+ AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES.BOILER]
1142
+ .name,
1143
+ AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES.IMMERSED_UF_WATER_TREATMENTS].name,
1144
+ AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES.PRESSURIZED_UF_WATER_TREATMENTS].name,
1169
1145
  ].includes(title)
1170
1146
  ? [
1171
1147
  AtoDefaultGojsEditor.ENUM_ACTIONS.RENAME,
@@ -1221,8 +1197,7 @@ export class AtoDefaultGojsEditor {
1221
1197
  }, new go.Binding('text', 'name').makeTwoWay(), new go.Binding('editable', '', (data) => {
1222
1198
  return !(AtoGojsEditorModel.TYPE_COMPONENT_WATER?.includes(data?.systemType) &&
1223
1199
  data?.topologyType !== ATO_ECOMPONENT_PLANT_TYPE.WATER &&
1224
- data?.topologyType !==
1225
- ATO_ECOMPONENT_PLANT_TYPE.WATER_PLANT_CELL);
1200
+ data?.topologyType !== ATO_ECOMPONENT_PLANT_TYPE.WATER_PLANT_CELL);
1226
1201
  })))), this.$(go.Panel, 'Vertical', {
1227
1202
  alignment: go.Spot.Left,
1228
1203
  alignmentFocus: new go.Spot(0, 0.5, 8, 0),
@@ -1409,19 +1384,7 @@ export class AtoDefaultGojsEditor {
1409
1384
  AtoDefaultGojsEditor.ENUM_ACTIONS.ONLY_DETAILS,
1410
1385
  // DefaultGojsEditor.ENUM_ACTIONS.OUTFLOW,
1411
1386
  AtoDefaultGojsEditor.ENUM_ACTIONS.DELETE,
1412
- ])
1413
- // new go.Binding('visible', 'isNotAction', (x) => !x),
1414
- )
1415
- // this.$(
1416
- // go.Panel,
1417
- // 'Horizontal',
1418
- // { alignment: go.Spot.TopRight, alignmentFocus: go.Spot.Bottom },
1419
- // this.generateActionGroup([DefaultGojsEditor.ENUM_ACTIONS.ONLY_DETAILS]),
1420
- // new go.Binding('visible', '', (x) => {
1421
- // return x?.isOnlyDetails && !x?.isNotAction ? true : false;
1422
- // }),
1423
- // ),
1424
- ),
1387
+ ]))),
1425
1388
  toolTip: this.$('ToolTip', this.$(go.TextBlock, {
1426
1389
  margin: 4,
1427
1390
  }, new go.Binding('text', 'name').makeTwoWay())),
@@ -1459,7 +1422,8 @@ export class AtoDefaultGojsEditor {
1459
1422
  desiredSize: new go.Size(size.w - 20, size.h - 65),
1460
1423
  imageStretch: go.GraphObject.Uniform,
1461
1424
  }, new go.Binding('source', 'pathImage', (x) => x ??
1462
- AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES.PLANT_CELL].icon)), this.$(go.TextBlock, {
1425
+ AtoGojsEditorModel.NODE_TEMPLATES[AtoGojsEditorModel.ENUM_TEMPLATES.PLANT_CELL]
1426
+ .icon)), this.$(go.TextBlock, {
1463
1427
  row: 2,
1464
1428
  margin: new go.Margin(10, 0, 3, 0),
1465
1429
  editable: true,
@@ -1478,12 +1442,7 @@ export class AtoDefaultGojsEditor {
1478
1442
  }), this.$(go.Panel, 'Vertical', {
1479
1443
  alignment: go.Spot.Right,
1480
1444
  alignmentFocus: new go.Spot(1, 0.5, -8, 0),
1481
- })
1482
- // this.makePort('T', go.Spot.Top, go.Spot.TopSide, false, true),
1483
- // this.makePort('L', go.Spot.Left, go.Spot.LeftSide, false, true),
1484
- // this.makePort('R', go.Spot.Right, go.Spot.RightSide, true, false),
1485
- // this.makePort('B', go.Spot.Bottom, go.Spot.BottomSide, true, false),
1486
- );
1445
+ }));
1487
1446
  this.myDiagram.nodeTemplateMap.set(title, node);
1488
1447
  }
1489
1448
  makeEntityWithdrawOrDischarge(icon, title, size = {
@@ -1561,15 +1520,7 @@ export class AtoDefaultGojsEditor {
1561
1520
  toolTip: this.$('ToolTip', this.$(go.TextBlock, {
1562
1521
  margin: 4,
1563
1522
  }, new go.Binding('text', 'name').makeTwoWay())),
1564
- }, new go.Binding('text', 'name').makeTwoWay()
1565
- // {
1566
- // // define a tooltip for each node that displays the color as text
1567
- // toolTip: this.$(
1568
- // 'ToolTip',
1569
- // this.$(go.TextBlock, { margin: 4 }, new go.Binding('text', 'name')),
1570
- // ), // end of Adornment
1571
- // },
1572
- ))), this.$(go.Panel, 'Vertical', {
1523
+ }, new go.Binding('text', 'name').makeTwoWay()))), this.$(go.Panel, 'Vertical', {
1573
1524
  alignment: go.Spot.Left,
1574
1525
  alignmentFocus: new go.Spot(0, 0.5, 8, 0),
1575
1526
  }), this.$(go.Panel, 'Vertical', {
@@ -1650,38 +1601,31 @@ export class AtoDefaultGojsEditor {
1650
1601
  const self = this;
1651
1602
  return this.$('Button', {
1652
1603
  click: function (e, obj) {
1653
- self.openActionMenu();
1654
1604
  const filteredActions = _.filter(obj.part?.['ob']?.actions ?? actions, (action) => {
1655
1605
  // Filter Insight button
1656
1606
  if (action === AtoDefaultGojsEditor.ENUM_ACTIONS.INSIGHT) {
1657
1607
  return !!obj.part?.['ob']?.id;
1658
1608
  }
1659
1609
  if (action === AtoDefaultGojsEditor.ENUM_ACTIONS.RENAME &&
1660
- obj.part?.['ob']?.type !==
1661
- AtoGojsEditorModel.ENUM_TEMPLATES.TEXT_NODE &&
1610
+ obj.part?.['ob']?.type !== AtoGojsEditorModel.ENUM_TEMPLATES.TEXT_NODE &&
1662
1611
  AtoGojsEditorModel.TYPE_COMPONENT_WATER?.includes(obj.part?.['ob']?.systemType) &&
1663
- obj.part?.['ob']?.topologyType !==
1664
- ATO_ECOMPONENT_PLANT_TYPE.WATER &&
1665
- obj.part?.['ob']?.topologyType !==
1666
- ATO_ECOMPONENT_PLANT_TYPE.WATER_PLANT_CELL) {
1612
+ obj.part?.['ob']?.topologyType !== ATO_ECOMPONENT_PLANT_TYPE.WATER &&
1613
+ obj.part?.['ob']?.topologyType !== ATO_ECOMPONENT_PLANT_TYPE.WATER_PLANT_CELL) {
1667
1614
  return false;
1668
1615
  }
1669
1616
  if (action === AtoDefaultGojsEditor.ENUM_ACTIONS.OUTFLOW &&
1670
1617
  self.plantSatus === ATO_EPlantType.BASIC_PLANT &&
1671
- obj.part?.data?.type ===
1672
- AtoGojsEditorModel.ENUM_TEMPLATES.TEXT_NODE) {
1618
+ obj.part?.data?.type === AtoGojsEditorModel.ENUM_TEMPLATES.TEXT_NODE) {
1673
1619
  return false;
1674
1620
  }
1675
1621
  return true;
1676
1622
  }).map((e) => {
1677
- if (ATO_ECOMPONENT_PLANT_TYPE.STEAM ===
1678
- obj.part?.['ob']?.topologyType &&
1623
+ if (ATO_ECOMPONENT_PLANT_TYPE.STEAM === obj.part?.['ob']?.topologyType &&
1679
1624
  e === AtoDefaultGojsEditor.ENUM_ACTIONS.INSIGHT) {
1680
1625
  return AtoDefaultGojsEditor.ENUM_ACTIONS.DATA_MAPPING;
1681
1626
  }
1682
1627
  if (e === AtoDefaultGojsEditor.ENUM_ACTIONS.FLOW_DETAILS &&
1683
- obj?.part?.['ob']?.systemType ===
1684
- AtoGojsEditorModel.ENUM_TYPES.COOLING_TOWER) {
1628
+ obj?.part?.['ob']?.systemType === AtoGojsEditorModel.ENUM_TYPES.COOLING_TOWER) {
1685
1629
  return AtoDefaultGojsEditor.ENUM_ACTIONS.FLOW_DETAILS_AND_WIZARD;
1686
1630
  }
1687
1631
  return e;
@@ -1722,8 +1666,7 @@ export class AtoDefaultGojsEditor {
1722
1666
  break;
1723
1667
  case AtoDefaultGojsEditor.ENUM_ACTIONS.RENAME:
1724
1668
  onClickFn = () => {
1725
- if (obj.part?.data?.type ===
1726
- AtoGojsEditorModel.ENUM_TEMPLATES.TEXT_NODE) {
1669
+ if (obj.part?.data?.type === AtoGojsEditorModel.ENUM_TEMPLATES.TEXT_NODE) {
1727
1670
  self.onRename.emit({
1728
1671
  left: e?.['Wr']?.x - 50,
1729
1672
  top: e?.['Wr']?.y,
@@ -1778,6 +1721,7 @@ export class AtoDefaultGojsEditor {
1778
1721
  },
1779
1722
  };
1780
1723
  });
1724
+ self.openActionMenu();
1781
1725
  },
1782
1726
  'ButtonBorder.strokeWidth': 0,
1783
1727
  'ButtonBorder.fill': 'white',
@@ -1833,8 +1777,7 @@ export class AtoDefaultGojsEditor {
1833
1777
  if (nodedata?.movable !== undefined && nodedata?.movable !== null) {
1834
1778
  newnode.movable = nodedata?.movable;
1835
1779
  }
1836
- newnode.location = new go.Point(fromnode.location.x + 160, fromnode.location.y +
1837
- this.findLocYFromnode(fromnode) * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT);
1780
+ newnode.location = new go.Point(fromnode.location.x + 160, fromnode.location.y + this.findLocYFromnode(fromnode) * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT);
1838
1781
  e.diagram.commitTransaction('Create Node and Link');
1839
1782
  }
1840
1783
  findLocYFromnode(fromnode) {
@@ -1854,20 +1797,12 @@ export class AtoDefaultGojsEditor {
1854
1797
  return this.isEmptyYLoc(locYAlreadyExist, i);
1855
1798
  }
1856
1799
  isEmptyYLoc(locYAlreadyExist, i) {
1857
- if (!_.some(locYAlreadyExist, (x) => x <
1858
- i * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT +
1859
- AtoDefaultGojsEditor.DISTANCE_2_OUTPUT / 2 &&
1860
- x >
1861
- i * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT -
1862
- AtoDefaultGojsEditor.DISTANCE_2_OUTPUT / 2)) {
1800
+ if (!_.some(locYAlreadyExist, (x) => x < i * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT + AtoDefaultGojsEditor.DISTANCE_2_OUTPUT / 2 &&
1801
+ x > i * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT - AtoDefaultGojsEditor.DISTANCE_2_OUTPUT / 2)) {
1863
1802
  return i;
1864
1803
  }
1865
- if (!_.some(locYAlreadyExist, (x) => x <
1866
- -i * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT +
1867
- AtoDefaultGojsEditor.DISTANCE_2_OUTPUT / 2 &&
1868
- x >
1869
- -i * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT -
1870
- AtoDefaultGojsEditor.DISTANCE_2_OUTPUT / 2)) {
1804
+ if (!_.some(locYAlreadyExist, (x) => x < -i * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT + AtoDefaultGojsEditor.DISTANCE_2_OUTPUT / 2 &&
1805
+ x > -i * AtoDefaultGojsEditor.DISTANCE_2_OUTPUT - AtoDefaultGojsEditor.DISTANCE_2_OUTPUT / 2)) {
1871
1806
  return -i;
1872
1807
  }
1873
1808
  return null;
@@ -1903,9 +1838,7 @@ export class AtoDefaultGojsEditor {
1903
1838
  width: 40,
1904
1839
  height: 40,
1905
1840
  alignment: align,
1906
- stretch: horizontal
1907
- ? go.GraphObject.Horizontal
1908
- : go.GraphObject.Vertical,
1841
+ stretch: horizontal ? go.GraphObject.Horizontal : go.GraphObject.Vertical,
1909
1842
  portId: name,
1910
1843
  fromSpot: spot,
1911
1844
  fromLinkable: output,
@@ -1952,35 +1885,7 @@ export class AtoDefaultGojsEditor {
1952
1885
  stroke: '#919CA5',
1953
1886
  width: 40,
1954
1887
  height: 40, // Match the panel's height
1955
- })
1956
- // this.$(
1957
- // go.TextBlock,
1958
- // {
1959
- // name: 'textBlock',
1960
- // margin: 4,
1961
- // text: '\uf0da', // Mã Unicode tương ứng với fa-caret-left
1962
- // font: '900 12px "Font Awesome 6 Pro"',
1963
- // stroke: 'white', // Đặt màu chữ thành màu trắng
1964
- // cursor: 'pointer',
1965
- // visible: false,
1966
- // },
1967
- // new go.Binding('text', 'name', (_) => {
1968
- // switch (name) {
1969
- // case 'T':
1970
- // case 'B': {
1971
- // return '\uf0d7';
1972
- // }
1973
- // case 'L':
1974
- // case 'R': {
1975
- // return '\uf0da';
1976
- // }
1977
- // default: {
1978
- // return '\uf0d7';
1979
- // }
1980
- // }
1981
- // }),
1982
- // ),
1983
- );
1888
+ }));
1984
1889
  }
1985
1890
  makePort(name, align, spot, output, input) {
1986
1891
  // if (this._initialOptions.isReadOnly) {
@@ -1995,9 +1900,7 @@ export class AtoDefaultGojsEditor {
1995
1900
  width: horizontal ? NaN : 8,
1996
1901
  height: !horizontal ? NaN : 8,
1997
1902
  alignment: align,
1998
- stretch: horizontal
1999
- ? go.GraphObject.Horizontal
2000
- : go.GraphObject.Vertical,
1903
+ stretch: horizontal ? go.GraphObject.Horizontal : go.GraphObject.Vertical,
2001
1904
  portId: name,
2002
1905
  fromSpot: spot,
2003
1906
  fromLinkable: output,
@@ -2046,12 +1949,10 @@ export class AtoDefaultGojsEditor {
2046
1949
  return false;
2047
1950
  }
2048
1951
  if (data?.flowOfPlantCell) {
2049
- if (data?.flowOfPlantCell === ATO_ENUM_FLOW_DIRECTION.INFLOW &&
2050
- name === 'L') {
1952
+ if (data?.flowOfPlantCell === ATO_ENUM_FLOW_DIRECTION.INFLOW && name === 'L') {
2051
1953
  return true;
2052
1954
  }
2053
- if (data?.flowOfPlantCell === ATO_ENUM_FLOW_DIRECTION.OUTFLOW &&
2054
- name === 'R') {
1955
+ if (data?.flowOfPlantCell === ATO_ENUM_FLOW_DIRECTION.OUTFLOW && name === 'R') {
2055
1956
  return true;
2056
1957
  }
2057
1958
  return false;
@@ -2145,84 +2046,7 @@ export class AtoDefaultGojsEditor {
2145
2046
  // stroke: AtoGojsEditorModel.ENUM_COLORS.RESOLUTION_BLUE,
2146
2047
  strokeWidth: 2,
2147
2048
  // strokeDashArray: [5, 5],
2148
- })
2149
- // this.$(go.Placeholder),
2150
- // this.$(go.Placeholder, { padding: new go.Margin(0, 0, 0, 0) }),
2151
- )
2152
- // this.$(go.TextBlock, title, {
2153
- // row: 0,
2154
- // margin: new go.Margin(0, 0, 0, 0),
2155
- // stroke: '#444444',
2156
- // font: 'normal 10pt Arial',
2157
- // textAlign: 'center',
2158
- // alignment: go.Spot.Left,
2159
- // },
2160
- // new go.Binding('text', 'key').makeTwoWay(),),
2161
- // this.$(
2162
- // go.Panel,
2163
- // 'Table',
2164
- // {
2165
- // alignment: go.Spot.TopLeft,
2166
- // alignmentFocus: new go.Spot(0, 0, -10, -10),
2167
- // // padding: new go.Margin(0, 0, 50, 0),
2168
- // },
2169
- // this.$(
2170
- // go.Panel,
2171
- // 'Horizontal',
2172
- // {
2173
- // row: 0,
2174
- // alignment: go.Spot.Left,
2175
- // },
2176
- // this.$(go.Picture, icon, {
2177
- // row: 0,
2178
- // // alignment: go.Spot.Center,
2179
- // alignment: go.Spot.Left,
2180
- // maxSize: new go.Size(40, 40),
2181
- // imageStretch: go.GraphObject.Uniform,
2182
- // }),
2183
- // this.$(
2184
- // go.Panel,
2185
- // 'Table',
2186
- // {
2187
- // column: 1,
2188
- // defaultAlignment: go.Spot.Left,
2189
- // alignmentFocus: new go.Spot(0, 0, 0, 20),
2190
- // },
2191
- // this.$(go.TextBlock, title, {
2192
- // row: 0,
2193
- // margin: new go.Margin(3, 3, 5, 10),
2194
- // // maxSize: new go.Size(size.w - 20, NaN),
2195
- // stroke: '#444444',
2196
- // font: 'normal 10pt Arial',
2197
- // textAlign: 'center',
2198
- // alignment: go.Spot.Left,
2199
- // }),
2200
- // this.$(
2201
- // go.TextBlock,
2202
- // {
2203
- // row: 1,
2204
- // margin: new go.Margin(0, 3, 3, 10),
2205
- // editable: true,
2206
- // // maxSize: new go.Size(size.w - 20, 40),
2207
- // stroke: '#000D42',
2208
- // font: 'bold 10pt Arial',
2209
- // textAlign: 'center',
2210
- // wrap: go.TextBlock.None,
2211
- // overflow: go.TextBlock.OverflowEllipsis,
2212
- // },
2213
- // new go.Binding('text', 'name').makeTwoWay(),
2214
- // {
2215
- // // define a tooltip for each node that displays the color as text
2216
- // toolTip: this.$(
2217
- // 'ToolTip',
2218
- // this.$(go.TextBlock, { margin: 4 }, new go.Binding('text', 'name')),
2219
- // ), // end of Adornment
2220
- // },
2221
- // ),
2222
- // ),
2223
- // ),
2224
- // ),
2225
- );
2049
+ })));
2226
2050
  this.myDiagram.groupTemplateMap.set(title, node);
2227
2051
  }
2228
2052
  makeGroupTemplate(icon, title, size = { w: 80, h: 80 }) {
@@ -2359,9 +2183,7 @@ export class AtoDefaultGojsEditor {
2359
2183
  // imageStretch: go.GraphObject.Uniform,
2360
2184
  // margin: new go.Margin(130, 0, 0, 0),
2361
2185
  }, new go.Binding('margin', 'margin'), new go.Binding('width', 'width'), new go.Binding('height', 'height'), new go.Binding('source', '', (data) => {
2362
- return data?.source
2363
- ? data?.source
2364
- : AtoGojsEditorModel.IMAGE_RO_WATER_TREATMENT_PATH;
2186
+ return data?.source ? data?.source : AtoGojsEditorModel.IMAGE_RO_WATER_TREATMENT_PATH;
2365
2187
  }))));
2366
2188
  this.myDiagram.nodeTemplateMap.set(AtoGojsEditorModel.ENUM_TEMPLATES.IMAGE_TEMPLATE, node);
2367
2189
  }
@@ -2462,8 +2284,7 @@ export class AtoDefaultGojsEditor {
2462
2284
  itemTemplate: this.$(go.Panel, 'TableRow', {
2463
2285
  cursor: 'pointer',
2464
2286
  click: (e, obj) => {
2465
- if (obj.panel.part.data?.dataTable[obj.row]?.isEditable ===
2466
- false) {
2287
+ if (obj.panel.part.data?.dataTable[obj.row]?.isEditable === false) {
2467
2288
  return;
2468
2289
  }
2469
2290
  self.onClikParamOfTable.emit({
@@ -2522,8 +2343,7 @@ export class AtoDefaultGojsEditor {
2522
2343
  ? `${data?.tagName || ''} `
2523
2344
  : ''}${data?.value}`;
2524
2345
  }), new go.Binding('visible', '', (data) => {
2525
- if (!!this._initialOptions.isReadOnly &&
2526
- data?.tagName) {
2346
+ if (!!this._initialOptions.isReadOnly && data?.tagName) {
2527
2347
  return true;
2528
2348
  }
2529
2349
  return !!data?.value;
@@ -2537,9 +2357,7 @@ export class AtoDefaultGojsEditor {
2537
2357
  return data.color;
2538
2358
  }), new go.Binding('maxSize', '', (data) => {
2539
2359
  if (!data?.isReadOnly && !this._initialOptions.isReadOnly) {
2540
- return new go.Size(data?.maxSizeValue?.width
2541
- ? data?.maxSizeValue?.width - 15
2542
- : NaN, data?.maxSizeValue?.height ?? NaN);
2360
+ return new go.Size(data?.maxSizeValue?.width ? data?.maxSizeValue?.width - 15 : NaN, data?.maxSizeValue?.height ?? NaN);
2543
2361
  }
2544
2362
  return data?.maxSizeValue;
2545
2363
  }), new go.Binding('font', '', (data) => {
@@ -2559,13 +2377,11 @@ export class AtoDefaultGojsEditor {
2559
2377
  height: 14,
2560
2378
  width: 14,
2561
2379
  }, new go.Binding('visible', '', (data, panel) => {
2562
- return (!data?.isReadOnly && !this._initialOptions.isReadOnly);
2380
+ return !data?.isReadOnly && !this._initialOptions.isReadOnly;
2563
2381
  }), new go.Binding('opacity', '', (data, panel) => {
2564
2382
  return data?.isEditable === false ? 0.6 : 1;
2565
2383
  })))),
2566
- }
2567
- // new go.Binding('text', 'name')
2568
- )));
2384
+ })));
2569
2385
  this.myDiagram.nodeTemplateMap.set(AtoGojsEditorModel.ENUM_TEMPLATES.PARAM_TABLE, node);
2570
2386
  }
2571
2387
  makeMassBalance() {
@@ -2646,7 +2462,7 @@ export class AtoDefaultGojsEditor {
2646
2462
  toLinkable: true,
2647
2463
  }, new go.Binding('alignment', '', (x) => {
2648
2464
  return x?.isViewGeneral && x?.hasOutFlow
2649
- ? new go.Spot(0, 0, 505, 665)
2465
+ ? new go.Spot(0, 0, 505, 500)
2650
2466
  : new go.Spot(0, 0, 480, 525);
2651
2467
  })));
2652
2468
  this.myDiagram.groupTemplateMap.set(title, node);
@@ -2663,7 +2479,9 @@ export class AtoDefaultGojsEditor {
2663
2479
  fill: '#FCFCFD',
2664
2480
  stroke: AtoGojsEditorModel.ENUM_COLORS.RESOLUTION_BLUE,
2665
2481
  strokeWidth: 2,
2666
- }), this.$(go.Placeholder, new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify), { padding: new go.Margin(0, 0, 0, 0) })), this.$(go.Panel, 'Spot', {
2482
+ }), this.$(go.Placeholder, new go.Binding('location', 'loc', go.Point.parse).makeTwoWay(go.Point.stringify), {
2483
+ padding: new go.Margin(0, 0, 0, 0),
2484
+ })), this.$(go.Panel, 'Spot', {
2667
2485
  width: 0,
2668
2486
  height: 0,
2669
2487
  alignment: new go.Spot(0, 0.5, 0, 112),
@@ -2952,8 +2770,7 @@ export class AtoDefaultGojsEditor {
2952
2770
  // : node?.layout;
2953
2771
  if (data?.layoutValue !== data?.layoutValueClone) {
2954
2772
  data.layoutValueClone = data?.layoutValue;
2955
- return data?.layoutValue ===
2956
- AtoGojsEditorModel.ENUM_LAYOUT_EDITOR.AUTO
2773
+ return data?.layoutValue === AtoGojsEditorModel.ENUM_LAYOUT_EDITOR.AUTO
2957
2774
  ? self.$(go.LayeredDigraphLayout, { direction: 0 })
2958
2775
  : self.$(go.Layout);
2959
2776
  }
@@ -3114,82 +2931,7 @@ export class AtoDefaultGojsEditor {
3114
2931
  AtoDefaultGojsEditor.ENUM_ACTIONS.DETAILS,
3115
2932
  AtoDefaultGojsEditor.ENUM_ACTIONS.OUTFLOW,
3116
2933
  AtoDefaultGojsEditor.ENUM_ACTIONS.DELETE,
3117
- ])
3118
- // this.$(
3119
- // // Edit Text
3120
- // 'Button',
3121
- // {
3122
- // click: self.editTextGroupZone,
3123
- // 'ButtonBorder.strokeWidth': 0,
3124
- // 'ButtonBorder.fill': 'white',
3125
- // },
3126
- // this.$(go.TextBlock, {
3127
- // margin: 4,
3128
- // text: '\ue1bf',
3129
- // font: '20px "Font Awesome 6 Pro"',
3130
- // cursor: 'pointer',
3131
- // stroke: '#2c2c2c',
3132
- // }),
3133
- // ),
3134
- // this.$(
3135
- // // Open Detail
3136
- // 'Button',
3137
- // {
3138
- // click: (e, obj: any) => {
3139
- // const node = obj.part;
3140
- // self.onOpenDetail.emit({
3141
- // node,
3142
- // });
3143
- // },
3144
- // 'ButtonBorder.strokeWidth': 0,
3145
- // 'ButtonBorder.fill': 'white',
3146
- // },
3147
- //
3148
- // this.$(go.TextBlock, {
3149
- // margin: 4,
3150
- // text: '\ue49a',
3151
- // font: '20px "Font Awesome 6 Pro"',
3152
- // cursor: 'pointer',
3153
- // }),
3154
- // ),
3155
- // !this._initialOptions.isReadOnly
3156
- // ? this.$(
3157
- // 'Button',
3158
- // {
3159
- // actionMove: self.dragNewNode, // defined below, to support dragging from the button
3160
- // _dragData: {
3161
- // type: AtoGojsEditorModel.ENUM_TEMPLATES.TEXT_NODE,
3162
- // name: 0,
3163
- // color: AtoGojsEditorModel.ENUM_COLORS.BLUE,
3164
- // },
3165
- // click: self.clickNewNode, // defined below, to support a click on the button
3166
- // 'ButtonBorder.strokeWidth': 0,
3167
- // 'ButtonBorder.fill': 'white',
3168
- // },
3169
- // this.$(go.TextBlock, {
3170
- // margin: 4,
3171
- // text: '\ue157',
3172
- // font: '20px "Font Awesome 6 Pro"',
3173
- // cursor: 'pointer',
3174
- // stroke: '#2c2c2c',
3175
- // }),
3176
- // )
3177
- // : {},
3178
- // this.$(
3179
- // 'Button',
3180
- // {
3181
- // click: self.deleteNode,
3182
- // 'ButtonBorder.strokeWidth': 0,
3183
- // 'ButtonBorder.fill': 'white',
3184
- // },
3185
- // this.$(go.TextBlock, {
3186
- // margin: 4,
3187
- // text: '\uf2ed',
3188
- // font: '20px "Font Awesome 6 Pro"',
3189
- // cursor: 'pointer',
3190
- // }),
3191
- // ),
3192
- )),
2934
+ ]))),
3193
2935
  }, this.$(go.Panel, 'Auto', this.$(go.Shape, 'RoundedRectangle', {
3194
2936
  fill: 'transparent',
3195
2937
  stroke: AtoGojsEditorModel.ENUM_COLORS.RESOLUTION_BLUE,
@@ -3303,10 +3045,7 @@ export class AtoDefaultGojsEditor {
3303
3045
  value: x?.quantity,
3304
3046
  unit: x?.unit,
3305
3047
  });
3306
- return (formatted.shortenedNumber +
3307
- ' ' +
3308
- formatted.unitPrefixes +
3309
- x?.unit ?? '');
3048
+ return formatted.shortenedNumber + ' ' + formatted.unitPrefixes + x?.unit ?? '';
3310
3049
  }), new go.Binding('visible', 'data', (x) => typeof x?.quantity === 'number')), this.$(go.TextBlock, {
3311
3050
  margin: new go.Margin(0, 5, 10, 0),
3312
3051
  textAlign: 'center',
@@ -3561,8 +3300,7 @@ export class AtoDefaultGojsEditor {
3561
3300
  // return;
3562
3301
  // }
3563
3302
  // const newDocument = newWindow?.document;
3564
- if (!this.myDiagram?.model?.nodeDataArray?.length &&
3565
- !this.myDiagram?.model?.linkDataArray?.length) {
3303
+ if (!this.myDiagram?.model?.nodeDataArray?.length && !this.myDiagram?.model?.linkDataArray?.length) {
3566
3304
  return;
3567
3305
  }
3568
3306
  const svg = this.myDiagram.makeSvg({
@@ -3583,8 +3321,7 @@ export class AtoDefaultGojsEditor {
3583
3321
  svgElement.setAttribute('stroke', 'rgba(64, 181, 206, 0.6)');
3584
3322
  }
3585
3323
  // Empty Value
3586
- if (graphObject?.name === 'textBlockValue' ||
3587
- graphObject?.name === 'textBlockUnitPrefixes') {
3324
+ if (graphObject?.name === 'textBlockValue' || graphObject?.name === 'textBlockUnitPrefixes') {
3588
3325
  svgElement.textContent = '';
3589
3326
  }
3590
3327
  if (svgElement.clipPath) {
@@ -3633,6 +3370,45 @@ export class AtoDefaultGojsEditor {
3633
3370
  this.menuTrigger.openMenu();
3634
3371
  }
3635
3372
  }
3373
+ // openActionMenu(data: {
3374
+ // e: any,
3375
+ // obj: any,
3376
+ // type?: string;
3377
+ // }) {
3378
+ // let mousePt = this.myDiagram.lastInput.viewPoint;
3379
+ // let template = document.getElementById(this.actionMenuId);
3380
+ // switch (data?.type) {
3381
+ // case 'droplist': {
3382
+ // // When this node is clicked, adjust the menu position
3383
+ // const buttonRect = data?.obj?.part?.actualBounds;
3384
+ // const diagram = data?.e.diagram;
3385
+ // const point = diagram.transformDocToView(new go.Point(buttonRect?.x, buttonRect?.bottom));
3386
+ // mousePt = {
3387
+ // x: point.x,
3388
+ // y: point.y
3389
+ // }
3390
+ // break;
3391
+ // }
3392
+ // case 'action': {
3393
+ // mousePt = this.myDiagram.lastInput.viewPoint;
3394
+ // this.optionList = this.actions;
3395
+ // template = document.getElementById(this.actionMenuId);
3396
+ // break;
3397
+ // }
3398
+ // default: {
3399
+ // mousePt = this.myDiagram.lastInput.viewPoint;
3400
+ // this.optionList = this.actions;
3401
+ // template = document.getElementById(this.actionMenuId);
3402
+ // }
3403
+ // }
3404
+ // if (template) {
3405
+ // template.style.display = '';
3406
+ // template.style.position = 'absolute';
3407
+ // template.style.left = mousePt.x + 'px';
3408
+ // template.style.top = mousePt.y + 'px';
3409
+ // this.menuTrigger.openMenu();
3410
+ // }
3411
+ // }
3636
3412
  unsubscribeAll() {
3637
3413
  if (this._subscriptionList) {
3638
3414
  this._subscriptionList.unsubscribe();
@@ -3775,4 +3551,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3775
3551
  };
3776
3552
  AtoDefaultGojsEditor.DISTANCE_2_OUTPUT = 60;
3777
3553
  })(AtoDefaultGojsEditor || (AtoDefaultGojsEditor = {}));
3778
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1nb2pzLWVkaXRvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0by13YXRlci1saWIvc3JjL2xpYi9tb2RlbHMvZGVmYXVsdC1nb2pzLWVkaXRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixPQUFPLEVBQ1AsWUFBWSxFQUNaLFFBQVEsR0FDVCxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU83RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFQN0UsTUFBTSxVQUFVLEdBQUcsa0NBQWtDLENBQUM7QUFDdEQsTUFBTSxLQUFLLEdBQUcsZ0NBQWdDLENBQUM7QUFDL0MsTUFBTSxVQUFVLEdBQUcscUNBQXFDLENBQUM7QUFD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LElBQUksRUFBRSxZQUFZLENBQUMsT0FBTztZQUMxQixhQUFhLEVBQUUsdUJBQXVCO1lBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1NBQ2xCO1FBQ0QsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckIsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQ3pCLGFBQWEsRUFBRSxrQkFBa0I7WUFDakMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7U0FDbEI7UUFDRCxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN0QixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87WUFDMUIsYUFBYSxFQUFFLFlBQVk7WUFDM0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7U0FDbEI7UUFDRCxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUMzQixJQUFJLEVBQUUsWUFBWSxDQUFDLFlBQVk7WUFDL0IsYUFBYSxFQUFFLFlBQVk7WUFDM0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7U0FDbEI7UUFDRCxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuQixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsYUFBYSxFQUFFLHlCQUF5QjtZQUN4QyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztTQUNsQjtRQUNELENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzFCLElBQUksRUFBRSxZQUFZLENBQUMsV0FBVztZQUM5QixhQUFhLEVBQUUsY0FBYztZQUM3QixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztTQUNsQjtLQUNGLENBQUM7SUFFVyxzQ0FBaUIsR0FBRyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxFQWhGZ0Isb0JBQW9CLEtBQXBCLG9CQUFvQixRQWdGcEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXRvR29qc0VkaXRvck1vZGVsIH0gZnJvbSAnLi9nb2pzLWVkaXRvci5tb2RlbCc7XG5pbXBvcnQgKiBhcyBnbyBmcm9tICdnb2pzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBHT19MSUNFTlNFX0tFWSB9IGZyb20gJy4uL2NvbnN0YW50cy9rZXkuY29uc3QnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXRpbHMvdXRpbHMuc2VydmljZSc7XG5pbXBvcnQge1xuICBBVE9fRU5VTV9GTE9XX0RJUkVDVElPTixcbiAgQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRSxcbiAgTk9fREFUQSxcbiAgVEVYVF9VTktOT1dOLFxuICBWQUxVRV9OQSxcbn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlLmNvbnN0JztcbmltcG9ydCB7IEFUT19FUGxhbnRUeXBlIH0gZnJvbSAnLi4vY29uc3RhbnRzL3BsYW50LmNvbnN0YW50JztcblxuY29uc3QgSUNPTl9BTEVSVCA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9TdGF0aW9uLnN2Zyc7XG5jb25zdCBBUlJPVyA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9hcnJvdy5zdmcnO1xuY29uc3QgQVJST1dfR1JBWSA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9hcnJvdy1ncmF5LnN2Zyc7XG5jb25zdCBST19MSU5FX0RJUlRZID0gJy9hc3NldHMvaW1hZ2VzL2ljb25zL3JvX2xpbmVfZGlydHkuc3ZnJztcbmNvbnN0IE9VVEZMT1dfTElORV9ESVJUWSA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9vdXRmbG93X2xpbmVfZGlydHkucG5nJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUNPTlNfQkFTRTY0IH0gZnJvbSAnLi4vY29uc3RhbnRzL2ljb24tYmFzZTY0LmNvbnN0JztcbmltcG9ydCB7IEFUT19TUE9UX0xPQ0FUSU9OX1RZUEUgfSBmcm9tICcuLi9jb25zdGFudHMvY29tcG9uZW50cy1ncm91cC1jb25zdCc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIEF0b0RlZmF1bHRHb2pzRWRpdG9yIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnbWVudVRyaWdnZXInKSBtZW51VHJpZ2dlcjogYW55O1xuICBASW5wdXQoKSBsaW5rVmFsaWRhdGlvbjogKFxuICAgIGZyb21Ob2RlOiBnby5Ob2RlLFxuICAgIGZyb21Qb3J0OiBnby5HcmFwaE9iamVjdCxcbiAgICB0b05vZGU6IGdvLk5vZGUsXG4gICAgdG9Qb3J0OiBnby5HcmFwaE9iamVjdCxcbiAgICBsaW5rOiBnby5MaW5rXG4gICkgPT4gYm9vbGVhbjtcblxuICBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBhY3Rpb25NZW51SWQ6IHN0cmluZyA9ICdhY3Rpb25NZW51SWQnO1xuXG4gIG15RGlhZ3JhbURpdjogYW55ID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJy0nICsgbW9tZW50KCkudmFsdWVPZigpO1xuICBteURpYWdyYW06IGFueTtcbiAgJCA9IGdvLkdyYXBoT2JqZWN0Lm1ha2U7XG4gIGFuaW1hdGlvbkludGVydmFsOiBhbnk7XG4gIGRlZmF1bHRTY2FsZVpvb21Ub0ZpdD86IG51bWJlcjtcblxuICBwcml2YXRlIF9pbml0aWFsT3B0aW9uczogYW55ID0ge1xuICAgICd0b29sTWFuYWdlci5ob3ZlckRlbGF5JzogMjAwLFxuICAgIC8vICdkcmFnZ2luZ1Rvb2wuaXNFbmFibGVkJzogZmFsc2UsXG4gICAgLy8gaW5pdGlhbEF1dG9TY2FsZTogZ28uRGlhZ3JhbS5Vbmlmb3JtVG9GaWxsLFxuICAgIC8vIGF1dG9TY3JvbGxSZWdpb246IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgIGxheW91dDogdGhpcy4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KSxcbiAgICBpbml0aWFsQ29udGVudEFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgaW5pdGlhbEF1dG9TY2FsZTogZ28uRGlhZ3JhbS5Vbmlmb3JtLFxuICAgIC8vIGNvbnRlbnRBbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgIC8vIHRoaXMuJChnby5Gb3JjZURpcmVjdGVkTGF5b3V0KSxcbiAgICAndW5kb01hbmFnZXIuaXNFbmFibGVkJzogdHJ1ZSwgLy8gZW5hYmxlIHVuZG8gJiByZWRvXG4gICAgLy8gXCJhbmltYXRpb25NYW5hZ2VyLmlzSW5pdGlhbFwiOiBmYWxzZSxcbiAgICAvLyBcImFuaW1hdGlvbk1hbmFnZXIuaXNFbmFibGVkXCI6IGZhbHNlLFxuICAgIC8vIFwiZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkXCI6IHRydWVcbiAgICBkcmFnU2VsZWN0aW5nVG9vbDogdGhpcy4kKFxuICAgICAgZ28uRHJhZ1NlbGVjdGluZ1Rvb2wsXG4gICAgICB7IGlzUGFydGlhbEluY2x1c2lvbjogdHJ1ZSwgZGVsYXk6IDUwIH0sXG4gICAgICB7XG4gICAgICAgIGJveDogdGhpcy4kKFxuICAgICAgICAgIGdvLlBhcnQsIC8vIHJlcGxhY2UgdGhlIG1hZ2VudGEgYm94IHdpdGggYSByZWQgb25lXG4gICAgICAgICAgeyBsYXllck5hbWU6ICdUb29sJywgc2VsZWN0YWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHtcbiAgICAgICAgICAgIG5hbWU6ICdTSEFQRScsXG4gICAgICAgICAgICBmaWxsOiAncmdiYSgyNTUsMCwwLDApJyxcbiAgICAgICAgICAgIHN0cm9rZTogJyNFOTVGNDcnLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgIH1cbiAgICApLFxuICAgICdsaW5raW5nVG9vbC5saW5rVmFsaWRhdGlvbic6IHRoaXMuY2hlY2tMaW5rQ29uZGl0aW9uLmJpbmQodGhpcyksXG4gICAgJ2RyYWdnaW5nVG9vbC5kb01vdXNlTW92ZSc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGRvIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBieSBjYWxsaW5nIHRoZSBzdXBlciBtZXRob2RcbiAgICAgIGdvLkRyYWdnaW5nVG9vbC5wcm90b3R5cGUuZG9Nb3VzZU1vdmUuY2FsbCh0aGlzKTtcbiAgICAgIC8vIGlmIGRyYWdnaW5nLW91dCBmcm9tIHRoZSBkaWFncmFtIGlzIG5vdCBhbGxvd2VkLCBhbmRcbiAgICAgIC8vIGlmIG1vdXNlIGlzIG91dHNpZGUgb2Ygdmlld3BvcnRcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuZGlhZ3JhbS5hbGxvd0RyYWdPdXQgJiZcbiAgICAgICAgIXRoaXMuZGlhZ3JhbS52aWV3cG9ydEJvdW5kcy5jb250YWluc1BvaW50KFxuICAgICAgICAgIHRoaXMuZGlhZ3JhbS5sYXN0SW5wdXQuZG9jdW1lbnRQb2ludFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaWFncmFtLmVuc3VyZUJvdW5kcygpO1xuICAgICAgICBjb25zdCB2cCA9IHRoaXMuZGlhZ3JhbS5sYXN0SW5wdXQudmlld1BvaW50O1xuICAgICAgICBjb25zdCBkcCA9IHRoaXMuZGlhZ3JhbS5wb3NpdGlvbi5jb3B5KCk7XG4gICAgICAgIGlmICh2cC54IDwgMCkgZHAueCAtPSAxMDtcbiAgICAgICAgZWxzZSBpZiAodnAueCA+IDApIGRwLnggKz0gMTA7XG4gICAgICAgIGlmICh2cC55IDwgMCkgZHAueSAtPSAxMDtcbiAgICAgICAgZWxzZSBpZiAodnAueSA+IDApIGRwLnkgKz0gMTA7XG4gICAgICAgIHRoaXMuZGlhZ3JhbS5wb3NpdGlvbiA9IGRwOyAvLyBzY3JvbGwgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbW91c2VcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIExheW91dENvbXBsZXRlZDogKCkgPT4ge1xuICAgIC8vICAgICB0aGlzLm15RGlhZ3JhbS56b29tVG9GaXQoKTtcbiAgICAvLyAgICAgdGhpcy5kZWZhdWx0U2NhbGVab29tVG9GaXQgPSB0aGlzLm15RGlhZ3JhbS5zY2FsZTtcbiAgICAvLyAgICAgaWYgKCF0aGlzLmluaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IHNpemVNYXJnaW4gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMTU7XG4gICAgLy8gICAgICAgICB0aGlzLm15RGlhZ3JhbS5wYWRkaW5nID0gbmV3IGdvLk1hcmdpbihzaXplTWFyZ2luKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH0sXG4gIH07XG5cbiAgY2hlY2tMaW5rQ29uZGl0aW9uKFxuICAgIGZyb21Ob2RlOiBnby5Ob2RlLFxuICAgIGZyb21Qb3J0OiBnby5HcmFwaE9iamVjdCxcbiAgICB0b05vZGU6IGdvLk5vZGUsXG4gICAgdG9Qb3J0OiBnby5HcmFwaE9iamVjdCxcbiAgICBsaW5rOiBnby5MaW5rXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmxpbmtWYWxpZGF0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5saW5rVmFsaWRhdGlvbihmcm9tTm9kZSwgZnJvbVBvcnQsIHRvTm9kZSwgdG9Qb3J0LCBsaW5rKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7IC8vIE3hurdjIMSR4buLbmggY2hvIHRyxrDhu51uZyBo4bujcCBraMO0bmcgY8OzIGjDoG0gbGlua1ZhbGlkYXRpb24gxJHGsOG7o2MgdHJ1eeG7gW4gdsOgb1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGluaXRpYWxPcHRpb25zKHY6IGFueSkge1xuICAgIHRoaXMuX2luaXRpYWxPcHRpb25zID0gXy5tZXJnZSh0aGlzLl9pbml0aWFsT3B0aW9ucywgdik7XG4gICAgLy8gXy5leHRlbmQodiwgdGhpcy5faW5pdGlhbE9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsT3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgX2VkaXRvcjogQXRvR29qc0VkaXRvck1vZGVsO1xuICBASW5wdXQoKSBzZXQgZWRpdG9yKHY6IEF0b0dvanNFZGl0b3JNb2RlbCkge1xuICAgIHRoaXMuX2VkaXRvciA9IHY7XG4gICAgaWYgKHYpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXREaWFncmFtKCk7XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBlZGl0b3IoKTogQXRvR29qc0VkaXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdG9yO1xuICB9XG5cbiAgQElucHV0KCkgaXNTaG93Tm9kZUluZm86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhbnRTYXR1czogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsUmVmOiBFbGVtZW50UmVmKSB7XG4gICAgZ28uRGlhZ3JhbS5saWNlbnNlS2V5ID0gR09fTElDRU5TRV9LRVk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25Nb2RlbENoYW5nZUxpc3RlbmVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uQ2xpY2tJbmZvQnV0dG9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25PcGVuV2l6YXJkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25PcGVuRGV0YWlsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25PcGVuQXNzZXRQYXJhbWV0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbk9wZW5JbnNpZ2h0TWFwcGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uSG92ZXJJbmZvQnV0dG9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25Ib3ZlckFsZXJ0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25Eb3VibGVDbGlja05vZGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbk9wZW5DaGFuZ2VJY29uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyBDbGljayBjb21wb25lbnRcbiAgQE91dHB1dCgpIG9uQ2xpY2tDb21wb2VudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNhbGxiYWNrSW1hZ2VUb3BvbG9neTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvLyBDbGljayBwYXJhbSBvbiBQYXJhbVRhYmxlXG4gIEBPdXRwdXQoKSBvbkNsaWtQYXJhbU9mVGFibGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLy8gRGVsZXRlIE5vZGVcbiAgQE91dHB1dCgpIG9uRGVsZXRlTm9kZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uVW5kbzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLy8gUmVuYW1lXG4gIEBPdXRwdXQoKSBvblJlbmFtZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBpc0FkZGVkTW9kZWxDaGFuZ2VkTGlzdGVuZXJzOiBib29sZWFuO1xuICBjb21taXR0ZWRUcmFuc2FjdGlvblN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgLy8gQWRkU3ViIGFuZCBVblN1YlxuICBfc3Vic2NyaXB0aW9uTGlzdDogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVBbGwoKTtcbiAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICAvLyB0aGlzLm15RGlhZ3JhbT8uY2xlYXIoKTtcbiAgICBpZiAoISF0aGlzLm15RGlhZ3JhbT8uZGl2KSB7XG4gICAgICB0aGlzLm15RGlhZ3JhbS5kaXYgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5teURpYWdyYW0pIHtcbiAgICAgIHRoaXMubXlEaWFncmFtLmNsZWFyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm15RGlhZ3JhbSAhPSBudWxsICYmIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5teURpYWdyYW0gIT0gbnVsbCAmJiB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwICE9IG51bGwpIHtcbiAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuY2xlYXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubXlEaWFncmFtICE9IG51bGwgJiYgdGhpcy5teURpYWdyYW0ubGlua1RlbXBsYXRlICE9IG51bGwpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLm15RGlhZ3JhbS5saW5rVGVtcGxhdGVNYXAudG9BcnJheSgpKSB7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLmxpbmtUZW1wbGF0ZU1hcC5yZW1vdmUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5teURpYWdyYW0gPSBudWxsO1xuICB9XG5cbiAgYWRkT3JSZW1vdmVDb21wb2VudFRlbXBsYXRlKCkge1xuICAgIC8vIEFkZCBOb2RlIGFuZCBOb2RlIEdyb3VwXG4gICAgXy5mb3JFYWNoKHRoaXMuZWRpdG9yLmRhdGE/Lm5vZGVEYXRhQXJyYXksIChub2RlKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlbXBsYXRlKG5vZGUpO1xuICAgIH0pO1xuICAgIC8vIFJlbW92ZSBOb2RlIGFuZCBOb2RlIEdyb3VwXG4gICAgXy5mb3JFYWNoKHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcD8uSGIsICh0ZW1wKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRlbXA/LmtleSAmJlxuICAgICAgICAhdGhpcy5lZGl0b3IuZGF0YT8ubm9kZURhdGFBcnJheT8uc29tZShcbiAgICAgICAgICAobm9kZSkgPT4gbm9kZT8udHlwZSA9PT0gdGVtcD8ua2V5XG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAucmVtb3ZlKHRlbXA/LmtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXy5mb3JFYWNoKHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXA/LkhiLCAodGVtcCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0ZW1wPy5rZXkgJiZcbiAgICAgICAgIXRoaXMuZWRpdG9yLmRhdGE/Lm5vZGVEYXRhQXJyYXk/LnNvbWUoXG4gICAgICAgICAgKG5vZGUpID0+IG5vZGU/LnR5cGUgPT09IHRlbXA/LmtleVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5yZW1vdmUodGVtcD8ua2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZFRlbXBsYXRlKG5vZGUpIHtcbiAgICB0aGlzLmFkZE5vZGVUZW1wbGF0ZShub2RlKTtcbiAgICB0aGlzLmFkZEdyb3VwVGVtcGxhdGUobm9kZSk7XG4gIH1cblxuICBhZGRHcm91cFRlbXBsYXRlKG5vZGUpIHtcbiAgICBpZiAodGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcD8uSGI/Lltub2RlPy50eXBlXSB8fCAhbm9kZT8uaXNHcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBHcm91cFxuICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUk9fV0FURVJfVFJFQVRNRU5UKSB7XG4gICAgICB0aGlzLm1ha2VHcm91cFJPUGxhbnRUZW1wbGF0ZShcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQk9JTEVSKSB7XG4gICAgICB0aGlzLm1ha2VHcm91cEJvaWxlclRlbXBsYXRlKFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWVcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT09MSU5HX1RPV0VSKSB7XG4gICAgICB0aGlzLm1ha2VHcm91cENvb2xpbmdUb3dlclRlbXBsYXRlKFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWVcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbm9kZT8udHlwZSA9PT1cbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5JTU1FUlNFRF9VRl9XQVRFUl9UUkVBVE1FTlRTXG4gICAgKSB7XG4gICAgICB0aGlzLm1ha2VHcm91cEltbWVyc2VkVUZUZW1wbGF0ZShcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG5vZGU/LnR5cGUgPT09XG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUFJFU1NVUklaRURfVUZfV0FURVJfVFJFQVRNRU5UU1xuICAgICkge1xuICAgICAgdGhpcy5tYWtlR3JvdXBDb29saW5nVG93ZXJUZW1wbGF0ZShcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuWk9ORSkge1xuICAgICAgdGhpcy5tYWtlR3JvdXBab25lVGVtcGxhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUExBTlRfQ0VMTCAmJlxuICAgICAgbm9kZT8uaXNHcm91cFxuICAgICkge1xuICAgICAgdGhpcy5ncm91cFBsYW50Q2VsbFRlbXBsYXRlKFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWVcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QTEFOVF9DRUxMX0lOUFVUX0dST1VQXG4gICAgKSB7XG4gICAgICB0aGlzLmdyb3VwUENJbnB1dE9yT3V0VGVtcGxhdGUoXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSxcbiAgICAgICAgbmV3IGdvLk1hcmdpbigwLCA1MCwgMCwgMClcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QTEFOVF9DRUxMX09VVFBVVF9HUk9VUFxuICAgICkge1xuICAgICAgdGhpcy5ncm91cFBDSW5wdXRPck91dFRlbXBsYXRlKFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgIG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgNTApXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR1JPVVBfQkFTSUNfQ09NUE9ORU5UXG4gICAgKSB7XG4gICAgICB0aGlzLm1ha2VHcm91cEJhc2ljQ29tcG9uZW50KFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWVcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWVcbiAgICApO1xuICB9XG5cbiAgYWRkTm9kZVRlbXBsYXRlKG5vZGUpIHtcbiAgICBpZiAodGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwPy5IYltub2RlPy50eXBlXSB8fCBub2RlPy5pc0dyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE5vdCBHcm91cFxuICAgIC8vIENvbXBvbmVudCBXYXRlciBOb3JtYWxcbiAgICBpZiAoXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuVFlQRV9URU1QTEFURV9XQVRFUl9OT1JNQUw/LmluY2x1ZGVzKG5vZGU/LnR5cGUpICYmXG4gICAgICAhbm9kZT8uaXNHcm91cFxuICAgICkge1xuICAgICAgdGhpcy5tYWtlRW50aXR5VGVtcGxhdGUoXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uID8/ICcnLFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSA/PyAnJ1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gQ29tcG9uZW50IFdhdGVyIFdpdGhkcmF3IE9yIERpc2NoYXJnZVxuICAgIGlmIChcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX1dBVEVSX1dJVEhEUkFXX09SX0RJU0NIQVJHRT8uaW5jbHVkZXMoXG4gICAgICAgIG5vZGU/LnR5cGVcbiAgICAgICkgJiZcbiAgICAgICFub2RlPy5pc0dyb3VwXG4gICAgKSB7XG4gICAgICB0aGlzLm1ha2VFbnRpdHlXaXRoZHJhd09yRGlzY2hhcmdlKFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbiA/PyAnJyxcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUgPz8gJydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29tcG9uZW50IEVuZXJneSBOb3JtYWxcbiAgICBpZiAoXG4gICAgICAoQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfRUxFQ1RSSUNJVFk/LmluY2x1ZGVzKG5vZGU/LnR5cGUpIHx8XG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX05BVFVSQUxfR0FTPy5pbmNsdWRlcyhub2RlPy50eXBlKSB8fFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuVFlQRV9URU1QTEFURV9GVUVMPy5pbmNsdWRlcyhub2RlPy50eXBlKSB8fFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuVFlQRV9URU1QTEFURV9TVEVBTT8uaW5jbHVkZXMobm9kZT8udHlwZSkpICYmXG4gICAgICAhbm9kZT8uaXNHcm91cFxuICAgICkge1xuICAgICAgdGhpcy5tYWtlRW50aXR5VGVtcGxhdGVFbmVyZ3koXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uID8/ICcnLFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSA/PyAnJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklNQUdFX1RFTVBMQVRFKSB7XG4gICAgICB0aGlzLm1ha2VJbWFnZVRlbXBsYXRlKCk7XG4gICAgfVxuICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUEFSQU1fVEFCTEUpIHtcbiAgICAgIHRoaXMubWFrZVBhcmFtVGFibGUoKTtcbiAgICB9XG4gICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5NQVNTX0JBTEFOQ0UpIHtcbiAgICAgIHRoaXMubWFrZU1hc3NCYWxhbmNlKCk7XG4gICAgfVxuICAgIC8vIFRleHQgTm9kZVxuICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFKSB7XG4gICAgICB0aGlzLm1ha2VUZXh0VGVtcGxhdGUoKTtcbiAgICB9XG4gICAgLy8gVmFsdWUgTm9kZVxuICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVkFMVUVfTk9ERSkge1xuICAgICAgdGhpcy5tYWtlVmFsdWVOb2RlVGVtcGxhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBWYWx1ZSBOb2RlXG4gICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTVBUWSkge1xuICAgICAgdGhpcy5tYWtlRW1wdHlOb2RlVGVtcGxhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBWYWx1ZSBMYWJlbFxuICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVkFMVUVfTEFCRUwpIHtcbiAgICAgIHRoaXMubWFrZVZhbHVlTGFiZWxUZW1wbGF0ZSgpO1xuICAgIH1cbiAgICAvLyBMYWJlbFxuICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9MQUJFTCkge1xuICAgICAgdGhpcy5tYWtlVGV4dExhYmVsVGVtcGxhdGUoKTtcbiAgICB9XG4gICAgLy8gWm9uZSBpdGVtXG4gICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5aT05FX0VORVJHWV9JVEVNKSB7XG4gICAgICB0aGlzLm1ha2Vab25lSXRlbVRlbXBsYXRlKCk7XG4gICAgfVxuICAgIC8vIGRhdGEgYm94XG4gICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5EQVRBX0JPWCkge1xuICAgICAgdGhpcy5tYWtlRGF0YUJveFRlbXBsYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCB0ZW1wbGF0ZVxuICAgIGlmIChBdG9Hb2pzRWRpdG9yTW9kZWwuVFlQRV9URU1QTEFURV9TUEVDSUFMPy5pbmNsdWRlcyhub2RlPy50eXBlKSkge1xuICAgICAgdGhpcy5tYWtlU3BlY2lhbFRlbXBsYXRlKFxuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUGxhbnQgQ2VsbFxuICAgIGlmIChcbiAgICAgIG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QTEFOVF9DRUxMICYmXG4gICAgICAhbm9kZT8uaXNHcm91cFxuICAgICkge1xuICAgICAgdGhpcy5wbGFudENlbGxUZW1wbGF0ZShcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGluaXREaWFncmFtKCkge1xuICAgIGlmICghIXRoaXMubXlEaWFncmFtPy5kaXYpIHtcbiAgICAgIC8vIHRoaXMubXlEaWFncmFtLmRpdiA9IG51bGw7XG4gICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uZ3JpZCkge1xuICAgICAgICB0aGlzLm15RGlhZ3JhbVsnZ3JpZCddID0gdGhpcy5pbml0aWFsT3B0aW9ucz8uZ3JpZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubXlEaWFncmFtWydncmlkJ10gPSB0aGlzLiQoZ28uUGFuZWwsICdHcmlkJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uTGF5b3V0Q29tcGxldGVkKSB7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLmFkZERpYWdyYW1MaXN0ZW5lcihcbiAgICAgICAgICAnTGF5b3V0Q29tcGxldGVkJyxcbiAgICAgICAgICB0aGlzLmluaXRpYWxPcHRpb25zPy5MYXlvdXRDb21wbGV0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5MaW5rUmVzaGFwZWQpIHtcbiAgICAgICAgdGhpcy5teURpYWdyYW0uYWRkRGlhZ3JhbUxpc3RlbmVyKFxuICAgICAgICAgICdMaW5rUmVzaGFwZWQnLFxuICAgICAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbnM/LkxpbmtSZXNoYXBlZFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LlNlbGVjdGlvbk1vdmVkKSB7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLmFkZERpYWdyYW1MaXN0ZW5lcihcbiAgICAgICAgICAnU2VsZWN0aW9uTW92ZWQnLFxuICAgICAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbnM/LlNlbGVjdGlvbk1vdmVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uQ2hhbmdlZFNlbGVjdGlvbikge1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5hZGREaWFncmFtTGlzdGVuZXIoXG4gICAgICAgICAgJ0NoYW5nZWRTZWxlY3Rpb24nLFxuICAgICAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbnM/LkNoYW5nZWRTZWxlY3Rpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubXlEaWFncmFtLmRyYWdTZWxlY3RpbmdUb29sID0gdGhpcy5pbml0aWFsT3B0aW9ucz8uZHJhZ1NlbGVjdGluZ1Rvb2w7XG4gICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2wuaXNHcmlkU25hcEVuYWJsZWQgPVxuICAgICAgICB0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2RyYWdnaW5nVG9vbC5pc0dyaWRTbmFwRW5hYmxlZCddID8/IGZhbHNlO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlciAmJlxuICAgICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2xcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuZ3JpZFNuYXBDZWxsU2l6ZSddKSB7XG4gICAgICAgICAgdGhpcy5teURpYWdyYW0udG9vbE1hbmFnZXIuZHJhZ2dpbmdUb29sLmdyaWRTbmFwQ2VsbFNpemUgPVxuICAgICAgICAgICAgdGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuZ3JpZFNuYXBDZWxsU2l6ZSddO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2RyYWdnaW5nVG9vbC5pc0dyaWRTbmFwRW5hYmxlZCddKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2wuaXNHcmlkU25hcEVuYWJsZWQgPVxuICAgICAgICAvLyAgICAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkJ107XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnZHJhZ2dpbmdUb29sLmRvTW91c2VNb3ZlJ10pIHtcbiAgICAgICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2wuZG9Nb3VzZU1vdmUgPVxuICAgICAgICAgICAgdGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuZG9Nb3VzZU1vdmUnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2xpbmtpbmdUb29sLmxpbmtWYWxpZGF0aW9uJ10pIHtcbiAgICAgICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5saW5raW5nVG9vbC5saW5rVmFsaWRhdGlvbiA9XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2xpbmtpbmdUb29sLmxpbmtWYWxpZGF0aW9uJ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubXlEaWFncmFtLmNvbnRlbnRBbGlnbm1lbnQgPVxuICAgICAgICB0aGlzLmluaXRpYWxPcHRpb25zPy5jb250ZW50QWxpZ25tZW50ID8/IGdvLlNwb3QuQ2VudGVyO1xuICAgICAgdGhpcy5teURpYWdyYW0ubGF5b3V0ID0gdGhpcy5pbml0aWFsT3B0aW9ucz8ubGF5b3V0O1xuICAgICAgLy8gdGhpcy5teURpYWdyYW0ubWluVmlld3BvcnRCb3VuZHMgPSBuZXcgZ28uUmVjdCgwLCAwLCAxMjAwLCAxMjAwKTtcbiAgICAgIGlmICghIXRoaXMuZWRpdG9yPy5kYXRhKSB7XG4gICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDb21wb2VudFRlbXBsYXRlKCk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm1vZGVsID0gZ28uTW9kZWwuZnJvbUpzb24odGhpcy5lZGl0b3IuZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hbmltYXRpb25JbnRlcnZhbCk7XG4gICAgfVxuICAgIGNvbnN0IGRpYWdyYW1EaXYgPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50Py5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgdGhpcy5teURpYWdyYW1EaXZcbiAgICApPy5bMF07XG4gICAgdGhpcy5teURpYWdyYW0gPSB0aGlzLiQoZ28uRGlhZ3JhbSwgZGlhZ3JhbURpdiwgdGhpcy5pbml0aWFsT3B0aW9ucyk7XG4gICAgLy8gdGhpcy5teURpYWdyYW0uaW5pdGlhbFBvc2l0aW9uID0gbmV3IGdvLlBvaW50KDAsIDApO1xuICAgIHRoaXMuYWRkT3JSZW1vdmVDb21wb2VudFRlbXBsYXRlKCk7XG5cbiAgICB0aGlzLm1ha2VMaW5rVGVtcGxhdGUoKTtcbiAgICAvLyBhbmltYXRpb25cbiAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgLy8gaWYgKCF0aGlzLmlzQWRkZWRNb2RlbENoYW5nZWRMaXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuaXNBZGRlZE1vZGVsQ2hhbmdlZExpc3RlbmVycyA9IHRydWU7XG4gICAgICB0aGlzLm15RGlhZ3JhbS5hZGRNb2RlbENoYW5nZWRMaXN0ZW5lcihmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZS5jaGFuZ2UgPT09IGdvLkNoYW5nZWRFdmVudC5SZW1vdmUgJiZcbiAgICAgICAgICBlLnByb3BlcnR5TmFtZSA9PT0gJ25vZGVEYXRhQXJyYXknXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlLm9sZFZhbHVlO1xuICAgICAgICAgIHNlbGYub25EZWxldGVOb2RlLmVtaXQoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUuaXNUcmFuc2FjdGlvbkZpbmlzaGVkKSB7XG4gICAgICAgICAgc2VsZi5jb21taXR0ZWRUcmFuc2FjdGlvblN1YmplY3Q/Lm5leHQoZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5teURpYWdyYW0uY29tbWFuZEhhbmRsZXIudW5kbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vblVuZG8uZW1pdCgpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGlmICghIXRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLm15RGlhZ3JhbS5tb2RlbCA9IGdvLk1vZGVsLmZyb21Kc29uKHRoaXMuZWRpdG9yLmRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRHcm91cFRlbXBsYXRlRW5lcmd5KCkge1xuICAgIC8vIGZvciB3YXRlclxuICAgIGNvbnN0IHtcbiAgICAgIFNUT1JBR0UsXG4gICAgICBXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBERU1JTl9XQVRFUl9UUkVBVE1FTlQsXG4gICAgICAvLyBST19XQVRFUl9UUkVBVE1FTlQsXG4gICAgICBQUk9DRVNTLFxuICAgICAgV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBEQUZfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBFVFBfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBNQlJfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBaTERfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBDT09MSU5HX1RPV0VSLFxuICAgICAgQk9JTEVSLFxuICAgICAgT1RIRVIsXG4gICAgICBMQU5EU0NBUElOR19JUlJJR0FUSU9OLFxuICAgICAgUFJFU1NVUklaRURfVUZfV0FURVJfVFJFQVRNRU5UUyxcbiAgICAgIElNTUVSU0VEX1VGX1dBVEVSX1RSRUFUTUVOVFMsXG4gICAgfSA9IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUztcbiAgICBjb25zdCB3YXRlckdyb3VwcyA9IFtcbiAgICAgIFNUT1JBR0UsXG4gICAgICBXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBERU1JTl9XQVRFUl9UUkVBVE1FTlQsXG4gICAgICAvLyBST19XQVRFUl9UUkVBVE1FTlQsXG4gICAgICBQUk9DRVNTLFxuICAgICAgV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBEQUZfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBFVFBfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBNQlJfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBaTERfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICBDT09MSU5HX1RPV0VSLFxuICAgICAgQk9JTEVSLFxuICAgICAgT1RIRVIsXG4gICAgICBMQU5EU0NBUElOR19JUlJJR0FUSU9OLFxuICAgICAgUFJFU1NVUklaRURfVUZfV0FURVJfVFJFQVRNRU5UUyxcbiAgICAgIElNTUVSU0VEX1VGX1dBVEVSX1RSRUFUTUVOVFMsXG4gICAgXTtcbiAgICB3YXRlckdyb3Vwcy5tYXAoKGUpID0+IHtcbiAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5pY29uLFxuICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5uYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBlbGVjdHJpY2FsXG4gICAgdGhpcy5pbml0RWxlY3RyaWNHcm91cFRlbXBsYXRlKCk7XG5cbiAgICAvLyBGdWVsXG4gICAgdGhpcy5pbml0RnVlbEdyb3VwVGVtcGxhdGUoKTtcblxuICAgIC8vIEdhc1xuICAgIHRoaXMuaW5pdEdhc0dyb3VwVGVtcGxhdGUoKTtcbiAgfVxuXG4gIGluaXRFbGVjdHJpY0RpYWdyYW0oKSB7XG4gICAgY29uc3Qge1xuICAgICAgR1JJRCxcbiAgICAgIERJRVNFTF9HRU5FUkFUT1JTLFxuICAgICAgQkFUVEVSWV9FTkVSR1lfU1RPUkFHRSxcbiAgICAgIExJR0hUSU5HX1NZU1RFTVMsXG4gICAgICBMSUdIVElOR1MsXG4gICAgICBFTEVDVFJJQ19NRVRFUlMsXG4gICAgICBUUkFOU0ZPUk1FUlMsXG4gICAgICBFTEVDVFJJQ19GTFlXSEVFTF9FTkVSR1lfU1RPUkFHRSxcbiAgICAgIFBVTVBFRF9IWURST19TVE9SQUdFLFxuICAgICAgVEhFUk1BTF9FTkVSR1lfU1RPUkFHRSxcbiAgICAgIFNVUEVSX0NBUEFDSVRPUl9FTkVSR1lfU1RPUkFHRSxcbiAgICAgIFNXSVRDSF9HRUFSUyxcbiAgICAgIFBST0NFU1NfQ09OVFJPTF9BVVRPTUFUSU9OX1NZU1RFTVMsXG4gICAgICBQUk9DRVNTX0VRVUlQTUVOVF9NQUNISU5FUyxcbiAgICAgIE9GRklDRV9FUVVJUE1FTlQsXG4gICAgICBQT1dFUl9ESVNUUklCVVRJT05fQ09OVFJPTF9TWVNURU1TLFxuICAgICAgUE9XRVJfRElTVFJJQlVUSU9OX1NZU1RFTVMsXG4gICAgICBOQVRVUkFMX0dBU19HRU5FUkFUT1JTLFxuICAgICAgTU9UT1JfQ09OVFJPTFMsXG4gICAgICBWQVJJQUJMRV9GUkVRVUVOQ1lfRFJJVkVSUyxcbiAgICAgIEVMRUNUUklDX0hWQUMsXG4gICAgICBDT01QUkVTU0VEX0FJUl9TWVNURU1TLFxuICAgICAgUkVGUklHRVJBVElPTl9DT09MSU5HX1NZU1RFTVMsXG4gICAgICBNQVRFUklBTF9IQU5ETElOR19FUVVJUE1FTlQsXG4gICAgICBXSU5EX1BPV0VSLFxuICAgICAgRUxFQ1RSSUNfSU5EVVNUUklBTF9NT1RPUlMsXG4gICAgICBHUk9VTkRJTkcsXG4gICAgfSA9IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUztcbiAgICBjb25zdCBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZSA9IFtcbiAgICAgIEdSSUQsXG4gICAgICBESUVTRUxfR0VORVJBVE9SUyxcbiAgICAgIEJBVFRFUllfRU5FUkdZX1NUT1JBR0UsXG4gICAgICBMSUdIVElOR19TWVNURU1TLFxuICAgICAgTElHSFRJTkdTLFxuICAgICAgRUxFQ1RSSUNfTUVURVJTLFxuICAgICAgVFJBTlNGT1JNRVJTLFxuICAgICAgRUxFQ1RSSUNfRkxZV0hFRUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICBQVU1QRURfSFlEUk9fU1RPUkFHRSxcbiAgICAgIFRIRVJNQUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICBTVVBFUl9DQVBBQ0lUT1JfRU5FUkdZX1NUT1JBR0UsXG4gICAgICBTV0lUQ0hfR0VBUlMsXG4gICAgICBQUk9DRVNTX0NPTlRST0xfQVVUT01BVElPTl9TWVNURU1TLFxuICAgICAgUFJPQ0VTU19FUVVJUE1FTlRfTUFDSElORVMsXG4gICAgICBPRkZJQ0VfRVFVSVBNRU5ULFxuICAgICAgUE9XRVJfRElTVFJJQlVUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgIFBPV0VSX0RJU1RSSUJVVElPTl9TWVNURU1TLFxuICAgICAgTkFUVVJBTF9HQVNfR0VORVJBVE9SUyxcbiAgICAgIE1PVE9SX0NPTlRST0xTLFxuICAgICAgVkFSSUFCTEVfRlJFUVVFTkNZX0RSSVZFUlMsXG4gICAgICBFTEVDVFJJQ19IVkFDLFxuICAgICAgQ09NUFJFU1NFRF9BSVJfU1lTVEVNUyxcbiAgICAgIFJFRlJJR0VSQVRJT05fQ09PTElOR19TWVNURU1TLFxuICAgICAgTUFURVJJQUxfSEFORExJTkdfRVFVSVBNRU5ULFxuICAgICAgV0lORF9QT1dFUixcbiAgICAgIEVMRUNUUklDX0lORFVTVFJJQUxfTU9UT1JTLFxuICAgICAgR1JPVU5ESU5HLFxuICAgIF07XG4gICAgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUubWFwKChlKSA9PiB7XG4gICAgICBpZiAoISFBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0pIHtcbiAgICAgICAgdGhpcy5tYWtlRW50aXR5VGVtcGxhdGVFbmVyZ3koXG4gICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLmljb24sXG4gICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGluaXRFbGVjdHJpY0dyb3VwVGVtcGxhdGUoKSB7XG4gICAgY29uc3QgbGlzdEl0ZW1zID0gW1xuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQkFUVEVSWV9FTkVSR1lfU1RPUkFHRVxuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRSQU5TRk9STUVSU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkVMRUNUUklDX01FVEVSU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkxJR0hUSU5HU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBPV0VSX0RJU1RSSUJVVElPTl9TWVNURU1TXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1dJVENIX0dFQVJTXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRUxFQ1RSSUNfSU5EVVNUUklBTF9NT1RPUlNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5HUk9VTkRJTkdcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5NT1RPUl9DT05UUk9MU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkxJR0hUSU5HX1NZU1RFTVNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTEVDVFJJQ19IVkFDXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUkVGUklHRVJBVElPTl9DT09MSU5HX1NZU1RFTVNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QUk9DRVNTX0NPTlRST0xfQVVUT01BVElPTl9TWVNURU1TXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuT0ZGSUNFX0VRVUlQTUVOVFxuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkNPTVBSRVNTRURfQUlSX1NZU1RFTVNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QUk9DRVNTX0VRVUlQTUVOVF9NQUNISU5FU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLk1BVEVSSUFMX0hBTkRMSU5HX0VRVUlQTUVOVFxuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBPV0VSX0RJU1RSSUJVVElPTl9DT05UUk9MX1NZU1RFTVNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5CQVRURVJJRVNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5WQVJJQUJMRV9GUkVRVUVOQ1lfRFJJVkVSU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkVMRUNUUklDX0ZMWVdIRUVMX0VORVJHWV9TVE9SQUdFXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUFVNUEVEX0hZRFJPX1NUT1JBR0VcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5USEVSTUFMX0VORVJHWV9TVE9SQUdFXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1VQRVJfQ0FQQUNJVE9SX0VORVJHWV9TVE9SQUdFXG4gICAgICBdLFxuICAgIF07XG4gICAgbGlzdEl0ZW1zLmZvckVhY2goKGUpID0+IHtcbiAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoZT8uaWNvbiwgZS5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRGdWVsR3JvdXBUZW1wbGF0ZSgpIHtcbiAgICBjb25zdCBsaXN0SXRlbXMgPSBbXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5ESUVTRUxfRlVFTFNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5HQVNPTl9MSU5FU1xuICAgICAgXSxcblxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQklPRElFU0VMU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLktFUk9TRU5TRVxuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBST1BBTkVTXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEFOS0VSX1RSVUNLU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBJUEVMSU5FXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuSU5EVVNUUklBTF9CT0lMRVJTXG4gICAgICBdLFxuXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5HRU5FUkFUT1JTXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuSU5EVVNUUklBTF9GVVJOQUNFU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklORFVTVFJJQUxfT1ZFTlNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5JTkRVU1RSSUFMX1ZFSElDTEVTX0FORF9FUVVJUE1FTlRcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX01FVEVSU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRElTUEVOU0VSU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfU1RST1JBR0VfVEFOS1NcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTEVDVFJJQ19IVkFDXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfTUFOQUdFTUVOVFNcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0RJU1BFTlNFUlNcbiAgICAgIF0uaWNvbixcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRElTUEVOU0VSU1xuICAgICAgXS5uYW1lXG4gICAgKTtcbiAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU1xuICAgICAgXS5pY29uLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU1xuICAgICAgXS5uYW1lXG4gICAgKTtcbiAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU1xuICAgICAgXS5pY29uLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU1xuICAgICAgXS5uYW1lXG4gICAgKTtcbiAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU1xuICAgICAgXS5pY29uLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU1xuICAgICAgXS5uYW1lXG4gICAgKTtcbiAgICBsaXN0SXRlbXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShlPy5pY29uLCBlLm5hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdEdhc0dyb3VwVGVtcGxhdGUoKSB7XG4gICAgY29uc3QgbGlzdEl0ZW1zID0gW1xuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QSVBFTElORVxuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJPSUxFUlNfQU5EX0hFQVRFUlNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVVJOQUNFU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBPV0VSX0dFTkVSQVRJT05cbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT0dFTkVSQVRJT05cbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT01CSU5FRF9DWUNMRV9QT1dFUl9QTEFOVFNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0ZPUl9WRUhJQ0xFU19BTkRfRVFVSVBNRU5UXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0FTX01FVEVSU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJVUk5FUlNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GTFVFX0dBU19BTkFMWVpFUlNcbiAgICAgIF0sXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT01CVVNUSU9OX0NPTlRST0xfU1lTVEVNU1xuICAgICAgXSxcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkdBU19TVE9SQUdFX1RBTktTXG4gICAgICBdLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0FTX1BSRVNTVVJFX1JFR1VMQVRPUlNcbiAgICAgIF0sXG4gICAgXTtcblxuICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0RJU1BFTlNFUlNcbiAgICAgIF0uaWNvbixcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRElTUEVOU0VSU1xuICAgICAgXS5uYW1lXG4gICAgKTtcbiAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU1xuICAgICAgXS5pY29uLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU1xuICAgICAgXS5uYW1lXG4gICAgKTtcbiAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU1xuICAgICAgXS5pY29uLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU1xuICAgICAgXS5uYW1lXG4gICAgKTtcbiAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU1xuICAgICAgXS5pY29uLFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU1xuICAgICAgXS5uYW1lXG4gICAgKTtcbiAgICBsaXN0SXRlbXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShlPy5pY29uLCBlLm5hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdEdhc0RpYWdyYW0oKSB7XG4gICAgY29uc3Qge1xuICAgICAgTkFUVVJBTF9HQVNfUElQRUxJTkVTLFxuICAgICAgTElRVUVGSUVEX05BVFVSQUxfR0FTLFxuICAgICAgQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QSVBFTElORSxcbiAgICAgIENPTVBSRVNTRURfTkFUVVJBTF9HQVNfUFJPRFVDVElPTixcbiAgICAgIEJPSUxFUlNfQU5EX0hFQVRFUlMsXG4gICAgICBGVVJOQUNFUyxcbiAgICAgIFBPV0VSX0dFTkVSQVRJT04sXG4gICAgICBDT0dFTkVSQVRJT04sXG4gICAgICBDT01CSU5FRF9DWUNMRV9QT1dFUl9QTEFOVFMsXG4gICAgICBGVUVMX0ZPUl9WRUhJQ0xFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgR0FTX01FVEVSUyxcbiAgICAgIEJVUk5FUlMsXG4gICAgICBGTFVFX0dBU19BTkFMWVpFUlMsXG4gICAgICBDT01CVVNUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgIEdBU19TVE9SQUdFX1RBTktTLFxuICAgICAgR0FTX1BSRVNTVVJFX1JFR1VMQVRPUlMsXG4gICAgICBOQVRVUkFMX0dBUyxcbiAgICB9ID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTO1xuICAgIGNvbnN0IExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlID0gW1xuICAgICAgTkFUVVJBTF9HQVNfUElQRUxJTkVTLFxuICAgICAgTElRVUVGSUVEX05BVFVSQUxfR0FTLFxuICAgICAgQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QSVBFTElORSxcbiAgICAgIENPTVBSRVNTRURfTkFUVVJBTF9HQVNfUFJPRFVDVElPTixcbiAgICAgIEJPSUxFUlNfQU5EX0hFQVRFUlMsXG4gICAgICBGVVJOQUNFUyxcbiAgICAgIFBPV0VSX0dFTkVSQVRJT04sXG4gICAgICBDT0dFTkVSQVRJT04sXG4gICAgICBDT01CSU5FRF9DWUNMRV9QT1dFUl9QTEFOVFMsXG4gICAgICBGVUVMX0ZPUl9WRUhJQ0xFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgR0FTX01FVEVSUyxcbiAgICAgIEJVUk5FUlMsXG4gICAgICBGTFVFX0dBU19BTkFMWVpFUlMsXG4gICAgICBDT01CVVNUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgIEdBU19TVE9SQUdFX1RBTktTLFxuICAgICAgR0FTX1BSRVNTVVJFX1JFR1VMQVRPUlMsXG4gICAgICBOQVRVUkFMX0dBUyxcbiAgICBdO1xuICAgIExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlLm1hcCgoZSkgPT4ge1xuICAgICAgaWYgKCEhQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdKSB7XG4gICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5pY29uLFxuICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5uYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbml0RnVlbERpYWdyYW0oKSB7XG4gICAgY29uc3Qge1xuICAgICAgRElFU0VMX0ZVRUxTLFxuICAgICAgR0FTT05fTElORVMsXG4gICAgICBCSU9ESUVTRUxTLFxuICAgICAgS0VST1NFTlNFLFxuICAgICAgUFJPUEFORVMsXG4gICAgICBUQU5LRVJfVFJVQ0tTLFxuICAgICAgUElQRUxJTkUsXG4gICAgICBJTkRVU1RSSUFMX0JPSUxFUlMsXG4gICAgICBHRU5FUkFUT1JTLFxuICAgICAgSU5EVVNUUklBTF9GVVJOQUNFUyxcbiAgICAgIElORFVTVFJJQUxfT1ZFTlMsXG4gICAgICBJTkRVU1RSSUFMX1ZFSElDTEVTX0FORF9FUVVJUE1FTlQsXG4gICAgICBGVUVMX01FVEVSUyxcbiAgICAgIEZVRUxfRElTUEVOU0VSUyxcbiAgICAgIEZVRUxfU1RST1JBR0VfVEFOS1MsXG4gICAgICBGVUVMX0ZJTFRSQVRJT05TLFxuICAgICAgRlVFTF9NQU5BR0VNRU5UUyxcbiAgICAgIEZVRUxTLFxuICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgY29uc3QgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUgPSBbXG4gICAgICBESUVTRUxfRlVFTFMsXG4gICAgICBHQVNPTl9MSU5FUyxcbiAgICAgIEJJT0RJRVNFTFMsXG4gICAgICBLRVJPU0VOU0UsXG4gICAgICBQUk9QQU5FUyxcbiAgICAgIFRBTktFUl9UUlVDS1MsXG4gICAgICBQSVBFTElORSxcbiAgICAgIElORFVTVFJJQUxfQk9JTEVSUyxcbiAgICAgIEdFTkVSQVRPUlMsXG4gICAgICBJTkRVU1RSSUFMX0ZVUk5BQ0VTLFxuICAgICAgSU5EVVNUUklBTF9PVkVOUyxcbiAgICAgIElORFVTVFJJQUxfVkVISUNMRVNfQU5EX0VRVUlQTUVOVCxcbiAgICAgIEZVRUxfTUVURVJTLFxuICAgICAgRlVFTF9ESVNQRU5TRVJTLFxuICAgICAgRlVFTF9TVFJPUkFHRV9UQU5LUyxcbiAgICAgIEZVRUxfRklMVFJBVElPTlMsXG4gICAgICBGVUVMX01BTkFHRU1FTlRTLFxuICAgICAgRlVFTFMsXG4gICAgXTtcbiAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICB0aGlzLm1ha2VFbnRpdHlUZW1wbGF0ZUVuZXJneShcbiAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0ubmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW5pdFNvbGFyRGlhZ3JhbSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBTT0xBUl9QT1dFUixcbiAgICAgIFBPV0VSX0NPTkRJVElPTklOR19VTklULFxuICAgICAgQkFUVEVSSUVTOiBCQVRURVJZLFxuICAgICAgSU5WRVJURVJTOiBJTlZFUlRFUixcbiAgICB9ID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTO1xuICAgIGNvbnN0IExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlID0gW1xuICAgICAgU09MQVJfUE9XRVIsXG4gICAgICBQT1dFUl9DT05ESVRJT05JTkdfVU5JVCxcbiAgICAgIEJBVFRFUlksXG4gICAgICBJTlZFUlRFUixcbiAgICBdO1xuICAgIExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlLm1hcCgoZSkgPT4ge1xuICAgICAgaWYgKCEhQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdKSB7XG4gICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5pY29uLFxuICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5uYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbml0U3RlYW1EaWFncmFtKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIFZBTFVFUyxcbiAgICAgIFNURUFNX1RSQVBTLFxuICAgICAgUFJFU1NVUkVfUkVHVUxBVE9SUyxcbiAgICAgIFNBRkVUWV9WQUxVRVNfQU5EX0VRVUlQTUVOVCxcbiAgICAgIENPTkRFTlNBVEVfUkVUVVJOX1NZU1RFTSxcbiAgICAgIERFQUVSQVRPUlMsXG4gICAgICBGRUVEV0FURVJfUFVNUFMsXG4gICAgICBCTE9XRE9XTl9UQU5LUyxcbiAgICAgIEVYUEFOU0lPTl9UQU5LUyxcbiAgICAgIEhFQVRfRVhDSEFOR0VSUyxcbiAgICAgIFRVUkJJTkVTLFxuICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgY29uc3QgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUgPSBbXG4gICAgICBWQUxVRVMsXG4gICAgICBTVEVBTV9UUkFQUyxcbiAgICAgIFBSRVNTVVJFX1JFR1VMQVRPUlMsXG4gICAgICBTQUZFVFlfVkFMVUVTX0FORF9FUVVJUE1FTlQsXG4gICAgICBDT05ERU5TQVRFX1JFVFVSTl9TWVNURU0sXG4gICAgICBERUFFUkFUT1JTLFxuICAgICAgRkVFRFdBVEVSX1BVTVBTLFxuICAgICAgQkxPV0RPV05fVEFOS1MsXG4gICAgICBFWFBBTlNJT05fVEFOS1MsXG4gICAgICBIRUFUX0VYQ0hBTkdFUlMsXG4gICAgICBUVVJCSU5FUyxcbiAgICBdO1xuICAgIExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlLm1hcCgoZSkgPT4ge1xuICAgICAgaWYgKCEhQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdKSB7XG4gICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5pY29uLFxuICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5uYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbk1vZGVsQ2hhbmdlTGlzdGVuZXIoZTogZ28uQ2hhbmdlZEV2ZW50KSB7XG4gICAgLy8gdGhpcy5vbk1vZGVsQ2hhbmdlTGlzdGVuZXJFdmVudC5lbWl0KGUpO1xuICB9XG5cbiAgbWFrZUxpbmtUZW1wbGF0ZSgpIHtcbiAgICBjb25zdCBlbGVtZW50czogYW55W10gPSBbXTtcbiAgICAvLyBsaW5lXG4gICAgZWxlbWVudHMucHVzaChcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uU2hhcGUsXG4gICAgICAgIHtcbiAgICAgICAgICBpc1BhbmVsTWFpbjogdHJ1ZSxcbiAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5HUkFZLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOlxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkxJTktfVEVNUExBVEVTW1xuICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlNJTVBMRVxuICAgICAgICAgICAgXT8uc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgLy8gc3Ryb2tlV2lkdGg6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICBuZXcgZ28uQmluZGluZyhcbiAgICAgICAgICAnc3Ryb2tlV2lkdGgnLFxuICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgICAoeCkgPT4gQXRvR29qc0VkaXRvck1vZGVsLkxJTktfVEVNUExBVEVTW3hdPy5zdHJva2VXaWR0aFxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIGFuaW1hdGlvblxuICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICB0aGlzLiQoZ28uU2hhcGUsIHtcbiAgICAgICAgLi4uQXRvR29qc0VkaXRvck1vZGVsLkxJTktfVEVNUExBVEVTW1xuICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xJTktfVFlQRVMuUElQRV9BTklNQVRJT05cbiAgICAgICAgXT8uYW5pbWF0aW9uLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgZWxlbWVudHMucHVzaChcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdUb3AnLFxuICAgICAgICB7XG4gICAgICAgICAgaGVpZ2h0OiAzOCxcbiAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShOYU4sIDM2KSxcbiAgICAgICAgICAvLyB3aWR0aDogMTAwLFxuICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKDEwMCwgNSksIC8vIMSQ4bq3dCBrw61jaCB0aMaw4bubYyB04buRaSB0aGnhu4N1IGzDoCAxMDB4NTBcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgIC8vIGxheWVyTmFtZTogJ0JhY2tncm91bmRMYXllcicsXG4gICAgICAgICAgLy8gYWxpZ25tZW50OiBnby5TcG90LlRvcCxcbiAgICAgICAgICAvLyBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgIC8vIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCA1MCwgMCksXG4gICAgICAgICAgLy8gc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3RleHRDb21wb25lbnQnLCAoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB4ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9KSxcbiAgICAgICAgLy8gdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgIC8vICAgICBoZWlnaHQ6IDMwLFxuICAgICAgICAvLyAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgLy8gICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIC8vICAgICAvLyB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gfSksXG4gICAgICAgIHRoaXMuJChcbiAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDUwLCAwKSxcbiAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgIC8vIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsIC8vIMSQ4bqjbSBi4bqjbyB2xINuIGLhuqNuIG7hurFtIOG7nyB0cnVuZyB0w6JtIGPhu6dhIG7DunRcbiAgICAgICAgICAgIC8vIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkNlbnRlciwgLy8gxJDhuqNtIGLhuqNvIHbEg24gYuG6o24ga2jDtG5nIGLhu4sgZOG7i2NoIGNodXnhu4NuIHJhIGto4buPaSB0cnVuZyB0w6JtXG4gICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCwgLy8gQ2h1eeG7g24gZMOybmcgxJHhu4MgdsSDbiBi4bqjbiBraMO0bmcgdsaw4bujdCByYSBuZ2/DoGlcbiAgICAgICAgICAgIC8vIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICd0ZXh0Q29tcG9uZW50JylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3RleHRDb21wb25lbnQnKSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygnYmFja2dyb3VuZCcsICd0ZXh0Q29tcG9uZW50JywgKHgpID0+XG4gICAgICAgICAgICB4ID8gJ3doaXRlJyA6ICd0cmFuc3BhcmVudCdcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gICAgIG5ldyBnby5CaW5kaW5nKCdtYXJnaW4nLCAnaXNGb3JtYXQnLCAoeCkgPT5cbiAgICAgICAgICAvLyAgICAgeCA/IG5ldyBnby5NYXJnaW4oNSwgMCwgNSwgNSkgOiBuZXcgZ28uTWFyZ2luKDUsIDUsIDUsIDUpLFxuICAgICAgICAgIC8vICksXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gYXJyb3dcbiAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5TaGFwZSwgLy8gdGhlIFwiZnJvbVwiIGFycm93aGVhZFxuICAgICAgICB7XG4gICAgICAgICAgLi4uQXRvR29qc0VkaXRvck1vZGVsLkxJTktfVEVNUExBVEVTW1xuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5TSU1QTEVcbiAgICAgICAgICBdPy5hcnJvdyxcbiAgICAgICAgfSxcbiAgICAgICAgbmV3IGdvLkJpbmRpbmcoXG4gICAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICFbXG4gICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xJTktfVFlQRVMuUElQRV9BTklNQVRJT04sXG4gICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xJTktfVFlQRVMuUElQRSxcbiAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5QSVBFX0hJRERFTixcbiAgICAgICAgICAgIF0uaW5jbHVkZXMoeClcbiAgICAgICAgKSxcbiAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZpbGwnLCAnY29sb3InKSxcbiAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIFRPRE8gZml4IGxpbmsgY2Fubm90IHNlbGVjdGVkIGluc2lkZSBncm91cCB0ZW1wbGF0ZVxuICAgIHRoaXMubXlEaWFncmFtLmxpbmtUZW1wbGF0ZSA9IHRoaXMuJChcbiAgICAgIGdvLkxpbmssXG4gICAgICBnby5MaW5rLk9ydGhvZ29uYWwsXG4gICAgICB7XG4gICAgICAgIC8vIGxheWVyTmFtZTogJ0JhY2tncm91bmQnLCAvLyBsaW5rIGNhbm5vdCBzZWxlY3QgaW5zaWRlIGdyb3VwIHRlbXBsYXRlXG4gICAgICAgIC8vIGN1cnZpbmVzczogMjAsXG4gICAgICAgIC8vIGNvcm5lcjogNSxcbiAgICAgICAgcm91dGluZzogZ28uTGluay5Bdm9pZHNOb2RlcyxcbiAgICAgICAgcmVzaGFwYWJsZTogdHJ1ZSxcbiAgICAgICAgcmVzZWdtZW50YWJsZTogdHJ1ZSxcbiAgICAgICAgcmVsaW5rYWJsZUZyb206IHRydWUsXG4gICAgICAgIHJlbGlua2FibGVUbzogdHJ1ZSxcbiAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgdG9TaG9ydExlbmd0aDpcbiAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlNJTVBMRVxuICAgICAgICAgIF0udG9TaG9ydExlbmd0aCwgLy8gYXNzdW1lIGFycm93aGVhZCBhdCBcInRvXCIgZW5kLCBuZWVkIHRvIGF2b2lkIGJhZCBhcHBlYXJhbmNlIHdoZW4gcGF0aCBpcyB0aGlja1xuICAgICAgfSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdsYXllck5hbWUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGRhdGE/LnRleHRDb21wb25lbnQgPyAnQmFja2dyb3VuZCcgOiAnJztcbiAgICAgIH0pLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ3pPcmRlcicsICd0eXBlJywgKHgpID0+XG4gICAgICAgIHggPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xJTktfVFlQRVMuUElQRV9BTklNQVRJT04gPyAxMSA6IDEwXG4gICAgICApLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoXG4gICAgICAgICd0b1Nob3J0TGVuZ3RoJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAoeCkgPT4gQXRvR29qc0VkaXRvck1vZGVsLkxJTktfVEVNUExBVEVTW3hdLnRvU2hvcnRMZW5ndGggfHwgMFxuICAgICAgKSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3Zpc2libGUnKSxcblxuICAgICAgLy8gbWFrZSBzdXJlIGxpbmtzIGNvbWUgaW4gZnJvbSB0aGUgcHJvcGVyIGRpcmVjdGlvbiBhbmQgZ28gb3V0IGFwcHJvcHJpYXRlbHlcbiAgICAgIC4uLmVsZW1lbnRzXG4gICAgKTtcbiAgfVxuXG4gIG1ha2VWYWx1ZU5vZGVUZW1wbGF0ZShzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgyLCBoOiAzNiB9KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgIGdvLk5vZGUsXG4gICAgICAnU3BvdCcsXG4gICAgICB7fSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShcbiAgICAgICAgZ28uUG9pbnQuc3RyaW5naWZ5XG4gICAgICApLFxuXG4gICAgICB0aGlzLiQoXG4gICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAnQXV0bycsXG4gICAgICAgIHsgbWluU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBzaXplLmgpIH0sXG4gICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JlY3RhbmdsZScsIHtcbiAgICAgICAgICBmaWxsOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElHSFRfQkxVRSxcbiAgICAgICAgICBzdHJva2U6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICBmb250OiAnYm9sZCAxNHB4IEFyaWFsJyxcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQ0VSVUxFQU4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2VkaXRhYmxlJywgJ2lzRWRpdGFibGUnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3Nob3J0ZW5lZE51bWJlcicpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdtYXJnaW4nLCAnaXNGb3JtYXQnLCAoeCkgPT5cbiAgICAgICAgICAgICAgeCA/IG5ldyBnby5NYXJnaW4oNSwgMCwgNSwgNSkgOiBuZXcgZ28uTWFyZ2luKDUsIDUsIDUsIDUpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUgIT09IFZBTFVFX05BO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgICAgIC8vIEljb24gRXJyIHdoZW4gbGFjayBvZiB2YWx1ZVxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAxMCwgMTAsIDEwKSxcbiAgICAgICAgICAgICAgdGV4dDogVkFMVUVfTkEsIC8vIE9sZCB2ZXJzaW9uOiBURVhUX0VSUk9SXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlNBTE1PTixcbiAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgaXNNdWx0aWxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlID09PSBWQUxVRV9OQTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBTFVFX05PREUsXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIG1ha2VFbXB0eU5vZGVUZW1wbGF0ZShzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDAsIGg6IDAgfSkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICBnby5Ob2RlLFxuICAgICAgJ1Nwb3QnLFxuICAgICAge30sXG4gICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTVBUWSxcbiAgICAgIG5vZGVcbiAgICApO1xuICB9XG5cbiAgbWFrZVZhbHVlTGFiZWxUZW1wbGF0ZShzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgyLCBoOiAzNiB9KSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgIGdvLk5vZGUsXG4gICAgICAnQXV0bycsXG4gICAgICB7XG4gICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShcbiAgICAgICAgZ28uUG9pbnQuc3RyaW5naWZ5XG4gICAgICApLFxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ0F1dG8nLFxuICAgICAgICB7IG1pblNpemU6IG5ldyBnby5TaXplKHNpemUudywgc2l6ZS5oKSB9LFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAxMCwgMCwgMTApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNSwgMTAsIDApLFxuICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICBmb250OiAnYm9sZCAxNXB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQ0VSVUxFQU4sXG4gICAgICAgICAgICAgIG1pblNpemU6IG5ldyBnby5TaXplKDE1MCwgMzApLCAvLyBTZXQgdGhlIHdpZHRoIG9mIHRoZSB0ZXh0IGJsb2NrXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnZGF0YScsICh4KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgeD8ucXVhbnRpdHkgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZDogYW55ID0gVXRpbHNTZXJ2aWNlLmNvbnZlcnRQcmVmaXhlc0RhdGEoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB4Py5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICB1bml0OiBVdGlsc1NlcnZpY2UuY29udmVydFNwZWNpYWxVbml0KHg/LnVuaXQpLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBsZXQgcmV0VmFsdWUgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5zaG9ydGVuZWROdW1iZXIgK1xuICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkLnVuaXRQcmVmaXhlcyArXG4gICAgICAgICAgICAgICAgVXRpbHNTZXJ2aWNlLmNvbnZlcnRTcGVjaWFsVW5pdCh4Py51bml0KTtcbiAgICAgICAgICAgICAgaWYgKHg/LnBlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICByZXRWYWx1ZSArPSBgICgke3g/LnBlcmNlbnR9JSlgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXRWYWx1ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoXG4gICAgICAgICAgICAgICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgJ2RhdGEnLFxuICAgICAgICAgICAgICAoeCkgPT4gdHlwZW9mIHg/LnF1YW50aXR5ID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5WQUxVRV9MQUJFTCxcbiAgICAgIG5vZGVcbiAgICApO1xuICB9XG5cbiAgbWFrZVRleHRMYWJlbFRlbXBsYXRlKHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogTmFOLCBoOiAyMCB9KSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgIGdvLk5vZGUsXG4gICAgICAnQXV0bycsXG4gICAgICB7XG4gICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAgICAgKSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdBdXRvJyxcbiAgICAgICAgdGhpcy4kKFxuICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICdIb3Jpem9udGFsJyxcblxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTZweCBBcmlhbCcsXG4gICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5DRVJVTEVBTixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJ2NvbG9yJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICd2aXNpYmxlJylcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9MQUJFTCxcbiAgICAgIG5vZGVcbiAgICApO1xuICB9XG5cbiAgbWFrZVRleHRUZW1wbGF0ZShcbiAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7XG4gICAgICB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICAgIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiAyLFxuICAgIH1cbiAgKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY29udGV4dE1lbnUgPSB0aGlzLiQoXG4gICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAnVmVydGljYWwnLFxuICAgICAgdGhpcy4kKCdDb250ZXh0TWVudUJ1dHRvbicsIHRoaXMuJChnby5UZXh0QmxvY2ssICdPcHRpb24gMScpLCB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgYWxlcnQoJ09wdGlvbiAxIGNsaWNrZWQhJyk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIHRoaXMuJCgnQ29udGV4dE1lbnVCdXR0b24nLCB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnT3B0aW9uIDInKSwge1xuICAgICAgICBjbGljazogZnVuY3Rpb24gKGUsIG9iaikge1xuICAgICAgICAgIGFsZXJ0KCdPcHRpb24gMiBjbGlja2VkIScpO1xuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC8vIC4uLiBhZGQgbW9yZSBvcHRpb25zIGFzIG5lZWRlZCAuLi5cbiAgICApO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICBnby5Ob2RlLFxuICAgICAgJ1Nwb3QnLFxuICAgICAge1xuICAgICAgICAvLyBmcm9tU3BvdDogZ28uU3BvdC5SaWdodFNpZGUsXG4gICAgICAgIC8vIHRvU3BvdDogZ28uU3BvdC5MZWZ0U2lkZSxcbiAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgLy8gc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgLy8gICAgIGlmIChlPy5kYXRhLm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgLy8gICAgICAgICBlPy5kYXRhLm9uU2VsZWN0ZWQoZT8uZGF0YSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgICAgIC8vIG1vdXNlSG92ZXI6IChlLCBvYmopID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgICAgLy8gICAgIGlmICgob2JqIGFzIGFueSkucGFydD8ub2I/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAvLyAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdCh7XG4gICAgICAgIC8vICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAgIC8vICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAvLyAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgICAgICAvLyBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgIC8vICAgICBpZiAoKG9iaiBhcyBhbnkpLnBhcnQ/Lm9iPy52YWx1ZSA9PT0gVkFMVUVfTkEpIHtcbiAgICAgICAgLy8gICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQobnVsbCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgaWYgKG5vZGU/Lm9iPy5pc1R5cGVJbmZsb3dPZlBsYW50Q2VsbCkge1xuICAgICAgICAgICAgLy8gb2JqPy5kYXRhPy5vblNlbGVjdGVkKG5vZGU/Lm9iPy5ub2RlUGxhbnRDZWxsUGFyZW50KTtcbiAgICAgICAgICAgIC8vIHNlbGYub25DbGlja0NvbXBvZW50LmVtaXQoe1xuICAgICAgICAgICAgLy8gICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgIC8vICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgIC8vICAgICBub2RlOiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIG9iOiBub2RlPy5vYj8ubm9kZVBsYW50Q2VsbFBhcmVudCxcbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gICAgIGNvbXBvbmVudDogbm9kZT8ub2I/Lm5vZGVQbGFudENlbGxQYXJlbnQsXG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvXG4gICAgICAgICAgICAgID8gc2VsZi5vbkNsaWNrSW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkb3VibGVDbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vZGU/Lm9iPy5pc1R5cGVJbmZsb3dPZlBsYW50Q2VsbCAmJlxuICAgICAgICAgICAgIXRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQobm9kZT8ub2I/Lm5vZGVQbGFudENlbGxQYXJlbnQpO1xuICAgICAgICAgICAgLy8gdGhpcy5pc1Nob3dOb2RlSW5mb1xuICAgICAgICAgICAgLy8gICAgID8gc2VsZi5vbkRvdWJsZUNsaWNrTm9kZS5lbWl0KHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBvYjogbm9kZT8ub2I/Lm5vZGVQbGFudENlbGxQYXJlbnQsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICAgIH0pXG4gICAgICAgICAgICAvLyAgICAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvXG4gICAgICAgICAgICAgID8gc2VsZi5vbkNsaWNrSW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy4kKFxuICAgICAgICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAvLyB7IGhlaWdodDogNjIgfSxcbiAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwge1xuICAgICAgICAgICAgICBmaWxsOiBudWxsLFxuICAgICAgICAgICAgICBzdHJva2U6ICdkb2RnZXJibHVlJyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgZ28uUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIC8vIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbig4LCAzLCAwLCAzKSB9LFxuICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygncGFkZGluZycsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB4Py5pc1R5cGVJbmZsb3dPZlBsYW50Q2VsbFxuICAgICAgICAgICAgICAgICAgPyB4Py5mbG93T2ZQbGFudENlbGwgPT09IEFUT19FTlVNX0ZMT1dfRElSRUNUSU9OLklORkxPV1xuICAgICAgICAgICAgICAgICAgICA/IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMjApXG4gICAgICAgICAgICAgICAgICAgIDogbmV3IGdvLk1hcmdpbigwLCAyMCwgMCwgMClcbiAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAvLyB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdoZWlnaHQnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVHlwZUluZmxvd09mUGxhbnRDZWxsID8geD8uaGVpZ2h0ICsgMTAgOiBudWxsO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnd2lkdGgnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVHlwZUluZmxvd09mUGxhbnRDZWxsID8geD8ud2lkdGggKyAxMiA6IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICB7IGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tIH0sXG4gICAgICAgICAgICAvLyBtb3JlXG4gICAgICAgICAgICAhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICA/IHRoaXMuZ2VuZXJhdGVBY3Rpb25Hcm91cChbXG4gICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FLFxuICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLklOU0lHSFQsXG4gICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT1VURkxPVyxcbiAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICd2aXNpYmxlJyksXG4gICAgICBuZXcgZ28uQmluZGluZygnZnJvbVNwb3QnLCAnZnJvbVNwb3QnKSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCd0b1Nwb3QnLCAndG9TcG90JyksXG4gICAgICBuZXcgZ28uQmluZGluZygnbW92YWJsZScsICdtb3ZhYmxlJyksXG4gICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAgICAgKSxcbiAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdhbGlnbm1lbnQnLCAnYWxpZ25tZW50JywgZnVuY3Rpb24obG9jKSB7XG4gICAgICAvLyAgICAgcmV0dXJuIG5ldyBnby5TcG90KDAsIDAsIGxvYy54LCAwKTtcbiAgICAgIC8vIH0pLm9mT2JqZWN0KCksXG5cbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdBdXRvJyxcbiAgICAgICAge1xuICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/Lm5hbWUgPz8gVkFMVUVfTkE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkYXRhPy52YWx1ZSA9PT0gVkFMVUVfTkEgfHwgXy5pc05pbChkYXRhPy52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBOT19EQVRBO1xuICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIFRFWFRfVU5LTk9XTjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8ucm91bmQoZGF0YT8udmFsdWUsIDIpLnRvRml4ZWQoMik7XG4gICAgICAgICAgICAgIH0pLm1ha2VUd29XYXkoKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuJChcbiAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgIHRoaXMuYXJyb3dGb3JQbGFudENlbGwoc2l6ZSwgQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04uT1VURkxPVyksXG4gICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAvLyB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKHNpemUudywgc2l6ZS5oKSxcbiAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBzaXplLmgpLFxuICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBzaXplLmgpLFxuICAgICAgICAgICAgICBjb2x1bW46IDEsXG4gICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnd2lkdGgnLCAnd2lkdGgnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdoZWlnaHQnLCAnaGVpZ2h0JyksXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgZ28uU2hhcGUsXG4gICAgICAgICAgICAgICdSb3VuZGVkUmVjdGFuZ2xlJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpbGw6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSUdIVF9CTFVFLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJTktfV0FURVIsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RleHROb2RlU2hhcGUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZmlsbCcsICdmaWxsJyksXG4gICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnc3Ryb2tlJylcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAnVmVydGljYWwnLFxuICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIHsgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlciB9LFxuICAgICAgICAgICAgICAgIC8vIEFsZXJ0XG5cbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDUpLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdyZWNvbW1lbmRhdGlvbicpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI0U5NUY0NycsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyNFOTVGNDcnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTUsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTUsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xcdWY2NDknLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMS41LCAwLCAwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgZm9udDogJzhweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgPyB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uSG92ZXJBbGVydC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VBbGVydDogKG9iaiBhcyBhbnkpLnBhcnQ/Lm9iPy5tZXNzYWdlQWxlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlTGVhdmU6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkhvdmVyQWxlcnQuZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdhbGVydCcpLFxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIElDT05fQUxFUlQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSgzMCwgMzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3RleHRCbG9ja1ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSA4LCAxOCksXG4gICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDIycHggQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5HUkFZLFxuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2VkaXRhYmxlJywgJ2lzRWRpdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdhbmdsZScsICdhbmdsZScpLFxuICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21hcmdpbicsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YT8uYWxlcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0VGV4dERhdGFCb3goZGF0YSk7XG4gICAgICAgICAgICAgICAgICB9KS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSkgPT4gIWRhdGE/LmlzSGlkZGVuVmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLmFycm93Rm9yUGxhbnRDZWxsKHNpemUsIEFUT19FTlVNX0ZMT1dfRElSRUNUSU9OLklORkxPVylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX05PREUsXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIGFycm93Rm9yUGxhbnRDZWxsKHNpemUsIGZsb3dEaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy4kKFxuICAgICAgZ28uUGFuZWwsXG4gICAgICAnVGFibGUnLFxuICAgICAge1xuICAgICAgICBoZWlnaHQ6IHNpemUuaCxcbiAgICAgIH0sXG4gICAgICBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJ2hlaWdodCcpLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoXG4gICAgICAgICd2aXNpYmxlJyxcbiAgICAgICAgJycsXG4gICAgICAgIChkYXRhKSA9PiBkYXRhPy5mbG93T2ZQbGFudENlbGwgPT09IGZsb3dEaXJlY3Rpb25cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbHVtbjogZmxvd0RpcmVjdGlvbiA9PT0gQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04uT1VURkxPVyA/IDAgOiAyLFxuICAgICAgICByb3c6IDIsXG4gICAgICB9LFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ2l0ZW1BcnJheScsICdkYXRhTGlua0FycmF5JyksXG4gICAgICB7XG4gICAgICAgIGl0ZW1UZW1wbGF0ZTogdGhpcy4kKFxuICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdyb3cnLCAnaW5kZXhSb3cnKSxcbiAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJ2hlaWdodCcpLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICBBUlJPVyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoMjAsIDQwKSxcbiAgICAgICAgICAgICAgLy8gaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzb3VyY2UnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgIC8vIHBhbmVsLnBhcnQ/LmRhdGE/LmlkXG4gICAgICAgICAgICAgIHJldHVybiBkYXRhPy5pc0NyZWF0ZWQgPyBwYW5lbD8uJHAgOiBBUlJPV19HUkFZO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGdldFRleHREYXRhQm94KGRhdGEpIHtcbiAgICBpZiAoZGF0YT8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICByZXR1cm4gVEVYVF9VTktOT1dOO1xuICAgIH1cbiAgICByZXR1cm4gYCR7ZGF0YT8uc2hvcnRlbmVkTnVtYmVyfSR7XG4gICAgICBkYXRhPy51bml0UHJlZml4ZXMgPyAnICcgKyBkYXRhPy51bml0UHJlZml4ZXMgOiAnJ1xuICAgIH1gO1xuICB9XG5cbiAgbWFrZURhdGFCb3hUZW1wbGF0ZShcbiAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7XG4gICAgICB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICAgIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgIH1cbiAgKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICBnby5Ob2RlLFxuICAgICAgJ1Nwb3QnLFxuICAgICAge1xuICAgICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHt9LFxuICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KFxuICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICksXG4gICAgICB0aGlzLiQoXG4gICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAnQXV0bycsXG4gICAgICAgIHRoaXMuJChcbiAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vdXNlSG92ZXI6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgaWYgKChvYmogYXMgYW55KS5wYXJ0Py5vYj8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgIGlmICgob2JqIGFzIGFueSkucGFydD8ub2I/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICB7IHJvdzogMCwgc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuSG9yaXpvbnRhbCB9LFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICBnby5TaGFwZSxcbiAgICAgICAgICAgICAgJ1JlY3RhbmdsZScsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmaWxsOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElHSFRfQkxVRSxcbiAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmaWxsJywgJ2NvbG9yJylcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDEwLCA1LCAxMCksXG4gICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBOYU4pLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgc3BhY2luZ0JlbG93OiA1LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgIHsgcm93OiAxLCBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5Ib3Jpem9udGFsIH0sXG4gICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgIGZpbGw6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSUdIVF9CTFVFLFxuICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAvLyBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDEwLCA0MCksXG4gICAgICAgICAgICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAxMCwgc2l6ZS5oKSxcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbig1LCAwLCA1LCA1KSxcbiAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEycHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkdSQVksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZWRpdGFibGUnLCAnaXNFZGl0YWJsZScpLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3Nob3J0ZW5lZE51bWJlcicpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJ2NvbG9yJyksXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlICE9PSBWQUxVRV9OQTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgIC8vIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMTAsIDQwKSxcbiAgICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDEwLCBzaXplLmgpLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDUsIDUsIDUsIDApLFxuICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTJwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuR1JBWSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSAhPT0gVkFMVUVfTkE7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAndW5pdFByZWZpeGVzJyksXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC8vIEljb24gRXJyIHdoZW4gbGFjayBvZiB2YWx1ZVxuICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMTAsIDEwLCAxMCksXG4gICAgICAgICAgICAgICAgICB0ZXh0OiBWQUxVRV9OQSwgLy8gT2xkIHZlcnNpb246IFRFWFRfRVJST1JcbiAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuU0FMTU9OLFxuICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBpc011bHRpbGluZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUgPT09IFZBTFVFX05BO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLjUsIDgsIDApLFxuICAgICAgfSksXG4gICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICB9KSxcbiAgICAgIC8vIGZvdXIgbmFtZWQgcG9ydHMsIG9uZSBvbiBlYWNoIHNpZGU6XG5cbiAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpXG4gICAgKTtcbiAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KFxuICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkRBVEFfQk9YLFxuICAgICAgbm9kZVxuICAgICk7XG4gIH1cblxuICBzaG93UG9pbnQobG9jKSB7XG4gICAgY29uc3QgZG9jTG9jID0gdGhpcy5teURpYWdyYW0udHJhbnNmb3JtRG9jVG9WaWV3KGxvYyk7XG4gIH1cblxuICBtYWtlRW50aXR5VGVtcGxhdGUoXG4gICAgaWNvbixcbiAgICB0aXRsZSxcbiAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7XG4gICAgICB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICAgIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgIH1cbiAgKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICBnby5Ob2RlLFxuICAgICAgJ1Nwb3QnLFxuICAgICAge1xuICAgICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAvLyBzZWxmLnNob3dQb2ludChvYmo/LnBhcnQ/LmxvY2F0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgc2VsZi5vbkNsaWNrQ29tcG9lbnQuZW1pdCh7XG4gICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogb2JqPy5kYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdGhpcy4kKFxuICAgICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNoYWRvd1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hhZG93Qmx1cjogNixcbiAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQ6IG5ldyBnby5Qb2ludCgwLCAyKSxcbiAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogJyMwMDAwMDAyOScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICBmaWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCxcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBtb3JlXG4gICAgICAgICAgICAgICAgIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlJPX1dBVEVSX1RSRUFUTUVOVFxuICAgICAgICAgICAgICAgICAgICAgICAgXS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09PTElOR19UT1dFUlxuICAgICAgICAgICAgICAgICAgICAgICAgXS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQk9JTEVSXG4gICAgICAgICAgICAgICAgICAgICAgICBdLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5JTU1FUlNFRF9VRl9XQVRFUl9UUkVBVE1FTlRTXG4gICAgICAgICAgICAgICAgICAgICAgICBdLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5QUkVTU1VSSVpFRF9VRl9XQVRFUl9UUkVBVE1FTlRTXG4gICAgICAgICAgICAgICAgICAgICAgICBdLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgXS5pbmNsdWRlcyh0aXRsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuQVNTRVRfUEFSQU1FVEVSUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT1VURkxPVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiB7fVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdtb3ZhYmxlJywgJ21vdmFibGUnKSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShcbiAgICAgICAgZ28uUG9pbnQuc3RyaW5naWZ5XG4gICAgICApLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAndmlzaWJsZScpLFxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ0F1dG8nLFxuICAgICAgICB7XG4gICAgICAgICAgd2lkdGg6IHNpemUudyxcbiAgICAgICAgICBoZWlnaHQ6IHNpemUuaCxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJTktfV0FURVIsXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgc2l6ZS5oIC0gNTApLFxuICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoNjAsIDYwKSxcbiAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgIC8vIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgLy8gICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAvLyAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgLy8gICAgIHRleHQ6IHRpdGxlLFxuICAgICAgICAgICAgLy8gICB9KVxuICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAwLCAzLCAwKSxcbiAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMTUpLFxuICAgICAgICAgICAgICBzdHJva2U6ICcjMDAwRDQyJyxcbiAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIC8vIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgeyBtYXJnaW46IDQgfSxcbiAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2VkaXRhYmxlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX0NPTVBPTkVOVF9XQVRFUj8uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICBkYXRhPy5zeXN0ZW1UeXBlXG4gICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgIGRhdGE/LnRvcG9sb2d5VHlwZSAhPT0gQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRS5XQVRFUiAmJlxuICAgICAgICAgICAgICAgIGRhdGE/LnRvcG9sb2d5VHlwZSAhPT1cbiAgICAgICAgICAgICAgICAgIEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUuV0FURVJfUExBTlRfQ0VMTFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICksXG5cbiAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICB9KSxcbiAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgIH0pLFxuXG4gICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpXG4gICAgKTtcbiAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgfVxuXG4gIG1ha2VFbnRpdHlUZW1wbGF0ZUVuZXJneShcbiAgICBpY29uLFxuICAgIHRpdGxlLFxuICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHtcbiAgICAgIHc6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgICAgaDogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsXG4gICAgfVxuICApIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgIGdvLk5vZGUsXG4gICAgICAnU3BvdCcsXG4gICAgICB7XG4gICAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgIG1vdXNlT3ZlcjogZnVuY3Rpb24gKGUsIG9iaikge1xuICAgICAgICAgIC8vIHNlbGYuc2hvd1BvaW50KG9iaj8ucGFydD8ubG9jYXRpb24pO1xuICAgICAgICB9LFxuICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdGhpcy4kKFxuICAgICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNoYWRvd1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hhZG93Qmx1cjogNixcbiAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQ6IG5ldyBnby5Qb2ludCgwLCAyKSxcbiAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogJyMwMDAwMDAyOScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICBmaWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCxcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBtb3JlXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFtcbiAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVUQUlMUyxcbiAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFTEVURSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAndmlzaWJsZScpLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ21vdmFibGUnLCAnbW92YWJsZScpLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KFxuICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICksXG4gICAgICB0aGlzLiQoXG4gICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAnQXV0bycsXG4gICAgICAgIHtcbiAgICAgICAgICB3aWR0aDogc2l6ZS53LFxuICAgICAgICAgIGhlaWdodDogc2l6ZS5oLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElOS19XQVRFUixcbiAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuJChcbiAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5URU1QTEFURV9EVVBMSUNBVEVbdGl0bGVdID8/IHRpdGxlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCAxNSksXG4gICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAvLyB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgIC8vICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAvLyAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgLy8gICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgLy8gICAgIHRleHQ6IHRpdGxlLFxuICAgICAgICAgICAgICAvLyAgIH0pXG4gICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgc2l6ZS5oIC0gNjUpLFxuICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDMsIDMsIDMpLFxuICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDE1KSxcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJDMkMyQycsXG4gICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAvLyB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICB9KSxcbiAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgIH0pLFxuICAgICAgLy8gZm91ciBuYW1lZCBwb3J0cywgb25lIG9uIGVhY2ggc2lkZTpcblxuICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKVxuICAgICk7XG4gICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gIH1cblxuICAvLyBQbGFudCBDZWxsXG4gIHBsYW50Q2VsbFRlbXBsYXRlKFxuICAgIGljb24sXG4gICAgdGl0bGUsXG4gICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0ge1xuICAgICAgdzogMjYwLFxuICAgICAgaDogQXRvR29qc0VkaXRvck1vZGVsLlBMQU5UX0NFTExfSEVJR0hULFxuICAgIH1cbiAgKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICBnby5Hcm91cCxcbiAgICAgICdTcG90JyxcbiAgICAgIHtcbiAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgbW91c2VPdmVyOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgLy8gc2VsZi5zaG93UG9pbnQob2JqPy5wYXJ0Py5sb2NhdGlvbik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbW91c2VFbnRlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAgIC8vIHNlbGYub25Ib3ZlckFsZXJ0LmVtaXQoe1xuICAgICAgICAgIC8vICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgIC8vICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAvLyAgICAgbWVzc2FnZUFsZXJ0OiAob2JqIGFzIGFueSkucGFydD8ub2I/Lm1lc3NhZ2VBbGVydCxcbiAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBsZXQgc2hhcGUgPSAobm9kZSBhcyBhbnkpPy5maW5kT2JqZWN0KCdTSEFQRV9LRVknKTsgLy8gVGhheSAnU0hBUEVfS0VZJyBi4bqxbmcga2jDs2EgYuG6oW4gxJHhurd0IGNobyBow6xuaCBTaGFwZVxuICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgIGlmIChzaGFwZSkge1xuICAgICAgICAgICAgc2hhcGUuc3Ryb2tlID0gJ2JsdWUnOyAvLyBUaGF5IMSR4buVaSBtw6B1IHN0cm9rZSB0aMOgbmggYmx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW91c2VMZWF2ZTogKGUsIG9iaikgPT4ge1xuICAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAvLyBzZWxmLm9uSG92ZXJBbGVydC5lbWl0KG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgIHNlbGYub25DbGlja0NvbXBvZW50LmVtaXQoe1xuICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IG9iaj8uZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBkb3VibGVDbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsT3B0aW9ucz8uaXNSZWFkT25seSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgICAgdGhpcy5pc1Nob3dOb2RlSW5mb1xuICAgICAgICAgICAgICA/IHNlbGYub25Eb3VibGVDbGlja05vZGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBUb2RvXG5cbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdGhpcy4kKFxuICAgICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNoYWRvd1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hhZG93Qmx1cjogNixcbiAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQ6IG5ldyBnby5Qb2ludCgwLCAyKSxcbiAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogJyMwMDAwMDAyOScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgeyB3aWR0aDogMTcwIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICBmaWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIHsgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LCBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20gfSxcbiAgICAgICAgICAgICAgICAvLyBtb3JlXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFtcbiAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuQ0hBTkdFX0lDT04sXG4gICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT05MWV9ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgLy8gICBEZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT1VURkxPVyxcbiAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAvLyAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2lzTm90QWN0aW9uJywgKHgpID0+ICF4KSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIC8vICAgdGhpcy4kKFxuICAgICAgICAgICAgICAvLyAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgLy8gICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAvLyAgICAgICB7IGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tIH0sXG4gICAgICAgICAgICAgIC8vICAgICAgIHRoaXMuZ2VuZXJhdGVBY3Rpb25Hcm91cChbRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9OTFlfREVUQUlMU10pLFxuICAgICAgICAgICAgICAvLyAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAvLyAgICAgICAgICAgcmV0dXJuIHg/LmlzT25seURldGFpbHMgJiYgIXg/LmlzTm90QWN0aW9uID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAvLyAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShcbiAgICAgICAgZ28uUG9pbnQuc3RyaW5naWZ5XG4gICAgICApLFxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ0F1dG8nLFxuICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgIC8vIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgIC8vICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAvLyAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElOS19XQVRFUixcbiAgICAgICAgLy8gICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAvLyB9KSxcbiAgICAgICAgLy8gdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksIHZpc2libGU6IGZhbHNlIH0pLFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCA1MCwgMCwgNTApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgdGl0bGUsIHtcbiAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMCwgMTAsIDApLFxuICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDE1KSxcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIC8vIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgLy8gICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgIC8vICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAvLyAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAvLyAgICAgdGV4dDogdGl0bGUsXG4gICAgICAgICAgICAgIC8vICAgfSlcbiAgICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICBnby5QaWN0dXJlLFxuICAgICAgICAgICAgICBpY29uLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBzaXplLmggLSA2NSksXG4gICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZyhcbiAgICAgICAgICAgICAgICAnc291cmNlJyxcbiAgICAgICAgICAgICAgICAncGF0aEltYWdlJyxcbiAgICAgICAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICAgICAgIHggPz9cbiAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBMQU5UX0NFTExcbiAgICAgICAgICAgICAgICAgIF0uaWNvblxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAwLCAzLCAwKSxcbiAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDE1KSxcbiAgICAgICAgICAgICAgICBzdHJva2U6ICcjMkMyQzJDJyxcbiAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIC8vIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICksXG5cbiAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICB9KSxcbiAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAvLyB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAvLyB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgIC8vIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgKTtcbiAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgfVxuXG4gIG1ha2VFbnRpdHlXaXRoZHJhd09yRGlzY2hhcmdlKFxuICAgIGljb24sXG4gICAgdGl0bGUsXG4gICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0ge1xuICAgICAgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsXG4gICAgICBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICB9XG4gICkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgZ28uTm9kZSxcbiAgICAgICdTcG90JyxcbiAgICAgIHtcbiAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgbW91c2VPdmVyOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgLy8gc2VsZi5zaG93UG9pbnQob2JqPy5wYXJ0Py5sb2NhdGlvbik7XG4gICAgICAgIH0sXG4gICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgIHNlbGYub25DbGlja0NvbXBvZW50LmVtaXQoe1xuICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IG9iaj8uZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHRoaXMuJChcbiAgICAgICAgICAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICBmaWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIHsgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LCBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20gfSxcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQWN0aW9uR3JvdXAoW1xuICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICd2aXNpYmxlJyksXG4gICAgICBuZXcgZ28uQmluZGluZygnbW92YWJsZScsICdtb3ZhYmxlJyksXG4gICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAgICAgKSxcblxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ0F1dG8nLFxuICAgICAgICB7XG4gICAgICAgICAgd2lkdGg6IHNpemUudyxcbiAgICAgICAgICBoZWlnaHQ6IHNpemUuaCxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJTktfV0FURVIsXG4gICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAvLyB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgICAgIC8vICAgICByb3c6IDAsXG4gICAgICAgICAgLy8gICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgLy8gICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgIC8vICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAvLyAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAvLyAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAvLyB9KSxcbiAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgc2l6ZS5oIC0gNTApLFxuICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDAsIDMsIDApLFxuICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCAxNSksXG4gICAgICAgICAgICAgIHN0cm9rZTogJyMwMDBENDInLFxuICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgLy8gd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KClcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICAvLyBkZWZpbmUgYSB0b29sdGlwIGZvciBlYWNoIG5vZGUgdGhhdCBkaXNwbGF5cyB0aGUgY29sb3IgYXMgdGV4dFxuICAgICAgICAgICAgLy8gICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7IG1hcmdpbjogNCB9LCBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykpLFxuICAgICAgICAgICAgLy8gICAgICksIC8vIGVuZCBvZiBBZG9ybm1lbnRcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMC41LCA4LCAwKSxcbiAgICAgIH0pLFxuICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDEsIDAuNSwgLTgsIDApLFxuICAgICAgfSksXG4gICAgICAvLyBmb3VyIG5hbWVkIHBvcnRzLCBvbmUgb24gZWFjaCBzaWRlOlxuXG4gICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpXG4gICAgKTtcbiAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgfVxuXG4gIGVkaXRUZXh0R3JvdXBab25lKGUsIGJ1dHRvbikge1xuICAgIGNvbnN0IG5vZGVHcm91cCA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuICAgIGNvbnN0IGRpYWdyYW0gPSBub2RlR3JvdXAuZGlhZ3JhbTtcbiAgICBlLmRpYWdyYW0uY29tbWFuZEhhbmRsZXIuZWRpdFRleHRCbG9jayhub2RlR3JvdXAuZmluZE9iamVjdCgnVEVYVEJMT0NLJykpO1xuICB9XG5cbiAgZWRpdFRleHQoZSwgYnV0dG9uKSB7XG4gICAgY29uc3Qgbm9kZSA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuICAgIGUuZGlhZ3JhbS5jb21tYW5kSGFuZGxlci5lZGl0VGV4dEJsb2NrKG5vZGUuZmluZE9iamVjdCgnVEVYVEJMT0NLJykpO1xuICB9XG5cbiAgYXN5bmMgZHJhZ05ld05vZGUoZSwgYnV0dG9uKSB7XG4gICAgY29uc3QgdG9vbCA9IGUuZGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2w7XG5cbiAgICBpZiAodG9vbC5pc0JleW9uZERyYWdTaXplKCkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBidXR0b24uX2RyYWdEYXRhO1xuICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgICBlLmRpYWdyYW0uc3RhcnRUcmFuc2FjdGlvbignYnV0dG9uIGRyYWcnKTsgLy8gc2VlIGRvRGVhY3RpdmF0ZSwgYmVsb3dcblxuICAgICAgY29uc3QgZnJvbW5vZGUgPSBidXR0b24ucGFydC5hZG9ybmVkUGFydDtcbiAgICAgIGNvbnN0IGRpYWdyYW0gPSBmcm9tbm9kZS5kaWFncmFtO1xuICAgICAgY29uc3QgbW9kZWwgPSBkaWFncmFtLm1vZGVsO1xuICAgICAgY29uc3Qgbm9kZWRhdGEgPSB7XG4gICAgICAgIC4uLm1vZGVsLmNvcHlOb2RlRGF0YShkYXRhKSxcbiAgICAgICAga2V5OiBVdGlsc1NlcnZpY2UuZ2VuZXJhdGVVVUlEKCksXG4gICAgICB9O1xuICAgICAgbW9kZWwuYWRkTm9kZURhdGEobm9kZWRhdGEpO1xuICAgICAgY29uc3QgbmV3bm9kZSA9IGRpYWdyYW0uZmluZE5vZGVGb3JEYXRhKG5vZGVkYXRhKTtcbiAgICAgIGNvbnN0IGxpbmtkYXRhID0gbW9kZWwuY29weUxpbmtEYXRhKHt9KTtcbiAgICAgIG1vZGVsLnNldEZyb21LZXlGb3JMaW5rRGF0YShcbiAgICAgICAgbGlua2RhdGEsXG4gICAgICAgIG1vZGVsLmdldEtleUZvck5vZGVEYXRhKGZyb21ub2RlLmRhdGEpXG4gICAgICApO1xuICAgICAgbW9kZWwuc2V0VG9LZXlGb3JMaW5rRGF0YShcbiAgICAgICAgbGlua2RhdGEsXG4gICAgICAgIG1vZGVsLmdldEtleUZvck5vZGVEYXRhKG5ld25vZGUuZGF0YSlcbiAgICAgICk7XG4gICAgICBtb2RlbC5hZGRMaW5rRGF0YShsaW5rZGF0YSk7XG4gICAgICBkaWFncmFtLnNlbGVjdChuZXdub2RlKTtcbiAgICAgIC8vICAgdGhpcy5jcmVhdGVOb2RlQW5kTGluayhkYXRhLCBidXR0b24ucGFydC5hZG9ybmVkUGFydCk7XG5cbiAgICAgIG5ld25vZGUubG9jYXRpb24gPSBlLmRpYWdyYW0ubGFzdElucHV0LmRvY3VtZW50UG9pbnQ7XG4gICAgICAvLyBkb24ndCBjb21taXRUcmFuc2FjdGlvbiBoZXJlLCBidXQgaW4gdG9vbC5kb0RlYWN0aXZhdGUsIGFmdGVyIGRyYWcgb3BlcmF0aW9uIGZpbmlzaGVkXG4gICAgICAvLyBzZXQgdG9vbC5jdXJyZW50UGFydCB0byBhIHNlbGVjdGVkIG1vdmFibGUgUGFydCBhbmQgdGhlbiBhY3RpdmF0ZSB0aGUgRHJhZ2dpbmdUb29sXG4gICAgICB0b29sLmN1cnJlbnRQYXJ0ID0gbmV3bm9kZTtcbiAgICAgIGUuZGlhZ3JhbS5jdXJyZW50VG9vbCA9IHRvb2w7XG4gICAgICB0b29sLmRvQWN0aXZhdGUoKTtcbiAgICB9XG4gIH1cblxuICBhZGRJdGVtT25Hcm91cFpvbmUoZSwgYnV0dG9uKSB7XG4gICAgY29uc3QgZGF0YSA9IGJ1dHRvbi5fZHJhZ0RhdGE7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgZS5kaWFncmFtLnN0YXJ0VHJhbnNhY3Rpb24oJ0FkZCBJdGVtIE9uIEdyb3VwIFpvbmUnKTtcbiAgICBjb25zdCBmcm9tbm9kZSA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuICAgIGNvbnN0IGRyYWdEYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICBjb25zdCBkaWFncmFtID0gZnJvbW5vZGUuZGlhZ3JhbTtcbiAgICBjb25zdCBtb2RlbCA9IGRpYWdyYW0ubW9kZWw7XG4gICAgY29uc3Qgbm9kZWRhdGEgPSBtb2RlbC5jb3B5Tm9kZURhdGEoZHJhZ0RhdGEpO1xuICAgIG1vZGVsLmFkZE5vZGVEYXRhKHtcbiAgICAgIC4uLm5vZGVkYXRhLFxuICAgICAgdHlwZTogJ1N1YlN5c3RlbScsXG4gICAgICBuYW1lOiAnW1RpdGxlLi4uXScsXG4gICAgICBuYW1lSXRlbTogJ1tOYW1lLi4uXScsXG4gICAgICBncm91cDogZnJvbW5vZGU/Lm9iPy5rZXksXG4gICAgfSk7XG4gICAgZS5kaWFncmFtLmNvbW1pdFRyYW5zYWN0aW9uKCdBZGQgSXRlbSBPbiBHcm91cCBab25lJyk7XG4gICAgLy8gY29uc3QgbmV3bm9kZSA9IGRpYWdyYW0uZmluZE5vZGVGb3JEYXRhKG5vZGVkYXRhKTtcbiAgICAvLyBjb25zdCBsaW5rZGF0YSA9IG1vZGVsLmNvcHlMaW5rRGF0YSh7fSk7XG4gICAgLy8gbW9kZWwuc2V0RnJvbUtleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShmcm9tbm9kZS5kYXRhKSk7XG4gICAgLy8gbW9kZWwuc2V0VG9LZXlGb3JMaW5rRGF0YShsaW5rZGF0YSwgbW9kZWwuZ2V0S2V5Rm9yTm9kZURhdGEobmV3bm9kZS5kYXRhKSk7XG4gICAgLy8gbW9kZWwuYWRkTGlua0RhdGEobGlua2RhdGEpO1xuICAgIC8vIGRpYWdyYW0uc2VsZWN0KG5ld25vZGUpO1xuXG4gICAgLy8gbmV3bm9kZS5sb2NhdGlvbiA9IG5ldyBnby5Qb2ludChmcm9tbm9kZS5sb2NhdGlvbi54ICsgMjAwLCBmcm9tbm9kZS5sb2NhdGlvbi55KTtcbiAgICAvLyBlLmRpYWdyYW0uY29tbWl0VHJhbnNhY3Rpb24oJ0NyZWF0ZSBOb2RlIGFuZCBMaW5rJyk7XG4gIH1cblxuICBnZW5lcmF0ZUFjdGlvbkdyb3VwKGFjdGlvbnM6IEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OU1tdKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIHRoaXMuJChcbiAgICAgICdCdXR0b24nLFxuICAgICAge1xuICAgICAgICBjbGljazogZnVuY3Rpb24gKGUsIG9iaikge1xuICAgICAgICAgIHNlbGYub3BlbkFjdGlvbk1lbnUoKTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFjdGlvbnMgPSBfLmZpbHRlcihcbiAgICAgICAgICAgIG9iai5wYXJ0Py5bJ29iJ10/LmFjdGlvbnMgPz8gYWN0aW9ucyxcbiAgICAgICAgICAgIChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIEluc2lnaHQgYnV0dG9uXG4gICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09IEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5JTlNJR0hUKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhb2JqLnBhcnQ/Llsnb2InXT8uaWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGFjdGlvbiA9PT0gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSAmJlxuICAgICAgICAgICAgICAgIG9iai5wYXJ0Py5bJ29iJ10/LnR5cGUgIT09XG4gICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFICYmXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfQ09NUE9ORU5UX1dBVEVSPy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgIG9iai5wYXJ0Py5bJ29iJ10/LnN5c3RlbVR5cGVcbiAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgb2JqLnBhcnQ/Llsnb2InXT8udG9wb2xvZ3lUeXBlICE9PVxuICAgICAgICAgICAgICAgICAgQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRS5XQVRFUiAmJlxuICAgICAgICAgICAgICAgIG9iai5wYXJ0Py5bJ29iJ10/LnRvcG9sb2d5VHlwZSAhPT1cbiAgICAgICAgICAgICAgICAgIEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUuV0FURVJfUExBTlRfQ0VMTFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGFjdGlvbiA9PT0gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1cgJiZcbiAgICAgICAgICAgICAgICBzZWxmLnBsYW50U2F0dXMgPT09IEFUT19FUGxhbnRUeXBlLkJBU0lDX1BMQU5UICYmXG4gICAgICAgICAgICAgICAgb2JqLnBhcnQ/LmRhdGE/LnR5cGUgPT09XG4gICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBBVE9fRUNPTVBPTkVOVF9QTEFOVF9UWVBFLlNURUFNID09PVxuICAgICAgICAgICAgICAgIG9iai5wYXJ0Py5bJ29iJ10/LnRvcG9sb2d5VHlwZSAmJlxuICAgICAgICAgICAgICBlID09PSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuSU5TSUdIVFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREFUQV9NQVBQSU5HO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBlID09PSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuRkxPV19ERVRBSUxTICYmXG4gICAgICAgICAgICAgIG9iaj8ucGFydD8uWydvYiddPy5zeXN0ZW1UeXBlID09PVxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RZUEVTLkNPT0xJTkdfVE9XRVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMU19BTkRfV0laQVJEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2VsZi5hY3Rpb25zID0gZmlsdGVyZWRBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb25DbGlja0ZuID0gKCkgPT4ge307XG4gICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5JTlNJR0hUOlxuICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5EQVRBX01BUFBJTkc6XG4gICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2VsZi5vbk9wZW5JbnNpZ2h0TWFwcGluZy5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogb2JqLnBhcnQsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERVRBSUxTOlxuICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5GTE9XX0RFVEFJTFM6XG4gICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMU19BTkRfV0laQVJEOlxuICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuRGV0YWlsLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBub2RlOiBvYmoucGFydCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9OTFlfREVUQUlMUzpcbiAgICAgICAgICAgICAgICBvbkNsaWNrRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZWxmLm9uT3BlbkRldGFpbC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogb2JqLnBhcnQsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5BU1NFVF9QQVJBTUVURVJTOlxuICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuQXNzZXRQYXJhbWV0ZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG9iai5wYXJ0LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FOlxuICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgb2JqLnBhcnQ/LmRhdGE/LnR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX05PREVcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm9uUmVuYW1lLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCAtIDUwLFxuICAgICAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgIC4uLm9iai5wYXJ0Py5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gTGF5b3V0U2VydmljZS5zZXRUb29sVGlwQ29tcG9uZW50RGF0YVN0YXRpYyh7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBjb21wb25lbnQ6IFJlbmFtZUJveENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggLSA1MCxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAuLi5vYmoucGFydD8uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lZGl0VGV4dChlLCBvYmopO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1c6XG4gICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2VsZi5jbGlja05ld05vZGUoXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICAgIF8ubWVyZ2Uob2JqLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uTW92ZTogc2VsZi5kcmFnTmV3Tm9kZSwgLy8gZGVmaW5lZCBiZWxvdywgdG8gc3VwcG9ydCBkcmFnZ2luZyBmcm9tIHRoZSBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBfZHJhZ0RhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkFDVElPTl9SSUdIVF9NRU5VX0dST1VQLkRBVEFfQk9YXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1fJHttb21lbnQoKS52YWx1ZU9mKCl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNlbGYuc2V0UHJvRk9yTmV3Tm9kZShzZWxmKSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEU6XG4gICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVOb2RlKGUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkNIQU5HRV9JQ09OOlxuICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuQ2hhbmdlSWNvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogb2JqLnBhcnQsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uQXRvRGVmYXVsdEdvanNFZGl0b3IuQUNUSU9OU1thY3Rpb25dLFxuICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgb25DbGlja0ZuKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAnQnV0dG9uQm9yZGVyLnN0cm9rZVdpZHRoJzogMCxcbiAgICAgICAgJ0J1dHRvbkJvcmRlci5maWxsJzogJ3doaXRlJyxcbiAgICAgIH0sXG4gICAgICAvLyBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdpc05vdERyYWdOZXdOb2RlJywgKHgpID0+ICF4KSxcbiAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2lzTm90RGVsZXRlJywgKHgpID0+ICF4KSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2lzTm90QWN0aW9uJywgKHgpID0+ICF4KSxcbiAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICB0ZXh0OiAnXFx1ZTQ4OScsXG4gICAgICAgIGZvbnQ6ICcyMHB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHNldFByb0ZPck5ld05vZGUoc2VsZikge1xuICAgIGlmIChzZWxmLnBsYW50U2F0dXMgPT09IEFUT19FUGxhbnRUeXBlLkJBU0lDX1BMQU5UKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgaXNOb3RBbGxvd0Nvbm5lY3Q6IHRydWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBjbGlja05ld05vZGUoZSwgYnV0dG9uKSB7XG4gICAgY29uc3QgZGF0YSA9IGJ1dHRvbi5fZHJhZ0RhdGE7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgZS5kaWFncmFtLnN0YXJ0VHJhbnNhY3Rpb24oJ0NyZWF0ZSBOb2RlIGFuZCBMaW5rJyk7XG4gICAgY29uc3QgZnJvbW5vZGUgPSBidXR0b24ucGFydC5hZG9ybmVkUGFydDtcblxuICAgIC8vIHRoaXMuY3JlYXRlTm9kZUFuZExpbmsoYnV0dG9uLl9kcmFnRGF0YSwgZnJvbW5vZGUpO1xuICAgIGNvbnN0IGRyYWdEYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICBjb25zdCBkaWFncmFtID0gZnJvbW5vZGUuZGlhZ3JhbTtcbiAgICBjb25zdCBtb2RlbCA9IGRpYWdyYW0ubW9kZWw7XG4gICAgY29uc3Qgbm9kZWRhdGEgPSB7XG4gICAgICAuLi5tb2RlbC5jb3B5Tm9kZURhdGEoZHJhZ0RhdGEpLFxuICAgICAga2V5OiBVdGlsc1NlcnZpY2UuZ2VuZXJhdGVVVUlEKCksXG4gICAgfTtcbiAgICBtb2RlbC5hZGROb2RlRGF0YSh7XG4gICAgICAuLi5ub2RlZGF0YSxcbiAgICAgIGlzRWRpdGFibGU6IHRydWUsXG4gICAgICBzaG9ydGVuZWROdW1iZXI6IDAsXG4gICAgICBpc0Zvcm1hdDogZmFsc2UsXG4gICAgICBkYXRhQ29sbGVjdGlvbk1ldGhvZDogQXRvR29qc0VkaXRvck1vZGVsLkRBVEFfQ09MTEVDVElPTl9NRVRIT0QuTUFOVUFMLFxuICAgICAgY29sb3I6XG4gICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5DT0xPUl9DT0xMRUNUSU9OX01FVEhPRFtcbiAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuREFUQV9DT0xMRUNUSU9OX01FVEhPRC5NQU5VQUxcbiAgICAgICAgXS5jb2xvcixcbiAgICAgIGdyb3VwOiBmcm9tbm9kZT8ub2I/Lmdyb3VwLFxuICAgICAgdmFsdWU6IDAsXG4gICAgfSk7XG4gICAgY29uc3QgbmV3bm9kZSA9IGRpYWdyYW0uZmluZE5vZGVGb3JEYXRhKG5vZGVkYXRhKTtcblxuICAgIGNvbnN0IGxpbmtkYXRhID0gbW9kZWwuY29weUxpbmtEYXRhKHt9KTtcbiAgICBtb2RlbC5zZXRGcm9tS2V5Rm9yTGlua0RhdGEoXG4gICAgICBsaW5rZGF0YSxcbiAgICAgIG1vZGVsLmdldEtleUZvck5vZGVEYXRhKGZyb21ub2RlLmRhdGEpXG4gICAgKTtcbiAgICBtb2RlbC5zZXRUb0tleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShuZXdub2RlLmRhdGEpKTtcbiAgICBtb2RlbC5hZGRMaW5rRGF0YShsaW5rZGF0YSk7XG4gICAgZGlhZ3JhbS5zZWxlY3QobmV3bm9kZSk7XG4gICAgaWYgKG5vZGVkYXRhPy5tb3ZhYmxlICE9PSB1bmRlZmluZWQgJiYgbm9kZWRhdGE/Lm1vdmFibGUgIT09IG51bGwpIHtcbiAgICAgIG5ld25vZGUubW92YWJsZSA9IG5vZGVkYXRhPy5tb3ZhYmxlO1xuICAgIH1cblxuICAgIG5ld25vZGUubG9jYXRpb24gPSBuZXcgZ28uUG9pbnQoXG4gICAgICBmcm9tbm9kZS5sb2NhdGlvbi54ICsgMTYwLFxuICAgICAgZnJvbW5vZGUubG9jYXRpb24ueSArXG4gICAgICAgIHRoaXMuZmluZExvY1lGcm9tbm9kZShmcm9tbm9kZSkgKiBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVFxuICAgICk7XG4gICAgZS5kaWFncmFtLmNvbW1pdFRyYW5zYWN0aW9uKCdDcmVhdGUgTm9kZSBhbmQgTGluaycpO1xuICB9XG5cbiAgZmluZExvY1lGcm9tbm9kZShmcm9tbm9kZSkge1xuICAgIC8vIEZpbmQgbG9jYXRpb24gYXV0byByaWdodFxuICAgIGNvbnN0IGxvY1lGcm9tbm9kZSA9IGZyb21ub2RlLmRhdGE/LmxvYz8uc3BsaXQoJyAnKT8uWzFdO1xuICAgIGNvbnN0IGxvY1lBbHJlYWR5RXhpc3Q6IGFueSA9IFtdO1xuICAgIGZyb21ub2RlLmZpbmRMaW5rc091dE9mKCkuZWFjaChmdW5jdGlvbiAobGluaykge1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IGxpbmsudG9Ob2RlO1xuICAgICAgaWYgKHRhcmdldE5vZGUpIHtcbiAgICAgICAgbG9jWUFscmVhZHlFeGlzdC5wdXNoKFxuICAgICAgICAgIHRhcmdldE5vZGUuZGF0YT8ubG9jPy5zcGxpdCgnICcpPy5bMV0gLSBsb2NZRnJvbW5vZGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAodGhpcy5pc0VtcHR5WUxvYyhsb2NZQWxyZWFkeUV4aXN0LCBpKSA9PT0gbnVsbCAmJiBpIDwgMTAwKSB7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzRW1wdHlZTG9jKGxvY1lBbHJlYWR5RXhpc3QsIGkpO1xuICB9XG5cbiAgaXNFbXB0eVlMb2MobG9jWUFscmVhZHlFeGlzdCwgaSkge1xuICAgIGlmIChcbiAgICAgICFfLnNvbWUoXG4gICAgICAgIGxvY1lBbHJlYWR5RXhpc3QsXG4gICAgICAgICh4KSA9PlxuICAgICAgICAgIHggPFxuICAgICAgICAgICAgaSAqIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVUICtcbiAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgLyAyICYmXG4gICAgICAgICAgeCA+XG4gICAgICAgICAgICBpICogQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgLVxuICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCAvIDJcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhXy5zb21lKFxuICAgICAgICBsb2NZQWxyZWFkeUV4aXN0LFxuICAgICAgICAoeCkgPT5cbiAgICAgICAgICB4IDxcbiAgICAgICAgICAgIC1pICogQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgK1xuICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCAvIDIgJiZcbiAgICAgICAgICB4ID5cbiAgICAgICAgICAgIC1pICogQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgLVxuICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCAvIDJcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiAtaTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjcmVhdGVOZXdOb2RlKG5ld25vZGUpIHtcbiAgICB0aGlzLmFkZFRlbXBsYXRlKG5ld25vZGUpO1xuICAgIHRoaXMubXlEaWFncmFtLnN0YXJ0VHJhbnNhY3Rpb24oJ2FkZCBncm91cCBub2RlJyk7XG4gICAgdGhpcy5teURpYWdyYW0ubW9kZWwuYWRkTm9kZURhdGEobmV3bm9kZSk7XG4gICAgdGhpcy5teURpYWdyYW0uY29tbWl0VHJhbnNhY3Rpb24oJ2FkZCBncm91cCBub2RlJyk7XG4gIH1cblxuICBkZWxldGVOb2RlKGUpIHtcbiAgICBlLmRpYWdyYW0uc3RhcnRUcmFuc2FjdGlvbignRGVsZXRlIGdyb3VwIG5vZGUnKTtcbiAgICBlLmRpYWdyYW0ucmVtb3ZlUGFydHMoZS5kaWFncmFtLnNlbGVjdGlvbik7XG4gICAgZS5kaWFncmFtLmNvbW1pdFRyYW5zYWN0aW9uKCdEZWxldGUgZ3JvdXAgbm9kZScpO1xuICB9XG5cbiAgZGVsZXRlTm9kZU9uRGlhZ3JhbShlKSB7XG4gICAgZS5zdGFydFRyYW5zYWN0aW9uKCdEZWxldGUgZ3JvdXAgbm9kZScpO1xuICAgIGUucmVtb3ZlUGFydHMoZS5zZWxlY3Rpb24pO1xuICAgIGUuY29tbWl0VHJhbnNhY3Rpb24oJ0RlbGV0ZSBncm91cCBub2RlJyk7XG4gIH1cblxuICBpbnNpZ2h0Tm9kZShlKSB7fVxuXG4gIGRyYXdMaW5rKGUsIGJ1dHRvbikge1xuICAgIGNvbnN0IG5vZGUgPSBidXR0b24ucGFydC5hZG9ybmVkUGFydDtcbiAgICBjb25zdCB0b29sID0gZS5kaWFncmFtLnRvb2xNYW5hZ2VyLmxpbmtpbmdUb29sO1xuICAgIHRvb2wuc3RhcnRPYmplY3QgPSBub2RlLnBvcnQ7XG4gICAgZS5kaWFncmFtLmN1cnJlbnRUb29sID0gdG9vbDtcbiAgICB0b29sLmRvQWN0aXZhdGUoKTtcbiAgfVxuXG4gIG1ha2VQb3J0R3JvdXAobmFtZSwgYWxpZ24sIHNwb3QsIG91dHB1dCwgaW5wdXQpIHtcbiAgICBjb25zdCBob3Jpem9udGFsID1cbiAgICAgIGFsaWduLmVxdWFscyhnby5TcG90LlRvcCkgfHwgYWxpZ24uZXF1YWxzKGdvLlNwb3QuQm90dG9tKTtcbiAgICByZXR1cm4gdGhpcy4kKFxuICAgICAgZ28uUGFuZWwsXG4gICAgICAnVGFibGUnLFxuICAgICAge1xuICAgICAgICBiYWNrZ3JvdW5kOiAnIzkxOUNBNScsXG4gICAgICAgIHdpZHRoOiA0MCxcbiAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgYWxpZ25tZW50OiBhbGlnbixcbiAgICAgICAgc3RyZXRjaDogaG9yaXpvbnRhbFxuICAgICAgICAgID8gZ28uR3JhcGhPYmplY3QuSG9yaXpvbnRhbFxuICAgICAgICAgIDogZ28uR3JhcGhPYmplY3QuVmVydGljYWwsXG4gICAgICAgIHBvcnRJZDogbmFtZSxcbiAgICAgICAgZnJvbVNwb3Q6IHNwb3QsXG4gICAgICAgIGZyb21MaW5rYWJsZTogb3V0cHV0LFxuICAgICAgICB0b1Nwb3Q6IHNwb3QsXG4gICAgICAgIHRvTGlua2FibGU6IGlucHV0LFxuICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQ2VudGVyLCAvLyB04bqtcCB0cnVuZyB2w6BvIHRydW5nIHTDom0gY+G7p2EgUGFuZWxcbiAgICAgICAgLy8gbW91c2VFbnRlcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAvLyAgICAgPyBudWxsXG4gICAgICAgIC8vICAgICA6IChlLCBwYW5lbCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgY29uc3QgdGV4dEJsb2NrID0gKHBhbmVsIGFzIGFueSk/LmZpbmRPYmplY3QoJ3RleHRCbG9jaycpIGFzIGdvLlRleHRCbG9jayB8IG51bGw7XG4gICAgICAgIC8vICAgICAgICAgICBpZiAodGV4dEJsb2NrKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgLy8gJiYgb3V0cHV0XG4gICAgICAgIC8vICAgICAgICAgICAgICAgdGV4dEJsb2NrLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAvLyAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgY2FzZSAnUic6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAncmdiKDI0MyAxNDQgMTcxKSc7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgY2FzZSAnTCc6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAncmdiKDEwMywxNTEsMjA3KSc7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3JnYigyNDMgMTQ0IDE3MSknO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICB9LFxuXG4gICAgICAgIC8vIG1vdXNlTGVhdmU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgLy8gICAgID8gbnVsbFxuICAgICAgICAvLyAgICAgOiAoZSwgcGFuZWwpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgIGNvbnN0IHRleHRCbG9jayA9IChwYW5lbCBhcyBhbnkpLmZpbmRPYmplY3QoJ3RleHRCbG9jaycpIGFzIGdvLlRleHRCbG9jayB8IG51bGw7XG4gICAgICAgIC8vICAgICAgICAgICBpZiAodGV4dEJsb2NrKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgdGV4dEJsb2NrLnZpc2libGUgPSBmYWxzZTsgLy8g4bqobiBUZXh0QmxvY2sga2hpIHLhu51pIGto4buPaSBQYW5lbFxuICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgIC8vICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICB0aGlzLiQoZ28uU2hhcGUsICdFbGxpcHNlJywge1xuICAgICAgICBmaWxsOiAnd2hpdGUnLCAvLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjaXJjbGVcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgIHN0cm9rZTogJyM5MTlDQTUnLCAvLyBCb3JkZXIgY29sb3Igb2YgdGhlIGNpcmNsZVxuICAgICAgICB3aWR0aDogNDAsIC8vIE1hdGNoIHRoZSBwYW5lbCdzIHdpZHRoXG4gICAgICAgIGhlaWdodDogNDAsIC8vIE1hdGNoIHRoZSBwYW5lbCdzIGhlaWdodFxuICAgICAgfSlcblxuICAgICAgLy8gdGhpcy4kKFxuICAgICAgLy8gICAgIGdvLlRleHRCbG9jayxcbiAgICAgIC8vICAgICB7XG4gICAgICAvLyAgICAgICAgIG5hbWU6ICd0ZXh0QmxvY2snLFxuICAgICAgLy8gICAgICAgICBtYXJnaW46IDQsXG4gICAgICAvLyAgICAgICAgIHRleHQ6ICdcXHVmMGRhJywgLy8gTcOjIFVuaWNvZGUgdMawxqFuZyDhu6luZyB24bubaSBmYS1jYXJldC1sZWZ0XG4gICAgICAvLyAgICAgICAgIGZvbnQ6ICc5MDAgMTJweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgIC8vICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLCAvLyDEkOG6t3QgbcOgdSBjaOG7ryB0aMOgbmggbcOgdSB0cuG6r25nXG4gICAgICAvLyAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgLy8gICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnLCAoXykgPT4ge1xuICAgICAgLy8gICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIC8vICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgLy8gICAgICAgICAgICAgY2FzZSAnQic6IHtcbiAgICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdWYwZDcnO1xuICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgLy8gICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAvLyAgICAgICAgICAgICBjYXNlICdSJzoge1xuICAgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkYSc7XG4gICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAvLyAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHVmMGQ3JztcbiAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgIC8vICAgICAgICAgfVxuICAgICAgLy8gICAgIH0pLFxuICAgICAgLy8gKSxcbiAgICApO1xuICB9XG5cbiAgbWFrZVBvcnQobmFtZSwgYWxpZ24sIHNwb3QsIG91dHB1dCwgaW5wdXQpIHtcbiAgICAvLyBpZiAodGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSkge1xuICAgIC8vICAgICByZXR1cm4ge307XG4gICAgLy8gfVxuICAgIGNvbnN0IGhvcml6b250YWwgPVxuICAgICAgYWxpZ24uZXF1YWxzKGdvLlNwb3QuVG9wKSB8fCBhbGlnbi5lcXVhbHMoZ28uU3BvdC5Cb3R0b20pO1xuICAgIC8vIGNvbnN0IHZlcnRpY2FsID0gYWxpZ24uZXF1YWxzKGdvLlNwb3QuTGVmdCkgfHwgYWxpZ24uZXF1YWxzKGdvLlNwb3QuUmlnaHQpO1xuICAgIC8vIHRoZSBwb3J0IGlzIGJhc2ljYWxseSBqdXN0IGEgdHJhbnNwYXJlbnQgcmVjdGFuZ2xlIHRoYXQgc3RyZXRjaGVzIGFsb25nIHRoZSBzaWRlIG9mIHRoZSBub2RlLFxuICAgIC8vIGFuZCBiZWNvbWVzIGNvbG9yZWQgd2hlbiB0aGUgbW91c2UgcGFzc2VzIG92ZXIgaXRcbiAgICByZXR1cm4gdGhpcy4kKFxuICAgICAgZ28uUGFuZWwsXG4gICAgICAnVGFibGUnLFxuICAgICAge1xuICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICB3aWR0aDogaG9yaXpvbnRhbCA/IE5hTiA6IDgsXG4gICAgICAgIGhlaWdodDogIWhvcml6b250YWwgPyBOYU4gOiA4LFxuICAgICAgICBhbGlnbm1lbnQ6IGFsaWduLFxuICAgICAgICBzdHJldGNoOiBob3Jpem9udGFsXG4gICAgICAgICAgPyBnby5HcmFwaE9iamVjdC5Ib3Jpem9udGFsXG4gICAgICAgICAgOiBnby5HcmFwaE9iamVjdC5WZXJ0aWNhbCxcbiAgICAgICAgcG9ydElkOiBuYW1lLFxuICAgICAgICBmcm9tU3BvdDogc3BvdCxcbiAgICAgICAgZnJvbUxpbmthYmxlOiBvdXRwdXQsXG4gICAgICAgIHRvU3BvdDogc3BvdCxcbiAgICAgICAgdG9MaW5rYWJsZTogaW5wdXQsXG4gICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5DZW50ZXIsIC8vIHThuq1wIHRydW5nIHbDoG8gdHJ1bmcgdMOibSBj4bunYSBQYW5lbFxuICAgICAgICBtb3VzZUVudGVyOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiAoZSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdGV4dEJsb2NrID0gKHBhbmVsIGFzIGFueSk/LmZpbmRPYmplY3QoXG4gICAgICAgICAgICAgICAgJ3RleHRCbG9jaydcbiAgICAgICAgICAgICAgKSBhcyBnby5UZXh0QmxvY2sgfCBudWxsO1xuICAgICAgICAgICAgICBpZiAodGV4dEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgLy8gJiYgb3V0cHV0XG4gICAgICAgICAgICAgICAgdGV4dEJsb2NrLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSAnQic6XG4gICAgICAgICAgICAgICAgICBjYXNlICdSJzoge1xuICAgICAgICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3JnYigyNDMgMTQ0IDE3MSknO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgICAgICAgY2FzZSAnTCc6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICdyZ2IoMTAzLDE1MSwyMDcpJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAncmdiKDI0MyAxNDQgMTcxKSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgIG1vdXNlTGVhdmU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IChlLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0ZXh0QmxvY2sgPSAocGFuZWwgYXMgYW55KS5maW5kT2JqZWN0KFxuICAgICAgICAgICAgICAgICd0ZXh0QmxvY2snXG4gICAgICAgICAgICAgICkgYXMgZ28uVGV4dEJsb2NrIHwgbnVsbDtcbiAgICAgICAgICAgICAgaWYgKHRleHRCbG9jaykge1xuICAgICAgICAgICAgICAgIHRleHRCbG9jay52aXNpYmxlID0gZmFsc2U7IC8vIOG6qG4gVGV4dEJsb2NrIGtoaSBy4budaSBraOG7j2kgUGFuZWxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YT8uaXNOb3RBbGxvd0Nvbm5lY3QpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGE/LnNlbGVjdGFibGUgPT09IGZhbHNlICYmICFkYXRhPy5pc0FsbG93Q29ubmVjdCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YT8uZmxvd09mUGxhbnRDZWxsKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0YT8uZmxvd09mUGxhbnRDZWxsID09PSBBVE9fRU5VTV9GTE9XX0RJUkVDVElPTi5JTkZMT1cgJiZcbiAgICAgICAgICAgIG5hbWUgPT09ICdMJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGE/LmZsb3dPZlBsYW50Q2VsbCA9PT0gQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04uT1VURkxPVyAmJlxuICAgICAgICAgICAgbmFtZSA9PT0gJ1InXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgIGNhc2UgJ1InOiB7XG4gICAgICAgICAgICByZXR1cm4gIWRhdGE/LmlzTm90U2VsZWN0T3V0cHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICBjYXNlICdMJzoge1xuICAgICAgICAgICAgcmV0dXJuICFkYXRhPy5pc05vdFNlbGVjdElucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuXG4gICAgICB0aGlzLiQoXG4gICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd0ZXh0QmxvY2snLFxuICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICB0ZXh0OiAnXFx1ZjBkYScsIC8vIE3DoyBVbmljb2RlIHTGsMahbmcg4bupbmcgduG7m2kgZmEtY2FyZXQtbGVmdFxuICAgICAgICAgIGZvbnQ6ICc5MDAgMTJweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsIC8vIMSQ4bq3dCBtw6B1IGNo4buvIHRow6BuaCBtw6B1IHRy4bqvbmdcbiAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScsIChfKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgIGNhc2UgJ0InOiB7XG4gICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkNyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdMJzpcbiAgICAgICAgICAgIGNhc2UgJ1InOiB7XG4gICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkNyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyByZXR1cm4gdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgLy8gICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsIC8vIGNoYW5nZWQgdG8gYSBjb2xvciBpbiB0aGUgbW91c2VFbnRlciBldmVudCBoYW5kbGVyXG4gICAgLy8gICAgIHN0cm9rZVdpZHRoOiAwLCAvLyBubyBzdHJva2VcbiAgICAvLyAgICAgd2lkdGg6IGhvcml6b250YWwgPyBOYU4gOiA4LCAvLyBpZiBub3Qgc3RyZXRjaGluZyBob3Jpem9udGFsbHksIGp1c3QgOCB3aWRlXG4gICAgLy8gICAgIGhlaWdodDogIWhvcml6b250YWwgPyBOYU4gOiA4LCAvLyBpZiBub3Qgc3RyZXRjaGluZyB2ZXJ0aWNhbGx5LCBqdXN0IDggdGFsbFxuICAgIC8vICAgICBhbGlnbm1lbnQ6IGFsaWduLCAvLyBhbGlnbiB0aGUgcG9ydCBvbiB0aGUgbWFpbiBTaGFwZVxuICAgIC8vICAgICBzdHJldGNoOiBob3Jpem9udGFsID8gZ28uR3JhcGhPYmplY3QuSG9yaXpvbnRhbCA6IGdvLkdyYXBoT2JqZWN0LlZlcnRpY2FsLFxuICAgIC8vICAgICBwb3J0SWQ6IG5hbWUsIC8vIGRlY2xhcmUgdGhpcyBvYmplY3QgdG8gYmUgYSBcInBvcnRcIlxuICAgIC8vICAgICBmcm9tU3BvdDogc3BvdCwgLy8gZGVjbGFyZSB3aGVyZSBsaW5rcyBtYXkgY29ubmVjdCBhdCB0aGlzIHBvcnRcbiAgICAvLyAgICAgZnJvbUxpbmthYmxlOiBvdXRwdXQsIC8vIGRlY2xhcmUgd2hldGhlciB0aGUgdXNlciBtYXkgZHJhdyBsaW5rcyBmcm9tIGhlcmVcbiAgICAvLyAgICAgdG9TcG90OiBzcG90LCAvLyBkZWNsYXJlIHdoZXJlIGxpbmtzIG1heSBjb25uZWN0IGF0IHRoaXMgcG9ydFxuICAgIC8vICAgICB0b0xpbmthYmxlOiBpbnB1dCwgLy8gZGVjbGFyZSB3aGV0aGVyIHRoZSB1c2VyIG1heSBkcmF3IGxpbmtzIHRvIGhlcmVcbiAgICAvLyAgICAgY3Vyc29yOiAncG9pbnRlcicsIC8vIHNob3cgYSBkaWZmZXJlbnQgY3Vyc29yIHRvIGluZGljYXRlIHBvdGVudGlhbCBsaW5rIHBvaW50XG4gICAgLy8gICAgIG1vdXNlRW50ZXI6IChlLCBwb3J0KSA9PiB7XG4gICAgLy8gICAgICAgICAvLyB0aGUgUE9SVCBhcmd1bWVudCB3aWxsIGJlIHRoaXMgU2hhcGVcbiAgICAvLyAgICAgICAgIGlmICghZS5kaWFncmFtLmlzUmVhZE9ubHkgJiYgb3V0cHV0KSB7XG4gICAgLy8gICAgICAgICAgICAgcG9ydC5maWxsID0gJ3JnYmEoMjU1LDAsMjU1LDAuNSknXG4gICAgLy8gICAgICAgICB9O1xuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBtb3VzZUxlYXZlOiAoZSwgcG9ydCkgPT4ge1xuICAgIC8vICAgICAgICAgcmV0dXJuIChwb3J0LmZpbGwgPSAndHJhbnNwYXJlbnQnKTtcbiAgICAvLyAgICAgfSxcbiAgICAvLyB9KTtcbiAgfVxuXG4gIG1ha2VHcm91cEJhc2ljQ29tcG9uZW50KFxuICAgIGljb24sXG4gICAgdGl0bGUsXG4gICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiA4MCwgaDogODAgfVxuICApIHtcbiAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgIGdvLkdyb3VwLFxuICAgICAgJ1Nwb3QnLFxuICAgICAge1xuICAgICAgICAvLyBsYXlvdXQ6IHRoaXMuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSksXG4gICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG4gICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gbW92YWJsZTogdHJ1ZSxcbiAgICAgICAgLy8gc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgZHJhZ0NvbXB1dGF0aW9uOiAobm9kZSwgcHQsIGdyaWRwdCkgPT4ge1xuICAgICAgICAgIHB0LnggPVxuICAgICAgICAgICAgTWF0aC5yb3VuZChwdC54IC8gQXRvR29qc0VkaXRvck1vZGVsLkJBU0lDX0dSSURfU0laRV9XSURUSCkgKlxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkJBU0lDX0dSSURfU0laRV9XSURUSDtcbiAgICAgICAgICBwdC55ID1cbiAgICAgICAgICAgIE1hdGgucm91bmQocHQueSAvIEF0b0dvanNFZGl0b3JNb2RlbC5CQVNJQ19HUklEX1NJWkVfSEVJR0hUKSAqXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuQkFTSUNfR1JJRF9TSVpFX0hFSUdIVDtcbiAgICAgICAgICByZXR1cm4gcHQ7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZShBdG9Hb2pzRWRpdG9yTW9kZWwuQkFTSUNfR1JJRF9TSVpFX1dJRFRILCBBdG9Hb2pzRWRpdG9yTW9kZWwuQkFTSUNfR1JJRF9TSVpFX0hFSUdIVCksXG4gICAgICAgIG1pblNpemU6IG5ldyBnby5TaXplKDEsIDEpLFxuICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSgxLCAxKSxcbiAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoMTAwLCAxMDApLFxuICAgICAgfSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShcbiAgICAgICAgZ28uUG9pbnQuc3RyaW5naWZ5XG4gICAgICApLFxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ0F1dG8nLFxuICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgc3Ryb2tlOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgIC8vIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgfSlcbiAgICAgICAgLy8gdGhpcy4kKGdvLlBsYWNlaG9sZGVyKSxcbiAgICAgICAgLy8gdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCkgfSksXG4gICAgICApXG4gICAgICAvLyB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgLy8gICAgIHJvdzogMCxcbiAgICAgIC8vICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAvLyAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAvLyAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgIC8vICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgLy8gICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgLy8gfSxcbiAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ2tleScpLm1ha2VUd29XYXkoKSwpLFxuXG4gICAgICAvLyB0aGlzLiQoXG4gICAgICAvLyAgICAgZ28uUGFuZWwsXG4gICAgICAvLyAgICAgJ1RhYmxlJyxcbiAgICAgIC8vICAgICB7XG4gICAgICAvLyAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BMZWZ0LFxuICAgICAgLy8gICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMCwgLTEwLCAtMTApLFxuICAgICAgLy8gICAgICAgICAvLyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDUwLCAwKSxcbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHRoaXMuJChcbiAgICAgIC8vICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAvLyAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgIC8vICAgICAgICAge1xuICAgICAgLy8gICAgICAgICAgICAgcm93OiAwLFxuICAgICAgLy8gICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAvLyAgICAgICAgIH0sXG4gICAgICAvLyAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAvLyAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAvLyAgICAgICAgICAgICAvLyBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgLy8gICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAvLyAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg0MCwgNDApLFxuICAgICAgLy8gICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgIC8vICAgICAgICAgdGhpcy4kKFxuICAgICAgLy8gICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAvLyAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgLy8gICAgICAgICAgICAge1xuICAgICAgLy8gICAgICAgICAgICAgICAgIGNvbHVtbjogMSxcbiAgICAgIC8vICAgICAgICAgICAgICAgICBkZWZhdWx0QWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAvLyAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAsIDAsIDIwKSxcbiAgICAgIC8vICAgICAgICAgICAgIH0sXG4gICAgICAvLyAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgLy8gICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgIC8vICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgNSwgMTApLFxuICAgICAgLy8gICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgLy8gICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgLy8gICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAvLyAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgIC8vICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgIC8vICAgICAgICAgICAgIH0pLFxuICAgICAgLy8gICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgLy8gICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDMsIDMsIDEwKSxcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCA0MCksXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDBENDInLFxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IEFyaWFsJyxcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgLy8gICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAvLyBkZWZpbmUgYSB0b29sdGlwIGZvciBlYWNoIG5vZGUgdGhhdCBkaXNwbGF5cyB0aGUgY29sb3IgYXMgdGV4dFxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7IG1hcmdpbjogNCB9LCBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykpLFxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgICApLCAvLyBlbmQgb2YgQWRvcm5tZW50XG4gICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgIC8vICAgICAgICAgICAgICksXG4gICAgICAvLyAgICAgICAgICksXG4gICAgICAvLyAgICAgKSxcbiAgICAgIC8vICksXG4gICAgKTtcbiAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gIH1cblxuICBtYWtlR3JvdXBUZW1wbGF0ZShcbiAgICBpY29uLFxuICAgIHRpdGxlLFxuICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODAsIGg6IDgwIH1cbiAgKSB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICBnby5Hcm91cCxcbiAgICAgICdTcG90JyxcbiAgICAgIHtcbiAgICAgICAgLy8gICAgIC8vIGxheW91dDogdGhpcy4kKGdvLkZvcmNlRGlyZWN0ZWRMYXlvdXQgLCB7XG4gICAgICAgIC8vICAgICAvLyAgICAgZGlyZWN0aW9uOiAwLFxuICAgICAgICAvLyAgICAgLy8gICAgIHNldHNQb3J0U3BvdHM6IGZhbHNlLFxuICAgICAgICAvLyAgICAgLy8gfSksXG5cbiAgICAgICAgLy8gbGF5b3V0OiB0aGlzLiQoZ28uTGF5ZXJlZERpZ3JhcGhMYXlvdXQsIHtcbiAgICAgICAgLy8gICAgIGRpcmVjdGlvbjogMCxcbiAgICAgICAgLy8gICAgIHNldHNQb3J0U3BvdHM6IGZhbHNlLFxuICAgICAgICAvLyB9KSxcblxuICAgICAgICBsYXlvdXQ6IHRoaXMuJChnby5MYXlvdXQpLFxuXG4gICAgICAgIC8vIC8vICAgICAvLyBhZG9ybm1lbnQgd2hlbiBhIGdyb3VwIGlzIHNlbGVjdGVkXG4gICAgICAgIC8vIC8vICAgICAvLyBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy4kKFxuICAgICAgICAvLyAvLyAgICAgLy8gICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgLy8gLy8gICAgIC8vICAgICAnQXV0bycsXG4gICAgICAgIC8vIC8vICAgICAvLyAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUmVjdGFuZ2xlJywgeyBmaWxsOiBudWxsLCBzdHJva2U6ICdkb2RnZXJibHVlJywgc3Ryb2tlV2lkdGg6IDggfSksXG4gICAgICAgIC8vIC8vICAgICAvLyAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyKSxcbiAgICAgICAgLy8gLy8gICAgIC8vICksXG4gICAgICB9LFxuXG4gICAgICAvLyBuZXcgZ28uQmluZGluZygnbGF5b3V0JywgJ2xheW91dCcsICh4KSA9PlxuICAgICAgLy8ge1xuICAgICAgLy8gICAgIHJldHVybiB0aGlzLiQoZ28uRm9yY2VEaXJlY3RlZExheW91dCAsIHtcbiAgICAgIC8vICAgICAgICAgZGlyZWN0aW9uOiAwLFxuICAgICAgLy8gICAgICAgICBzZXRzUG9ydFNwb3RzOiBmYWxzZSxcbiAgICAgIC8vICAgICB9KTtcbiAgICAgIC8vIH1cbiAgICAgIC8vICksXG4gICAgICB7XG4gICAgICAgIG1pblNpemU6IG5ldyBnby5TaXplKDQwMCwgNDAwKSxcbiAgICAgIH0sXG4gICAgICAvLyBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdBdXRvJyxcbiAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDYwLCAyMCwgMjAsIDIwKSB9KVxuICAgICAgKSxcblxuICAgICAgLy8gdGhpcy4kKFxuICAgICAgLy8gICAgIGdvLlBhbmVsLFxuICAgICAgLy8gICAgICdUYWJsZScsXG4gICAgICAvLyAgICAge1xuICAgICAgLy8gICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wTGVmdCxcbiAgICAgIC8vICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAsIC0xMCwgLTEwKSxcbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHRpdGxlLCB7XG4gICAgICAvLyAgICAgICAgIHJvdzogMCxcbiAgICAgIC8vICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDUsIDMpLFxuICAgICAgLy8gICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgIC8vICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAvLyAgICAgICAgIGZvbnQ6ICdub3JtYWwgOHB0IEFyaWFsJyxcbiAgICAgIC8vICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgIC8vICAgICB9KSxcbiAgICAgIC8vICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgLy8gICAgICAgICByb3c6IDEsXG4gICAgICAvLyAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAvLyAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDQwLCA0MCksXG4gICAgICAvLyAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgIC8vICAgICB9KSxcbiAgICAgIC8vICAgICB0aGlzLiQoXG4gICAgICAvLyAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgIC8vICAgICAgICAge1xuICAgICAgLy8gICAgICAgICAgICAgcm93OiAyLFxuICAgICAgLy8gICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAzLCAzLCAzKSxcbiAgICAgIC8vICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgLy8gICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDQwKSxcbiAgICAgIC8vICAgICAgICAgICAgIHN0cm9rZTogJyMwMDBENDInLFxuICAgICAgLy8gICAgICAgICAgICAgZm9udDogJ2JvbGQgOHB0IEFyaWFsJyxcbiAgICAgIC8vICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAvLyAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgIC8vICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgIC8vICAgICAgICAgfSxcbiAgICAgIC8vICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgIC8vICAgICAgICAge1xuICAgICAgLy8gICAgICAgICAgICAgLy8gZGVmaW5lIGEgdG9vbHRpcCBmb3IgZWFjaCBub2RlIHRoYXQgZGlzcGxheXMgdGhlIGNvbG9yIGFzIHRleHRcbiAgICAgIC8vICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJCgnVG9vbFRpcCcsIHRoaXMuJChnby5UZXh0QmxvY2ssIHsgbWFyZ2luOiA0IH0sIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKSkpLCAvLyBlbmQgb2YgQWRvcm5tZW50XG4gICAgICAvLyAgICAgICAgIH0sXG4gICAgICAvLyAgICAgKSxcbiAgICAgIC8vICAgICAvLyBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgIC8vICksXG5cbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdUYWJsZScsXG4gICAgICAgIHtcbiAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wTGVmdCxcbiAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMCwgLTEwLCAtMTApLFxuICAgICAgICAgIC8vIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgNTAsIDApLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgIC8vIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDQwLCA0MCksXG4gICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2x1bW46IDEsXG4gICAgICAgICAgICAgIGRlZmF1bHRBbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAsIDAsIDIwKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLlRFTVBMQVRFX0RVUExJQ0FURVt0aXRsZV0gPz8gdGl0bGUsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDUsIDEwKSxcbiAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMywgMywgMTApLFxuICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCA0MCksXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzAwMEQ0MicsXG4gICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZpbmUgYSB0b29sdGlwIGZvciBlYWNoIG5vZGUgdGhhdCBkaXNwbGF5cyB0aGUgY29sb3IgYXMgdGV4dFxuICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICB7IG1hcmdpbjogNCB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJylcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLCAvLyBlbmQgb2YgQWRvcm5tZW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICB9XG5cbiAgbWFrZUltYWdlVGVtcGxhdGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgIGdvLk5vZGUsXG4gICAgICAnU3BvdCcsXG4gICAgICB7XG4gICAgICAgIHpPcmRlcjogMSxcbiAgICAgIH0sXG4gICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGE/LnZpc2libGUgPT09ICdib29sZWFuJyA/IGRhdGE/LnZpc2libGUgOiB0cnVlO1xuICAgICAgfSksXG4gICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICB0aGlzLiQoXG4gICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgIHtcbiAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgIH0sXG4gICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShcbiAgICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy4kKFxuICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLklNQUdFX1JPX1dBVEVSX1RSRUFUTUVOVF9QQVRILFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZSg1MDAsIDUwMCksXG4gICAgICAgICAgICAvLyBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAvLyBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTMwLCAwLCAwLCAwKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdtYXJnaW4nLCAnbWFyZ2luJyksXG4gICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3dpZHRoJywgJ3dpZHRoJyksXG4gICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICdoZWlnaHQnKSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygnc291cmNlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YT8uc291cmNlXG4gICAgICAgICAgICAgID8gZGF0YT8uc291cmNlXG4gICAgICAgICAgICAgIDogQXRvR29qc0VkaXRvck1vZGVsLklNQUdFX1JPX1dBVEVSX1RSRUFUTUVOVF9QQVRIO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuSU1BR0VfVEVNUExBVEUsXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIG1ha2VQYXJhbVRhYmxlKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICBnby5QYXJ0LFxuICAgICAgJ1ZlcnRpY2FsJyxcbiAgICAgIC8vIHRoaXMuJChnby5TaGFwZSwgeyBmaWxsOiAnI0U2RjBGNycsIHN0cm9rZTogJyMwMDYzQTknLCBzdHJva2VXaWR0aDogMywgZ2VvbWV0cnlTdHJpbmc6ICdNIDUgMCBMIDk1IDAgUSAxMDAgMCAxMDAgNSBMIDEwMCA5NSBRIDEwMCAxMDAgOTUgMTAwIEwgNSAxMDAgUSAwIDEwMCAwIDk1IEwgMCA1IFEgMCAwIDUgMCcgIH0pLFxuICAgICAge1xuICAgICAgICB6T3JkZXI6IDIsXG4gICAgICAgIC8vIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMjAwKSxcbiAgICAgIH0sXG5cbiAgICAgIG5ldyBnby5CaW5kaW5nKCdwYWRkaW5nJywgJ3BhZGRpbmcnKSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShcbiAgICAgICAgZ28uUG9pbnQuc3RyaW5naWZ5XG4gICAgICApLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhPy52aXNpYmxlID09PSAnYm9vbGVhbicgPyBkYXRhPy52aXNpYmxlIDogdHJ1ZTtcbiAgICAgIH0pLFxuICAgICAgLy8gSGVhZGVyXG4gICAgICB0aGlzLiQoXG4gICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAnQXV0bycsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5GaWxsLFxuICAgICAgICAgIG1pblNpemU6IG5ldyBnby5TaXplKE5hTiwgMjcpLFxuICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAtNiwgMCksXG4gICAgICAgIH0sXG4gICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiAhIWRhdGE/LnRpdGxlKSxcbiAgICAgICAgdGhpcy4kKFxuICAgICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAgICdSb3VuZGVkUmVjdGFuZ2xlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXIxOiA1LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZpbGwnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhPy5jb2xvcjtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YT8uY29sb3I7XG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcblxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA1KSxcbiAgICAgICAgICAgIHN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LkZpbGwsXG4gICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgIGZvbnQ6ICdib2xkIDE0cHggc2Fucy1zZXJpZicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICd0aXRsZScpLFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhPy50aXRsZVRleHRDb2xvciB8fCAnd2hpdGUnO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICB0aGlzLiQoXG4gICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAnUmVjdGFuZ2xlJyxcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodDogNixcbiAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgLTYsIDApLFxuICAgICAgICAgIHN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LkZpbGwsXG4gICAgICAgIH0sXG4gICAgICAgIG5ldyBnby5CaW5kaW5nKCdmaWxsJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGRhdGE/LmNvbG9yO1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiBkYXRhPy5jb2xvcjtcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiAhIWRhdGE/LnRpdGxlKVxuICAgICAgKSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdBdXRvJyxcbiAgICAgICAgdGhpcy4kKFxuICAgICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAgICdSb3VuZGVkUmVjdGFuZ2xlJyxcbiAgICAgICAgICB7IGZpbGw6ICcjRTZGMEY3Jywgc3Ryb2tlOiAnIzAwNjNBOScsIHN0cm9rZVdpZHRoOiA0LCBwYXJhbWV0ZXIxOiA1IH0sXG4gICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZpbGwnLCAnYmdDb2xvcicpLFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnYm9yZGVyVGFibGUnKVxuICAgICAgICApLFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAvLyBTZXQgZGVmYXVsdHMgZm9yIGFsbCByb3dzIGFuZCBjb2x1bW5zOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEuNSxcbiAgICAgICAgICAgIGRlZmF1bHRSb3dTZXBhcmF0b3JTdHJva2U6ICcjMDA2MkE5JyxcbiAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5TZXBhcmF0b3JTdHJva2U6ICcjMDA2MkE5JyxcbiAgICAgICAgICAgIGRlZmF1bHRTZXBhcmF0b3JQYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDUsIDIsIDUsIDIpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2RlZmF1bHRSb3dTZXBhcmF0b3JTdHJva2UnLCAnYm9yZGVyVGFibGUnKSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygnZGVmYXVsdENvbHVtblNlcGFyYXRvclN0cm9rZScsICdib3JkZXJUYWJsZScpLFxuICAgICAgICAgIC8vIHRoaXMuJChcbiAgICAgICAgICAvLyAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgLy8gICAgICdUYWJsZVJvdycsXG4gICAgICAgICAgLy8gICAgIHsgcm93OiAwIH0sXG4gICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdyb3cgMSBjb2wgMScsIHsgY29sdW1uOiAwLCBtYXJnaW46IDIgfSksXG4gICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdyb3cgMSBjb2wgMicsIHsgY29sdW1uOiAxLCBtYXJnaW46IDIgfSksXG4gICAgICAgICAgLy8gKSxcbiAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgLy8gICAgIGdvLlBhbmVsLFxuICAgICAgICAgIC8vICAgICAnVGFibGVSb3cnLFxuICAgICAgICAgIC8vICAgICB7IHJvdzogMSB9LFxuICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAncm93IDIgY29sIDEnLCB7IGNvbHVtbjogMCwgbWFyZ2luOiAyIH0pLFxuICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAncm93IDIgY29sIDInLCB7IGNvbHVtbjogMSwgbWFyZ2luOiAyIH0pLFxuICAgICAgICAgIC8vICksXG4gICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2l0ZW1BcnJheScsICdkYXRhVGFibGUnKSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygnaXRlbUFycmF5JywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZGF0YS5kYXRhVGFibGUuZmlsdGVyKCh4KSA9PiB4Py52aXNpYmxlICE9PSBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhVGFibGUgPSBkYXRhLmRhdGFUYWJsZS5maWx0ZXIoXG4gICAgICAgICAgICAgICh4KSA9PiB4Py52aXNpYmxlICE9PSBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChkYXRhPy5pc1Nob3dEYXRhTG9uZ2l0dWRpbmFsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfLm1hcChkYXRhVGFibGUsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ueCwgaXNPbmx5U2hvd1BhcmFtTmFtZTogdHJ1ZSB9O1xuICAgICAgICAgICAgICB9KT8uY29uY2F0KFxuICAgICAgICAgICAgICAgIF8ubWFwKGRhdGFUYWJsZSwgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgICAgICAgIGlzT25seVNob3dWYWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWluU2l6ZVZhbHVlOiBuZXcgZ28uU2l6ZSgxNzAsIDE1KSxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhVGFibGU7XG4gICAgICAgICAgfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gaXRlbVRlbXBsYXRlOiB0aGlzLiQoXG4gICAgICAgICAgICAvLyAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAvLyAgICAgbmV3IGdvLkJpbmRpbmcoJ3JvdycsICdpbmRleFJvdycpLFxuICAgICAgICAgICAgLy8gICAgIC8vIG5ldyBnby5CaW5kaW5nKCdoZWlnaHQnLCAnaGVpZ2h0JyksXG4gICAgICAgICAgICAvLyAgICAgdGhpcy4kKFxuICAgICAgICAgICAgLy8gICAgICAgICBnby5QaWN0dXJlLFxuICAgICAgICAgICAgLy8gICAgICAgICBBUlJPVyxcbiAgICAgICAgICAgIC8vICAgICAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDIwLCA0MCksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAvLyAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzb3VyY2UnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBwYW5lbC5wYXJ0Py5kYXRhPy5pZFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmlzQ3JlYXRlZCA/IHBhbmVsPy4kcCA6IEFSUk9XX0dSQVk7XG4gICAgICAgICAgICAvLyAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gICAgICksXG4gICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgaXRlbVRlbXBsYXRlOiB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAnVGFibGVSb3cnLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBvYmoucGFuZWwucGFydC5kYXRhPy5kYXRhVGFibGVbb2JqLnJvd10/LmlzRWRpdGFibGUgPT09XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWtQYXJhbU9mVGFibGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9iai5wYW5lbC5wYXJ0LmRhdGE/LmRhdGFUYWJsZVtcbiAgICAgICAgICAgICAgICAgICAgICBvYmoucGFuZWwucGFydC5kYXRhPy5pc1Nob3dEYXRhTG9uZ2l0dWRpbmFsID8gMCA6IG9iai5yb3dcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW46IDAsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IDIsXG4gICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8ubmFtZTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbWF4U2l6ZScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5tYXhTaXplTmFtZVBhcmFtO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdkZXNpcmVkU2l6ZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmRlc2lyZWRTaXplTmFtZVBhcmFtO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICFkYXRhPy5pc09ubHlTaG93VmFsdWU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY29sdW1uOiAxLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiAyLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRTZXBhcmF0b3JQYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgICAgc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuRmlsbCxcbiAgICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKDE3MCwgMTUpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gIWRhdGE/LmlzT25seVNob3dQYXJhbU5hbWU7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2NvbHVtbicsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5pc09ubHlTaG93VmFsdWUgPyAwIDogMTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbWluU2l6ZScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5taW5TaXplVmFsdWUgPz8gbmV3IGdvLlNpemUoOTAsIDE0KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbWF4U2l6ZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/Lm1heFNpemVWYWx1ZTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZGVzaXJlZFNpemUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5kZXNpcmVkU2l6ZVZhbHVlO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IDAsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShJbmZpbml0eSwgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtkYXRhPy50YWdOYW1lIHx8ICcnfSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0ke2RhdGE/LnZhbHVlfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPy50YWdOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhZGF0YT8udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5jb2xvcjtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21heFNpemUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhPy5pc1JlYWRPbmx5ICYmICF0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBnby5TaXplKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT8ubWF4U2l6ZVZhbHVlPy53aWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRhdGE/Lm1heFNpemVWYWx1ZT8ud2lkdGggLSAxNVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5hTixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE/Lm1heFNpemVWYWx1ZT8uaGVpZ2h0ID8/IE5hTlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/Lm1heFNpemVWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZvbnQnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmZvbnQ7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IDEsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA1KSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBJQ09OU19CQVNFNjRbJ3VmMDQ0J10sXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnRvb2xUaXBBY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiAhIWRhdGE/LnRvb2xUaXBBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAhZGF0YT8uaXNSZWFkT25seSAmJiAhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnb3BhY2l0eScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmlzRWRpdGFibGUgPT09IGZhbHNlID8gMC42IDogMTtcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QQVJBTV9UQUJMRSxcbiAgICAgIG5vZGVcbiAgICApO1xuICB9XG5cbiAgbWFrZU1hc3NCYWxhbmNlKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICBnby5QYXJ0LFxuICAgICAgJ0F1dG8nLFxuICAgICAge30sXG4gICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAgICAgKSxcbiAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgLy8gU2V0IGRlZmF1bHRzIGZvciBhbGwgcm93cyBhbmQgY29sdW1uczpcbiAgICAgICAge1xuICAgICAgICAgIHBhZGRpbmc6IDQsXG4gICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNDUwLCAzMCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3Rvb2x0aXAnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgdmlzaWJsZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSxcbiAgICAgICAgfSxcbiAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAndmlzaWJsZScpLFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCA1LCAwLCAwKSxcbiAgICAgICAgICAgIHRleHQ6ICdNYXNzIEJhbGFuY2U6JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmb250JywgJ2ZvbnQnKVxuICAgICAgICApLFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICcnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkFMSVpBUklOLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZvbnQnLCAnZm9udCcpLFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3JWYWx1ZScpLFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnZhbHVlO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTUFTU19CQUxBTkNFLFxuICAgICAgbm9kZVxuICAgICk7XG4gIH1cblxuICBtYWtlR3JvdXBST1BsYW50VGVtcGxhdGUoXG4gICAgaWNvbixcbiAgICB0aXRsZSxcbiAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9XG4gICkge1xuICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgZ28uR3JvdXAsXG4gICAgICAnU3BvdCcsXG4gICAgICB7XG4gICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZShOYU4sIDYwMCksXG4gICAgICB9LFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KFxuICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICksXG4gICAgICB0aGlzLiQoXG4gICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAnVGFibGUnLFxuXG4gICAgICAgIHRoaXMuJChcbiAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICBuYW1lOiAnU0hBUEVfS0VZJyxcbiAgICAgICAgICAgIGZpbGw6ICcjRkNGQ0ZEJyxcbiAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigxNSwgMCwgMCwgMCkgfSlcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy4kKFxuICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgUk9fTElORV9ESVJUWSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgOCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHg/LmlzVmlld0dlbmVyYWwgJiYgeD8uaGFzT3V0RmxvdyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApLFxuXG4gICAgICB0aGlzLiQoZ28uUGFuZWwsICdUYWJsZScsIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAyMTgpLFxuICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAvLyBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5WZXJ0aWNhbCxcbiAgICAgICAgcG9ydElkOiAnSW5mbG93JyxcbiAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgIC8vIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAxNTApLFxuICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLFxuICAgICAgICB0b0xpbmthYmxlOiB0cnVlLFxuICAgICAgfSksXG4gICAgICB0aGlzLiQoZ28uUGFuZWwsICdUYWJsZScsIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAxMDI1LCAzMDUpLFxuICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgIHBvcnRJZDogJ091dEZsb3dfQ2xlYW4nLFxuICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdUYWJsZScsXG4gICAgICAgIHtcbiAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgLy8gYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCA0ODAsIDUyNSksXG4gICAgICAgICAgLy8gYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCA0NzUsIDU1MiksXG4gICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgIHBvcnRJZDogJ091dEZsb3dfRGlydHknLFxuICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgIGZyb21TcG90OiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICB0b0xpbmthYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBuZXcgZ28uQmluZGluZygnYWxpZ25tZW50JywgJycsICh4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHg/LmlzVmlld0dlbmVyYWwgJiYgeD8uaGFzT3V0Rmxvd1xuICAgICAgICAgICAgPyBuZXcgZ28uU3BvdCgwLCAwLCA1MDUsIDY2NSlcbiAgICAgICAgICAgIDogbmV3IGdvLlNwb3QoMCwgMCwgNDgwLCA1MjUpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gIH1cblxuICBtYWtlR3JvdXBCb2lsZXJUZW1wbGF0ZShcbiAgICBpY29uLFxuICAgIHRpdGxlLFxuICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODAsIGg6IDgwIH1cbiAgKSB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICBnby5Hcm91cCxcbiAgICAgICdTcG90JyxcbiAgICAgIHtcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZShOYU4sIDYwMCksXG4gICAgICB9LFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ0F1dG8nLFxuICAgICAgICB7XG4gICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICBuYW1lOiAnU0hBUEVfS0VZJyxcbiAgICAgICAgICBmaWxsOiAnI0ZDRkNGRCcsXG4gICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICB9KSxcblxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGxhY2Vob2xkZXIsXG4gICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KFxuICAgICAgICAgICAgZ28uUG9pbnQuc3RyaW5naWZ5XG4gICAgICAgICAgKSxcbiAgICAgICAgICB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCkgfVxuICAgICAgICApXG4gICAgICApLFxuXG4gICAgICB0aGlzLiQoZ28uUGFuZWwsICdTcG90Jywge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAuNSwgMCwgMTEyKSxcbiAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgcG9ydElkOiAnSW5mbG93JyxcbiAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgIGZyb21TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgIHRvU3BvdDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdTcG90JyxcbiAgICAgICAge1xuICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDEsIDEsIC0yMTUsIDApLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICBPVVRGTE9XX0xJTkVfRElSVFksXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICAgICAgaGVpZ2h0OiAyMCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geD8uaXNWaWV3R2VuZXJhbCAmJiB4Py5oYXNPdXRGbG93ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuJChnby5QYW5lbCwge1xuICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Cb3R0b21MZWZ0LFxuICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICBwb3J0SWQ6ICdPdXRGbG93JyxcbiAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLFxuICAgICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgfVxuXG4gIG1ha2VHcm91cENvb2xpbmdUb3dlclRlbXBsYXRlKFxuICAgIGljb24sXG4gICAgdGl0bGUsXG4gICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiA4MCwgaDogODAgfVxuICApIHtcbiAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgIGdvLkdyb3VwLFxuICAgICAgJ1Nwb3QnLFxuICAgICAge1xuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAzMCwgMCwgMCksXG4gICAgICB9LFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KFxuICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICksXG4gICAgICB0aGlzLiQoXG4gICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAnQXV0bycsXG4gICAgICAgIHtcbiAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICBuYW1lOiAnU0hBUEVfS0VZJyxcbiAgICAgICAgICBmaWxsOiAnI0ZDRkNGRCcsXG4gICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICB9KSxcblxuICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSB9KVxuICAgICAgKSxcbiAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1RhYmxlJywge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAsIDAsIDUzMyksXG4gICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgcG9ydElkOiAnSW5mbG93JyxcbiAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgIGZyb21TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgIHRvU3BvdDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdTcG90JyxcbiAgICAgICAge1xuICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAuNSwgMSwgMjMsIDApLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICBPVVRGTE9XX0xJTkVfRElSVFksXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICAgICAgaGVpZ2h0OiAyMCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geD8uaXNWaWV3R2VuZXJhbCAmJiB4Py5oYXNPdXRGbG93ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuJChnby5QYW5lbCwge1xuICAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMTgpLFxuICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICBwb3J0SWQ6ICdPdXRGbG93JyxcbiAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgdG9TcG90OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICB0b0xpbmthYmxlOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gIH1cblxuICBtYWtlR3JvdXBJbW1lcnNlZFVGVGVtcGxhdGUoXG4gICAgaWNvbixcbiAgICB0aXRsZSxcbiAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9XG4gICkge1xuICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgZ28uR3JvdXAsXG4gICAgICAnU3BvdCcsXG4gICAgICB7XG4gICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoTmFOLCA2MDApLFxuICAgICAgfSxcbiAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJycsICh4KSA9PiB7XG4gICAgICAvLyAgIHJldHVybiB4Py5zZWxlY3RhYmxlO1xuICAgICAgLy8gfSksXG4gICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAgICAgKSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdBdXRvJyxcbiAgICAgICAge1xuICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgIG5hbWU6ICdTSEFQRV9LRVknLFxuICAgICAgICAgIGZpbGw6ICcjRkNGQ0ZEJyxcbiAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSB9KVxuICAgICAgKSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdUYWJsZScsXG4gICAgICAgIHtcbiAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAzMjApLFxuICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICBwb3J0SWQ6ICdJbmZsb3cnLFxuICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgIGZyb21TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgdG9TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLFxuICAgICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIG5ldyBnby5CaW5kaW5nKFxuICAgICAgICAgICdhbGlnbm1lbnQnLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICh4KSA9PiB4Py5bQVRPX1NQT1RfTE9DQVRJT05fVFlQRS5TUE9UX0lORkxPV11cbiAgICAgICAgKVxuICAgICAgKSxcblxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAge1xuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAsIDAsIDMyMCksXG4gICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgIHBvcnRJZDogJ091dEZsb3dfQ2xlYW4nLFxuICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgIGZyb21TcG90OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgIC8vIHRvU3BvdDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2FsaWdubWVudCcsICcnLCAoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB4Py5bQVRPX1NQT1RfTE9DQVRJT05fVFlQRS5TUE9UX09VVEZMT1ddO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gIH1cblxuICAvLyBtYWtlR3JvdXBJbW1lcnNlZFVGVGVtcGxhdGUoXG4gIC8vICAgaWNvbixcbiAgLy8gICB0aXRsZSxcbiAgLy8gICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9XG4gIC8vICkge1xuICAvLyAgIGxldCBub2RlID0gdGhpcy4kKFxuICAvLyAgICAgZ28uR3JvdXAsXG4gIC8vICAgICAnU3BvdCcsXG4gIC8vICAgICB7XG4gIC8vICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAvLyAgICAgICBsYXlvdXQ6IHRoaXMuJChnby5MYXlvdXQpLFxuICAvLyAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDMwLCAwLCAwKSxcbiAgLy8gICAgIH0sXG4gIC8vICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gIC8vICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAvLyAgICAgKSxcbiAgLy8gICAgIHRoaXMuJChcbiAgLy8gICAgICAgZ28uUGFuZWwsXG4gIC8vICAgICAgICdBdXRvJyxcbiAgLy8gICAgICAge1xuICAvLyAgICAgICAgIHJvdzogMCxcbiAgLy8gICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAvLyAgICAgICB9LFxuICAvLyAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAvLyAgICAgICAgIG5hbWU6ICdTSEFQRV9LRVknLFxuICAvLyAgICAgICAgIGZpbGw6ICcjRkNGQ0ZEJyxcbiAgLy8gICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gIC8vICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gIC8vICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gIC8vICAgICAgIH0pLFxuXG4gIC8vICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApIH0pXG4gIC8vICAgICApLFxuICAvLyAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVGFibGUnLCB7XG4gIC8vICAgICAgIHdpZHRoOiAwLFxuICAvLyAgICAgICBoZWlnaHQ6IDAsXG4gIC8vICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMzQwKSxcbiAgLy8gICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAvLyAgICAgICBwb3J0SWQ6ICdJbmZsb3cnLFxuICAvLyAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgLy8gICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgLy8gICAgICAgdG9TcG90OiBnby5TcG90LkxlZnQsXG4gIC8vICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgLy8gICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgLy8gICAgIH0pLFxuICAvLyAgICAgdGhpcy4kKFxuICAvLyAgICAgICBnby5QYW5lbCxcbiAgLy8gICAgICAgJ1Nwb3QnLFxuICAvLyAgICAgICB7XG4gIC8vICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuVG9wLFxuICAvLyAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMCksXG4gIC8vICAgICAgIH0sXG4gIC8vICAgICAgIC8vIHRoaXMuJChcbiAgLy8gICAgICAgLy8gICBnby5QaWN0dXJlLFxuICAvLyAgICAgICAvLyAgIE9VVEZMT1dfTElORV9ESVJUWSxcbiAgLy8gICAgICAgLy8gICB7XG4gIC8vICAgICAgIC8vICAgICB3aWR0aDogMTAsXG4gIC8vICAgICAgIC8vICAgICBoZWlnaHQ6IDIwLFxuICAvLyAgICAgICAvLyAgIH0sXG4gIC8vICAgICAgIC8vICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKHgpID0+IHtcbiAgLy8gICAgICAgLy8gICAgIHJldHVybiB4Py5pc1ZpZXdHZW5lcmFsICYmIHg/Lmhhc091dEZsb3cgPyB0cnVlIDogZmFsc2U7XG4gIC8vICAgICAgIC8vICAgfSlcbiAgLy8gICAgICAgLy8gKSxcbiAgLy8gICAgICAgdGhpcy4kKGdvLlBhbmVsLCB7XG4gIC8vICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAtNTApLFxuICAvLyAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgLy8gICAgICAgICBwb3J0SWQ6ICdPdXRGbG93JyxcbiAgLy8gICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgLy8gICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gIC8vICAgICAgICAgdG9TcG90OiBnby5TcG90LlJpZ2h0LFxuICAvLyAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgLy8gICAgICAgICB0b0xpbmthYmxlOiB0cnVlLFxuICAvLyAgICAgICB9KVxuICAvLyAgICAgKVxuICAvLyAgICk7XG5cbiAgLy8gICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gIC8vIH1cblxuICBncm91cFBsYW50Q2VsbFRlbXBsYXRlKFxuICAgIGljb24sXG4gICAgdGl0bGUsXG4gICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiA4MCwgaDogODAgfVxuICApIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgIGdvLkdyb3VwLFxuICAgICAgJ1Nwb3QnLFxuICAgICAge1xuICAgICAgICAvLyBsYXlvdXQ6IHRoaXMuJChnby5MYXlvdXQpLFxuICAgICAgICAvLyBsYXlvdXQ6IHRoaXMuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSksXG4gICAgICAgIC8vIGlzU3ViR3JhcGhFeHBhbmRlZDogZmFsc2UsXG4gICAgICAgIC8vIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIC8vIGxheWVyTmFtZTogJ0ZvcmVncm91bmQnLFxuICAgICAgICAvLyB3YXNTdWJHcmFwaEV4cGFuZGVkOiBmYWxzZSxcbiAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBhdm9pZGFibGU6IGZhbHNlLFxuICAgICAgICAvLyByZXNpemFibGU6IHRydWUsXG5cbiAgICAgICAgLy8gcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gd2lkdGg6IGRhdGE/Lm9iPy5taW5XaXRoID8/IDUwLFxuICAgICAgICAvLyBoZWlnaHQ6IDUwMCxcblxuICAgICAgICAvLyBpc1N1YkdyYXBoRXhwYW5kZWQ6IHRydWUsIC8vIGVuc3VyZSB0aGUgZ3JvdXAgaXMgYWx3YXlzIGV4cGFuZGVkXG4gICAgICAgIC8vIGNvbXB1dGVzQm91bmRzQWZ0ZXJEcmFnOiB0cnVlLFxuICAgICAgICAvLyBoYW5kbGVzRHJhZ0Ryb3BGb3JNZW1iZXJzOiB0cnVlLCAvLyBoYW5kbGUgZHJhZy1hbmQtZHJvcCBldmVudHMgZm9yIGl0cyBtZW1iZXIgbm9kZXNcblxuICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZSg1MDAsIDUwMCksXG4gICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKDUwMCwgNTAwKSxcblxuICAgICAgICAvLyBpc1N1YkdyYXBoRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgIC8vIGxheWVyTmFtZTogRElBR1JBTS5MQVlFUlMuQkFDS0dST1VORCxcblxuICAgICAgICAvLyBtb3VzZURyb3A6IGZ1bmN0aW9uIChlLCBncnApIHtcbiAgICAgICAgLy8gICAgIC8vIGRpc2FsbG93IGRyb3BwaW5nIGFueXRoaW5nIG9udG8gYW4gQWRvcm5tZW50XG4gICAgICAgIC8vICAgICBpZiAoZ3JwIGluc3RhbmNlb2YgZ28uQWRvcm5tZW50KSByZXR1cm47XG4gICAgICAgIC8vIH0sXG4gICAgICAgIC8vIGRyYWdDb21wdXRhdGlvbjogZnVuY3Rpb24gKG5vZGUsIHB0LCBncmlkUHQpIHtcbiAgICAgICAgLy8gICAgIGxldCBncnAgPSBub2RlLmNvbnRhaW5pbmdHcm91cDtcbiAgICAgICAgLy8gICAgIGlmIChncnAgIT09IG51bGwpIHtcbiAgICAgICAgLy8gICAgICAgICBsZXQgcmVjdCA9IGdycC5hY3R1YWxCb3VuZHM7XG4gICAgICAgIC8vICAgICAgICAgcHQueCA9IE1hdGgubWF4KHJlY3QubGVmdCwgTWF0aC5taW4ocHQueCwgcmVjdC5yaWdodCkpO1xuICAgICAgICAvLyAgICAgICAgIHB0LnkgPSBNYXRoLm1heChyZWN0LnRvcCwgTWF0aC5taW4ocHQueSwgcmVjdC5ib3R0b20pKTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIHJldHVybiBwdDtcbiAgICAgICAgLy8gfSxcblxuICAgICAgICAvLyBkcm9wQ29tcHV0YXRpb246IGZ1bmN0aW9uIChub2RlLCBwdCwgZ3JpZFB0KSB7XG4gICAgICAgIC8vICAgICBsZXQgZ3JwID0gbm9kZS5jb250YWluaW5nR3JvdXA7XG4gICAgICAgIC8vICAgICBpZiAoZ3JwICE9PSBudWxsKSB7XG4gICAgICAgIC8vICAgICAgICAgbGV0IHJlY3QgPSBncnAuYWN0dWFsQm91bmRzO1xuICAgICAgICAvLyAgICAgICAgIHB0LnggPSBNYXRoLm1heChyZWN0LmxlZnQsIE1hdGgubWluKHB0LngsIHJlY3QucmlnaHQpKTtcbiAgICAgICAgLy8gICAgICAgICBwdC55ID0gTWF0aC5tYXgocmVjdC50b3AsIE1hdGgubWluKHB0LnksIHJlY3QuYm90dG9tKSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICByZXR1cm4gcHQ7XG4gICAgICAgIC8vIH0sXG5cbiAgICAgICAgLy8gZHJhZ0NvbXB1dGF0aW9uOiBmdW5jdGlvbiAocGFydCwgcHQsIGdyaWRwdCkge1xuICAgICAgICAvLyAgICAgLy8gR2V0IHRoZSBjdXJyZW50IGdyb3VwJ3MgYWN0dWFsIGJvdW5kc1xuICAgICAgICAvLyAgICAgY29uc3QgZ3JwID0gcGFydC5jb250YWluaW5nR3JvdXA7XG4gICAgICAgIC8vICAgICBpZiAoZ3JwKSB7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgYm5kcyA9IGdycC5hY3R1YWxCb3VuZHM7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbG9jID0gcGFydC5sb2NhdGlvbjtcblxuICAgICAgICAvLyAgICAgICAgIC8vIFNlZSBpZiB0aGUgcGFydCdzIG5ldyBsb2NhdGlvbiB3b3VsZCBiZSBvdXQgb2YgYm91bmRzXG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbmV3eCA9IE1hdGgubWF4KGJuZHMueCwgTWF0aC5taW4ocHQueCwgYm5kcy5yaWdodCAtIHBhcnQuYWN0dWFsQm91bmRzLndpZHRoIC8gMikpO1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG5ld3kgPSBNYXRoLm1heChibmRzLnksIE1hdGgubWluKHB0LnksIGJuZHMuYm90dG9tIC0gcGFydC5hY3R1YWxCb3VuZHMuaGVpZ2h0IC8gMikpO1xuXG4gICAgICAgIC8vICAgICAgICAgLy8gTW9kaWZ5IHRoZSByZXN1bHQgcG9pbnQgdG8ga2VlcCB0aGUgUGFydCBpbnNpZGUgdGhlIEdyb3VwXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIG5ldyBnby5Qb2ludChuZXd4LCBuZXd5KTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIHJldHVybiBwdDtcbiAgICAgICAgLy8gfSxcbiAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgIHNlbGYubXlEaWFncmFtPy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gbW91c2VEcmFnRW50ZXI6IChlLCAgb2JqKSA9PiB7XG4gICAgICAgIC8vIH0sXG4gICAgICAgIC8vIG1vdXNlRHJvcDogKGUsICBvYmopID0+IHtcbiAgICAgICAgLy8gfSxcbiAgICAgICAgLy8gbW91c2VFbnRlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAvLyAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAvLyAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgLy8gICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAvLyAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAvLyAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICAgIC8vIGxldCBzaGFwZSA9IChub2RlIGFzIGFueSk/LmZpbmRPYmplY3QoJ1NIQVBFX0tFWScpO1xuICAgICAgICAvLyAgICAgLy8gaWYgKHNoYXBlKSB7XG4gICAgICAgIC8vICAgICAvLyAgICAgc2hhcGUuc3Ryb2tlID0gJ2JsdWUnO1xuICAgICAgICAvLyAgICAgLy8gfVxuICAgICAgICAvLyB9LFxuICAgICAgICAvLyBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgIC8vICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQobnVsbCk7XG4gICAgICAgIC8vICAgICAvLyBsZXQgc2hhcGUgPSAobm9kZSBhcyBhbnkpPy5maW5kT2JqZWN0KCdTSEFQRV9LRVknKTtcbiAgICAgICAgLy8gICAgIC8vIGlmIChzaGFwZSkge1xuICAgICAgICAvLyAgICAgLy8gICAgIHNoYXBlLnN0cm9rZSA9IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5XSElURTtcbiAgICAgICAgLy8gICAgIC8vIH1cbiAgICAgICAgLy8gfSxcbiAgICAgIH0sXG4gICAgICBuZXcgZ28uQmluZGluZygnbGF5b3V0JywgJycsIGZ1bmN0aW9uIChkYXRhLCBub2RlKSB7XG4gICAgICAgIC8vIHJldHVybiBkYXRhPy5sYXlvdXRWYWx1ZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTEFZT1VUX0VESVRPUi5BVVRPXG4gICAgICAgIC8vICAgICA/IHNlbGYuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSlcbiAgICAgICAgLy8gICAgIDogbm9kZT8ubGF5b3V0O1xuICAgICAgICBpZiAoZGF0YT8ubGF5b3V0VmFsdWUgIT09IGRhdGE/LmxheW91dFZhbHVlQ2xvbmUpIHtcbiAgICAgICAgICBkYXRhLmxheW91dFZhbHVlQ2xvbmUgPSBkYXRhPy5sYXlvdXRWYWx1ZTtcbiAgICAgICAgICByZXR1cm4gZGF0YT8ubGF5b3V0VmFsdWUgPT09XG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MQVlPVVRfRURJVE9SLkFVVE9cbiAgICAgICAgICAgID8gc2VsZi4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KVxuICAgICAgICAgICAgOiBzZWxmLiQoZ28uTGF5b3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbm9kZT8ubGF5b3V0O1xuICAgICAgICB9XG4gICAgICAgIC8vIDogc2VsZi4kKGdvLkxheW91dCk7XG4gICAgICAgIC8vIHJldHVybiBkYXRhPy5sYXlvdXQ7XG4gICAgICAgIC8vIHJldHVybiBkYXRhPy5wcmV2aW91c0xheW91dCB8fCBzZWxmLiQoZ28uTGF5ZXJlZERpZ3JhcGhMYXlvdXQsIHsgZGlyZWN0aW9uOiAwIH0pO1xuICAgICAgICAvLyByZXR1cm4gc2VsZi4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KTtcbiAgICAgIH0pLFxuICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2dyaWQnLCAnZ3JpZCcpLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ3dpZHRoJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAvLyAgICAgcmV0dXJuIGRhdGE/Lm9iPy5taW5XaXRoID8/IDUwO1xuICAgICAgLy8gfSksXG4gICAgICBuZXcgZ28uQmluZGluZygnbWluU2l6ZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICByZXR1cm4gbmV3IGdvLlNpemUoZGF0YT8ub2I/Lm1pbldpdGggPz8gNTAsIGRhdGE/Lm9iPy5taW5IZWlnaHQgPz8gNTApOyAvLyBDdXN0b21pemUgbWluU2l6ZSBiYXNlZCBvbiBkYXRhXG4gICAgICB9KS5vZk9iamVjdCgpLFxuICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ3dpZHRoJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAvLyAgICAgcmV0dXJuIGRhdGE/Lm9iPy5taW5XaXRoID8/IDUwOyAvLyBDdXN0b21pemUgbWluU2l6ZSBiYXNlZCBvbiBkYXRhXG4gICAgICAvLyB9KS5vZk9iamVjdCgpLFxuICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgLy8gICAgIHJldHVybiBkYXRhPy5vYj8ubWluSGVpZ2h0ID8/IDUwOyAvLyBDdXN0b21pemUgbWluU2l6ZSBiYXNlZCBvbiBkYXRhXG4gICAgICAvLyB9KS5vZk9iamVjdCgpLFxuICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KFxuICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICksXG4gICAgICAvLyBuZXcgZ28uQmluZGluZygnaXNTdWJHcmFwaEV4cGFuZGVkJywgJ2V4cGFuZGVkJykubWFrZVR3b1dheSgpLFxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ0F1dG8nLFxuICAgICAgICB7XG4gICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgICAvLyBtYXJnaW46bmV3IGdvLk1hcmdpbigwLCA1MCwgMCwgNTApLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgIG5hbWU6ICdTSEFQRV9LRVknLFxuICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCkgfSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gbm9kZS5tZW1iZXJWYWxpZGF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIGdyb3VwKSB7XG4gICAgLy8gICAgIGlmICghZ3JvdXApIHJldHVybiB0cnVlOyAvLyBhbGxvdyB1bmdyb3VwaW5nXG4gICAgLy8gICAgIGNvbnN0IGdyb3VwQm91bmRzID0gZ3JvdXAuYWN0dWFsQm91bmRzO1xuICAgIC8vICAgICBjb25zdCBub2RlQm91bmRzID0gbm9kZS5hY3R1YWxCb3VuZHM7XG4gICAgLy8gICAgIHJldHVybiBncm91cEJvdW5kcy5jb250YWluc1JlY3Qobm9kZUJvdW5kcyk7XG4gICAgLy8gfTtcbiAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gIH1cblxuICBncm91cFBDSW5wdXRPck91dFRlbXBsYXRlKGljb24sIHRpdGxlLCBwYWRkaW5nOiBnby5NYXJnaW4pIHtcbiAgICAvLyBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAvLyAgICAgZ28uR3JvdXAsXG4gICAgLy8gICAgICdTcG90JyxcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAvLyAgICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgIC8vICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIC8vIHtcbiAgICAvLyAgICAgLy8gICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKDUwMCwgNTAwKSxcbiAgICAvLyAgICAgLy8gICAgIG1vdmFibGU6IGZhbHNlLFxuICAgIC8vICAgICAvLyAgICAgYXJpYVJlYWRPbmx5OiB0cnVlLFxuICAgIC8vICAgICAvLyB9LFxuICAgIC8vICAgICB0aGlzLiQoXG4gICAgLy8gICAgICAgICBnby5QYW5lbCxcbiAgICAvLyAgICAgICAgICdBdXRvJyxcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgLy8gICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAvLyAgICAgICAgICAgICAvLyBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgLy8gICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuV0hJVEUsXG4gICAgLy8gICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgLy8gICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgLy8gICAgICAgICB9KSxcbiAgICAvLyAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwge1xuICAgIC8vICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgLy8gICAgICAgICB9KSxcbiAgICAvLyAgICAgKSxcbiAgICAvLyApO1xuICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgZ28uR3JvdXAsXG4gICAgICAnU3BvdCcsXG4gICAgICB7XG4gICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KSxcbiAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICBhdm9pZGFibGU6IGZhbHNlLFxuICAgICAgICAvLyBpc1N1YkdyYXBoRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICAvLyBpc1N1YkdyYXBoRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICAvLyBsYXllck5hbWU6ICdGb3JlZ3JvdW5kJyxcbiAgICAgIH0sXG4gICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAgICAgKSxcbiAgICAgIHRoaXMuJChcbiAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICdBdXRvJyxcbiAgICAgICAge1xuICAgICAgICAgIHBhZGRpbmc6IHBhZGRpbmcgPz8gbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLldISVRFLFxuICAgICAgICAgIC8vIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkFMSVpBUklOLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7XG4gICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgfVxuXG4gIG1ha2VHcm91cFpvbmVUZW1wbGF0ZShcbiAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7XG4gICAgICB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMTQsXG4gICAgICBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICB9XG4gICkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgZ28uR3JvdXAsXG4gICAgICAnVmVydGljYWwnLFxuICAgICAge1xuICAgICAgICBsYXlvdXQ6IHRoaXMuJChnby5HcmlkTGF5b3V0LCB7XG4gICAgICAgICAgd3JhcHBpbmdDb2x1bW46IDEsXG4gICAgICAgICAgc3BhY2luZzogbmV3IGdvLlNpemUoMCwgMCksXG4gICAgICAgIH0pLFxuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAvLyBzZWxmLnNob3dQb2ludChvYmo/LnBhcnQ/LmxvY2F0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdGhpcy4kKFxuICAgICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNoYWRvd1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hhZG93Qmx1cjogNixcbiAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQ6IG5ldyBnby5Qb2ludCgwLCAyKSxcbiAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogJyMwMDAwMDAyOScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICBmaWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCxcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAnQnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgX2RyYWdEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IHNlbGYuYWRkSXRlbU9uR3JvdXBab25lLCAvLyBkZWZpbmVkIGJlbG93LCB0byBzdXBwb3J0IGEgY2xpY2sgb24gdGhlIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAnQnV0dG9uQm9yZGVyLnN0cm9rZVdpZHRoJzogMCxcbiAgICAgICAgICAgICAgICAgICAgJ0J1dHRvbkJvcmRlci5maWxsJzogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xcdWYwNTUnLFxuICAgICAgICAgICAgICAgICAgICBmb250OiAnMjBweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMyYzJjMmMnLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIC8vIG1vcmVcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQWN0aW9uR3JvdXAoW1xuICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgICAgIC8vICAgICAvLyBFZGl0IFRleHRcbiAgICAgICAgICAgICAgICAvLyAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICAgICAgLy8gICAgIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNsaWNrOiBzZWxmLmVkaXRUZXh0R3JvdXBab25lLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgJ0J1dHRvbkJvcmRlci5zdHJva2VXaWR0aCc6IDAsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAnQnV0dG9uQm9yZGVyLmZpbGwnOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB0ZXh0OiAnXFx1ZTFiZicsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBmb250OiAnMjBweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgc3Ryb2tlOiAnIzJjMmMyYycsXG4gICAgICAgICAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgICAgIC8vICAgICAvLyBPcGVuIERldGFpbFxuICAgICAgICAgICAgICAgIC8vICAgICAnQnV0dG9uJyxcbiAgICAgICAgICAgICAgICAvLyAgICAge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBzZWxmLm9uT3BlbkRldGFpbC5lbWl0KHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAnQnV0dG9uQm9yZGVyLnN0cm9rZVdpZHRoJzogMCxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICdCdXR0b25Cb3JkZXIuZmlsbCc6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGV4dDogJ1xcdWU0OWEnLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZm9udDogJzIwcHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAvLyAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICAgICAgICAvLyAhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgIC8vICAgICA/IHRoaXMuJChcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIGFjdGlvbk1vdmU6IHNlbGYuZHJhZ05ld05vZGUsIC8vIGRlZmluZWQgYmVsb3csIHRvIHN1cHBvcnQgZHJhZ2dpbmcgZnJvbSB0aGUgYnV0dG9uXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBfZHJhZ0RhdGE6IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB0eXBlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIG5hbWU6IDAsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgY29sb3I6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5CTFVFLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIGNsaWNrOiBzZWxmLmNsaWNrTmV3Tm9kZSwgLy8gZGVmaW5lZCBiZWxvdywgdG8gc3VwcG9ydCBhIGNsaWNrIG9uIHRoZSBidXR0b25cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICdCdXR0b25Cb3JkZXIuc3Ryb2tlV2lkdGgnOiAwLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgJ0J1dHRvbkJvcmRlci5maWxsJzogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGV4dDogJ1xcdWUxNTcnLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgZm9udDogJzIwcHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIHN0cm9rZTogJyMyYzJjMmMnLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICApXG4gICAgICAgICAgICAgICAgLy8gICAgIDoge30sXG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgICAgICAgLy8gICAgICdCdXR0b24nLFxuICAgICAgICAgICAgICAgIC8vICAgICB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjbGljazogc2VsZi5kZWxldGVOb2RlLFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgJ0J1dHRvbkJvcmRlci5zdHJva2VXaWR0aCc6IDAsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAnQnV0dG9uQm9yZGVyLmZpbGwnOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB0ZXh0OiAnXFx1ZjJlZCcsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBmb250OiAnMjBweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgfSxcblxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ0F1dG8nLFxuICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudywgTmFOKSxcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuJChcbiAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3AsXG4gICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDE3LCAxMCwgMTYsIDEwKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oNSwgMCwgMTAsIDApLFxuICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCAyNSksXG4gICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLk5JR0hUX1JJREVSLFxuICAgICAgICAgICAgICBmb250OiAnYm9sZCAxNnB4IEFyaWFsJyxcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KClcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG5cbiAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSlcbiAgICAgICksXG4gICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQoXG4gICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuWk9ORSxcbiAgICAgIG5vZGVcbiAgICApO1xuICB9XG5cbiAgbWFrZVpvbmVJdGVtVGVtcGxhdGUoXG4gICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0ge1xuICAgICAgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDEyLFxuICAgICAgaDogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDIsXG4gICAgfVxuICApIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBub2RlID0gdGhpcy4kKFxuICAgICAgZ28uTm9kZSxcbiAgICAgICdBdXRvJyxcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgICBtb3VzZUhvdmVyOiAoZSwgb2JqKSA9PiB7XG4gICAgICAvLyAgICAgICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgIC8vICAgICAgICAgaWYgKChvYmogYXMgYW55KS5wYXJ0Py5vYj8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICAvLyAgICAgICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgLy8gICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAvLyAgICAgICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAvLyAgICAgICAgICAgICAgICAgbm9kZTogbm9kZVxuICAgICAgLy8gICAgICAgICAgICAgfSk7XG4gICAgICAvLyAgICAgICAgIH1cbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIG1vdXNlTGVhdmU6IChlLCBvYmopID0+IHtcbiAgICAgIC8vICAgICAgICAgaWYgKChvYmogYXMgYW55KS5wYXJ0Py5vYj8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICAvLyAgICAgICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQobnVsbCk7XG4gICAgICAvLyAgICAgICAgIH1cbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgIC8vICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgLy8gICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvID8gc2VsZi5vbkNsaWNrSW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgIC8vICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgIC8vICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgLy8gICAgICAgICAgICAgbm9kZTogbm9kZVxuICAgICAgLy8gICAgICAgICB9KSA6IG51bGw7XG4gICAgICAvLyAgICAgfSxcbiAgICAgIC8vIH0sXG4gICAgICAvLyBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgIHtcbiAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgdGhpcy4kKFxuICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgJ0F1dG8nLFxuICAgICAgICB7XG4gICAgICAgICAgd2lkdGg6IHNpemUudyxcbiAgICAgICAgICBoZWlnaHQ6IHNpemUuaCxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUmVjdGFuZ2xlJywge1xuICAgICAgICAgIGZpbGw6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSUdIVF9CTFVFLFxuICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJTktfV0FURVIsXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgJ1ZlcnRpY2FsJyxcbiAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMCwgNSwgMCksXG4gICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEycHggQXJpYWwnLFxuICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5OSUdIVF9SSURFUixcbiAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICduYW1lJywgKHgpID0+ICEheClcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAxMCwgMCwgMTApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGZvbnQ6ICcxMnB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLk5JR0hUX1JJREVSLFxuICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzTXVsdGlsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAxMDAsIDE1KSxcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWVJdGVtJykubWFrZVR3b1dheSgpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZUl0ZW0nKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ25hbWVJdGVtJywgKHgpID0+ICEheClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCA1LCAxMCwgMCksXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBmb250OiAnMTJweCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5DRVJVTEVBTixcbiAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgICB0ZXh0OiAnPCAnLFxuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKFxuICAgICAgICAgICAgICAgICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAnZGF0YScsXG4gICAgICAgICAgICAgICAgKHgpID0+IHR5cGVvZiB4Py5xdWFudGl0eSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGZvbnQ6ICcxMnB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkNFUlVMRUFOLFxuICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICdkYXRhJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHg/LnF1YW50aXR5ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQ6IGFueSA9IFV0aWxzU2VydmljZS5jb252ZXJ0UHJlZml4ZXNEYXRhKHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB4Py5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgIHVuaXQ6IHg/LnVuaXQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5zaG9ydGVuZWROdW1iZXIgK1xuICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQudW5pdFByZWZpeGVzICtcbiAgICAgICAgICAgICAgICAgICAgeD8udW5pdCA/PyAnJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZyhcbiAgICAgICAgICAgICAgICAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgJ2RhdGEnLFxuICAgICAgICAgICAgICAgICh4KSA9PiB0eXBlb2YgeD8ucXVhbnRpdHkgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGZvbnQ6ICcxMnB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkNFUlVMRUFOLFxuICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgIHRleHQ6ICcgPicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKFxuICAgICAgICAgICAgICAgICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAnZGF0YScsXG4gICAgICAgICAgICAgICAgKHgpID0+IHR5cGVvZiB4Py5xdWFudGl0eSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChcbiAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5aT05FX0VORVJHWV9JVEVNLFxuICAgICAgbm9kZVxuICAgICk7XG4gIH1cblxuICBtYWtlU3BlY2lhbFRlbXBsYXRlKFxuICAgIGljb24sXG4gICAgdGl0bGUsXG4gICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0ge1xuICAgICAgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsXG4gICAgICBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICB9XG4gICkge1xuICAgIGxldCBub2RlOiBhbnkgPSBudWxsO1xuICAgIHN3aXRjaCAodGl0bGUpIHtcbiAgICAgIGNhc2UgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlNQRUNJQUxfUFJPQ0VTUzpcbiAgICAgICAgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAvLyB7XG4gICAgICAgICAgLy8gICAgIGZyb21TcG90OiBnby5TcG90LlJpZ2h0LCAgLy8gY29taW5nIG91dCBmcm9tIG1pZGRsZS1yaWdodFxuICAgICAgICAgIC8vICAgICB0b1Nwb3Q6IGdvLlNwb3QuTGVmdFxuICAgICAgICAgIC8vIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShcbiAgICAgICAgICAgIGdvLlBvaW50LnN0cmluZ2lmeVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdDaXJjbGUnLCB7XG4gICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgIHN0cm9rZTogJyMyRDNCNzcnLFxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QUk9DRVNTLCB7XG4gICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDYwLCA2MCksXG4gICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG5cbiAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gZm91ciBuYW1lZCBwb3J0cywgb25lIG9uIGVhY2ggc2lkZTpcblxuICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1BFQ0lBTF9TVE9SQUdFOlxuICAgICAgICBub2RlID0gdGhpcy4kKFxuICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2U6ICcjMkQzQjc3JyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1RPUkFHRSwge1xuICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgMTAsIDMpLFxuICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QaWN0dXJlLFxuICAgICAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICBtaW5TaXplOiBuZXcgZ28uU2l6ZSg0MCwgNDApLFxuICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNTAsIDUwKSxcbiAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzb3VyY2UnLCAnaWNvbicpLm1ha2VUd29XYXkoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcblxuICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMC41LCA4LCAwKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyBmb3VyIG5hbWVkIHBvcnRzLCBvbmUgb24gZWFjaCBzaWRlOlxuXG4gICAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIHRydWUpLFxuICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TUEVDSUFMX1NUT1JFOlxuICAgICAgICBub2RlID0gdGhpcy4kKFxuICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2U6ICcjMkQzQjc3JyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnU3RvcmUnLCB7XG4gICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDYwLCA2MCksXG4gICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlNQRUNJQUxfRElTQ0hBUkdFOlxuICAgICAgICBub2RlID0gdGhpcy4kKFxuICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2U6ICcjMkQzQjc3JyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnRGlzY2hhcmdlJywge1xuICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgMTAsIDMpLFxuICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAxMCwgMCksXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg2MCwgNjApLFxuICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TUEVDSUFMX09USEVSOlxuICAgICAgICBub2RlID0gdGhpcy4kKFxuICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoXG4gICAgICAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICBzdHJva2U6ICcjMkQzQjc3JyxcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnT3RoZXInLCB7XG4gICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDYwLCA2MCksXG4gICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0QW5pbWF0aW9uKCkge1xuICAgIGNvbnN0IGRpYWdyYW0gPSB0aGlzLm15RGlhZ3JhbTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgZGlhZ3JhbS5saW5rcy5lYWNoKChsaW5rKSA9PiB7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vIH0pO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmFuaW1hdGlvbkludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBjb25zdCBvbGRza2lwcyA9IGRpYWdyYW0uc2tpcHNVbmRvTWFuYWdlcjtcbiAgICAgICAgZGlhZ3JhbS5za2lwc1VuZG9NYW5hZ2VyID0gdHJ1ZTtcblxuICAgICAgICBkaWFncmFtLmxpbmtzLmVhY2goKGxpbmspID0+IHtcbiAgICAgICAgICBjb25zdCBzaGFwZSA9IGxpbmsuZmluZE9iamVjdCgnUElQRScpO1xuICAgICAgICAgIGlmICghIXNoYXBlKSB7XG4gICAgICAgICAgICAvLyBjb25zdCBvZmYgPSBzaGFwZT8uc3Ryb2tlRGFzaE9mZnNldCAtIDM7XG4gICAgICAgICAgICBjb25zdCBvZmYgPSBzaGFwZT8uc3Ryb2tlRGFzaE9mZnNldCAtIDk7XG4gICAgICAgICAgICAvLyBhbmltYXRlIChtb3ZlKSB0aGUgc3Ryb2tlIGRhc2hcbiAgICAgICAgICAgIHNoYXBlLnN0cm9rZURhc2hPZmZzZXQgPSBvZmYgPD0gMCA/IDYwIDogb2ZmO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWdyYW0uc2tpcHNVbmRvTWFuYWdlciA9IG9sZHNraXBzO1xuICAgICAgfSwgNjAwKTtcbiAgICAgIC8vIDYwXG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuXG4gIHN0b3BBbmltYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hbmltYXRpb25JbnRlcnZhbCk7XG4gICAgfVxuICB9XG5cbiAgdG9EYXRhVVJMKHVybCwgY2FsbGJhY2spIHtcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbGxiYWNrKHJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHhoci5yZXNwb25zZSk7XG4gICAgfTtcbiAgICB4aHIub3BlbignR0VUJywgdXJsKTtcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgIHhoci5zZW5kKCk7XG4gIH1cblxuICBnZXRCYXNlNjREaWFncmFtV2l0aEVtcHR5RGF0YSgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAvLyBUZXN0XG4gICAgLy8gY29uc3QgbmV3V2luZG93ID0gd2luZG93Lm9wZW4oJycsICduZXdXaW5kb3cnKTtcbiAgICAvLyBpZiAoIW5ld1dpbmRvdykge1xuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gfVxuICAgIC8vIGNvbnN0IG5ld0RvY3VtZW50ID0gbmV3V2luZG93Py5kb2N1bWVudDtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5teURpYWdyYW0/Lm1vZGVsPy5ub2RlRGF0YUFycmF5Py5sZW5ndGggJiZcbiAgICAgICF0aGlzLm15RGlhZ3JhbT8ubW9kZWw/LmxpbmtEYXRhQXJyYXk/Lmxlbmd0aFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN2ZyA9IHRoaXMubXlEaWFncmFtLm1ha2VTdmcoe1xuICAgICAgc2NhbGU6IHRoaXMuZGVmYXVsdFNjYWxlWm9vbVRvRml0LFxuICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoMTIwMCwgTmFOKSxcbiAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICBwYWRkaW5nOiAyMCxcbiAgICAgIGVsZW1lbnRGaW5pc2hlZDogZnVuY3Rpb24gKGdyYXBoT2JqZWN0LCBzdmdFbGVtZW50KSB7XG4gICAgICAgIHN2Z0VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGlwLXBhdGgnKTtcbiAgICAgICAgLy8gUmVwbGFjZSBJbWFnZSBVUkwgdG8gYmFzZTY0IC0+IEZvciBzaG93aW5nIFBpY3R1cmUgZWxlbWVudFxuICAgICAgICBpZiAoZ3JhcGhPYmplY3QgaW5zdGFuY2VvZiBnby5QaWN0dXJlKSB7XG4gICAgICAgICAgc2VsZi50b0RhdGFVUkwoc3ZnRWxlbWVudC5ocmVmLmJhc2VWYWwsIGZ1bmN0aW9uIChkYXRhVXJsKSB7XG4gICAgICAgICAgICBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsIGRhdGFVcmwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2UgVGV4dCBOb2RlIFNoYXBlIEJvcmRlclxuICAgICAgICBpZiAoZ3JhcGhPYmplY3Q/Lm5hbWUgPT09ICd0ZXh0Tm9kZVNoYXBlJykge1xuICAgICAgICAgIHN2Z0VsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHJva2UnLCAncmdiYSg2NCwgMTgxLCAyMDYsIDAuNiknKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbXB0eSBWYWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZ3JhcGhPYmplY3Q/Lm5hbWUgPT09ICd0ZXh0QmxvY2tWYWx1ZScgfHxcbiAgICAgICAgICBncmFwaE9iamVjdD8ubmFtZSA9PT0gJ3RleHRCbG9ja1VuaXRQcmVmaXhlcydcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3ZnRWxlbWVudC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdmdFbGVtZW50LmNsaXBQYXRoKSB7XG4gICAgICAgICAgc3ZnRWxlbWVudC5jbGlwUGF0aCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsYmFjazogKHN2ZykgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzdmdTdHIgPSBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHN2Zyk7XG4gICAgICAgICAgLy8gRm9yIFRlc3RcbiAgICAgICAgICAvLyBuZXdEb2N1bWVudD8uYm9keT8uYXBwZW5kQ2hpbGQoc3ZnKTtcblxuICAgICAgICAgIGNvbnN0IGJhc2U2NFN2ZyA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EoXG4gICAgICAgICAgICB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3ZnU3RyKSlcbiAgICAgICAgICApfWA7XG4gICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgaW1nLnNyYyA9IGJhc2U2NFN2ZztcbiAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAvLyBnZXQgY2FudmFzIGNvbnRleHQgZm9yIGRyYXdpbmcgb24gY2FudmFzXG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBzdmdXaWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHN2Z0hlaWdodCA9IGltZy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHN2Z1dpZHRoO1xuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHN2Z0hlaWdodDtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcbiAgICAgICAgICAgICAgY29uc3QgYmFzZTY0UE5HID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpO1xuICAgICAgICAgICAgICBzZWxmLmVtaXRJbWFnZVRvcG9sb2d5KFxuICAgICAgICAgICAgICAgIGJhc2U2NFBORy5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGVtaXRJbWFnZVRvcG9sb2d5KGJhc2U2NCkge1xuICAgIHRoaXMuY2FsbGJhY2tJbWFnZVRvcG9sb2d5LmVtaXQoYmFzZTY0KTtcbiAgfVxuXG4gIG9wZW5BY3Rpb25NZW51KCkge1xuICAgIC8vIFdoZW4gdGhpcyBub2RlIGlzIGNsaWNrZWQsIGFkanVzdCB0aGUgbWVudSBwb3NpdGlvblxuICAgIGNvbnN0IG1vdXNlUHQgPSB0aGlzLm15RGlhZ3JhbS5sYXN0SW5wdXQudmlld1BvaW50O1xuXG4gICAgLy8gLy8gV2hlbiB0aGlzIG5vZGUgaXMgY2xpY2tlZCwgZGlzcGxheSB0aGUgZHJvcGRvd24gbWVudVxuICAgIGNvbnN0IG1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmFjdGlvbk1lbnVJZCk7XG4gICAgaWYgKG1lbnUpIHtcbiAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgbWVudS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICBtZW51LnN0eWxlLmxlZnQgPSBtb3VzZVB0LnggKyAncHgnO1xuICAgICAgbWVudS5zdHlsZS50b3AgPSBtb3VzZVB0LnkgKyAncHgnO1xuXG4gICAgICB0aGlzLm1lbnVUcmlnZ2VyLm9wZW5NZW51KCk7XG4gICAgfVxuICB9XG5cbiAgdW5zdWJzY3JpYmVBbGwoKSB7XG4gICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbkxpc3QpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbkxpc3QudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uTGlzdCA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIGFkZFN1YnNjcmliZXMoLi4uc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10pIHtcbiAgICBzdWJzY3JpcHRpb25zLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25MaXN0LmFkZChlbCk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBdG9EZWZhdWx0R29qc0VkaXRvciB7XG4gIGV4cG9ydCBlbnVtIEVOVU1fQUNUSU9OUyB7XG4gICAgREVUQUlMUyA9ICdPcGVuIGRldGFpbHMgJiB3aXphcmQnLFxuICAgIE9OTFlfREVUQUlMUyA9ICdPcGVuIGRldGFpbHMnLFxuICAgIFJFTkFNRSA9ICdSZW5hbWUgdGhpcyBib3gnLFxuICAgIE9VVEZMT1cgPSAnQ3JlYXRlIGFuIG91dGZsb3cnLFxuICAgIERFTEVURSA9ICdEZWxldGUnLFxuICAgIElOU0lHSFQgPSAnSW5TaWdodCB0YWcgbWFwcGluZycsXG4gICAgREFUQV9NQVBQSU5HID0gJ0RhdGEgTWFwcGluZycsXG4gICAgTU9SRSA9ICdNb3JlJyxcbiAgICBGTE9XX0RFVEFJTFMgPSAnRmxvdyBkZXRhaWxzJyxcbiAgICBGTE9XX0RFVEFJTFNfQU5EX1dJWkFSRCA9ICdGbG93IGRldGFpbHMgJiB3aXphcmQnLCAvLyBvbmx5IG5vdyBmb3IgQ29vbGluZyBUb3dlclxuICAgIEFTU0VUX1BBUkFNRVRFUlMgPSAnQXNzZXQgcGFyYW1ldGVycycsXG4gICAgQ0hBTkdFX0lDT04gPSAnQ2hhbmdlIGljb24nLFxuICB9XG5cbiAgZXhwb3J0IGNvbnN0IEFDVElPTlM6IGFueSA9IHtcbiAgICBbRU5VTV9BQ1RJT05TLkRFVEFJTFNdOiB7XG4gICAgICBuYW1lOiBFTlVNX0FDVElPTlMuREVUQUlMUyxcbiAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtbWVtby1jaXJjbGUtaW5mbycsXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICB9LFxuICAgIFtFTlVNX0FDVElPTlMuRkxPV19ERVRBSUxTXToge1xuICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMUyxcbiAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtYXJyb3ctcHJvZ3Jlc3MnLFxuICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgfSxcbiAgICBbRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMU19BTkRfV0laQVJEXToge1xuICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMU19BTkRfV0laQVJELFxuICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1hcnJvdy1wcm9ncmVzcycsXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICB9LFxuICAgIFtFTlVNX0FDVElPTlMuQVNTRVRfUEFSQU1FVEVSU106IHtcbiAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5BU1NFVF9QQVJBTUVURVJTLFxuICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1ib3gtYXJjaGl2ZScsXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICB9LFxuICAgIFtFTlVNX0FDVElPTlMuT05MWV9ERVRBSUxTXToge1xuICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLk9OTFlfREVUQUlMUyxcbiAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtbWVtby1jaXJjbGUtaW5mbycsXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICB9LFxuICAgIFtFTlVNX0FDVElPTlMuUkVOQU1FXToge1xuICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtaW5wdXQtdGV4dCcsXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICB9LFxuICAgIFtFTlVNX0FDVElPTlMuT1VURkxPV106IHtcbiAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1kaWFncmFtLW5lc3RlZCcsXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICB9LFxuICAgIFtFTlVNX0FDVElPTlMuREVMRVRFXToge1xuICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkRFTEVURSxcbiAgICAgIGljb25DbGFzc05hbWU6ICdmYWwgZmEtdHJhc2gtY2FuJyxcbiAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgIH0sXG4gICAgW0VOVU1fQUNUSU9OUy5JTlNJR0hUXToge1xuICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLklOU0lHSFQsXG4gICAgICBpY29uQ2xhc3NOYW1lOiAnZmFyIGZhLXRhZycsXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICB9LFxuICAgIFtFTlVNX0FDVElPTlMuREFUQV9NQVBQSU5HXToge1xuICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkRBVEFfTUFQUElORyxcbiAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtdGFnJyxcbiAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgIH0sXG4gICAgW0VOVU1fQUNUSU9OUy5NT1JFXToge1xuICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLk1PUkUsXG4gICAgICBpY29uQ2xhc3NOYW1lOiAnZmFsIGZhLW1lbW8tY2lyY2xlLWluZm8nLFxuICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgfSxcbiAgICBbRU5VTV9BQ1RJT05TLkNIQU5HRV9JQ09OXToge1xuICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkNIQU5HRV9JQ09OLFxuICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1pbWFnZScsXG4gICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICB9LFxuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBESVNUQU5DRV8yX09VVFBVVCA9IDYwO1xufVxuIl19
3554
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1nb2pzLWVkaXRvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0by13YXRlci1saWIvc3JjL2xpYi9tb2RlbHMvZGVmYXVsdC1nb2pzLWVkaXRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixPQUFPLEVBQ1AsWUFBWSxFQUNaLFFBQVEsR0FDWCxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU83RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFQN0UsTUFBTSxVQUFVLEdBQUcsa0NBQWtDLENBQUM7QUFDdEQsTUFBTSxLQUFLLEdBQUcsZ0NBQWdDLENBQUM7QUFDL0MsTUFBTSxVQUFVLEdBQUcscUNBQXFDLENBQUM7QUFD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SUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJO1lBQ3ZCLGFBQWEsRUFBRSx5QkFBeUI7WUFDeEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7U0FDcEI7UUFDRCxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN4QixJQUFJLEVBQUUsWUFBWSxDQUFDLFdBQVc7WUFDOUIsYUFBYSxFQUFFLGNBQWM7WUFDN0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7U0FDcEI7S0FDSixDQUFDO0lBRVcsc0NBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLENBQUMsRUFoRmdCLG9CQUFvQixLQUFwQixvQkFBb0IsUUFnRnBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdG9Hb2pzRWRpdG9yTW9kZWwgfSBmcm9tICcuL2dvanMtZWRpdG9yLm1vZGVsJztcbmltcG9ydCAqIGFzIGdvIGZyb20gJ2dvanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEdPX0xJQ0VOU0VfS0VZIH0gZnJvbSAnLi4vY29uc3RhbnRzL2tleS5jb25zdCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91dGlscy91dGlscy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04sXG4gICAgQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRSxcbiAgICBOT19EQVRBLFxuICAgIFRFWFRfVU5LTk9XTixcbiAgICBWQUxVRV9OQSxcbn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlLmNvbnN0JztcbmltcG9ydCB7IEFUT19FUGxhbnRUeXBlIH0gZnJvbSAnLi4vY29uc3RhbnRzL3BsYW50LmNvbnN0YW50JztcblxuY29uc3QgSUNPTl9BTEVSVCA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9TdGF0aW9uLnN2Zyc7XG5jb25zdCBBUlJPVyA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9hcnJvdy5zdmcnO1xuY29uc3QgQVJST1dfR1JBWSA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9hcnJvdy1ncmF5LnN2Zyc7XG5jb25zdCBST19MSU5FX0RJUlRZID0gJy9hc3NldHMvaW1hZ2VzL2ljb25zL3JvX2xpbmVfZGlydHkuc3ZnJztcbmNvbnN0IE9VVEZMT1dfTElORV9ESVJUWSA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9vdXRmbG93X2xpbmVfZGlydHkucG5nJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUNPTlNfQkFTRTY0IH0gZnJvbSAnLi4vY29uc3RhbnRzL2ljb24tYmFzZTY0LmNvbnN0JztcbmltcG9ydCB7IEFUT19TUE9UX0xPQ0FUSU9OX1RZUEUgfSBmcm9tICcuLi9jb25zdGFudHMvY29tcG9uZW50cy1ncm91cC1jb25zdCc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIEF0b0RlZmF1bHRHb2pzRWRpdG9yIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCdtZW51VHJpZ2dlcicpIG1lbnVUcmlnZ2VyOiBhbnk7XG4gICAgQElucHV0KCkgbGlua1ZhbGlkYXRpb246IChcbiAgICAgICAgZnJvbU5vZGU6IGdvLk5vZGUsXG4gICAgICAgIGZyb21Qb3J0OiBnby5HcmFwaE9iamVjdCxcbiAgICAgICAgdG9Ob2RlOiBnby5Ob2RlLFxuICAgICAgICB0b1BvcnQ6IGdvLkdyYXBoT2JqZWN0LFxuICAgICAgICBsaW5rOiBnby5MaW5rLFxuICAgICkgPT4gYm9vbGVhbjtcblxuICAgIGFjdGlvbnM6IGFueVtdID0gW107XG4gICAgYWN0aW9uTWVudUlkOiBzdHJpbmcgPSAnYWN0aW9uTWVudUlkJztcblxuICAgIG15RGlhZ3JhbURpdjogYW55ID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJy0nICsgbW9tZW50KCkudmFsdWVPZigpO1xuICAgIG15RGlhZ3JhbTogYW55O1xuICAgICQgPSBnby5HcmFwaE9iamVjdC5tYWtlO1xuICAgIGFuaW1hdGlvbkludGVydmFsOiBhbnk7XG4gICAgZGVmYXVsdFNjYWxlWm9vbVRvRml0PzogbnVtYmVyO1xuICAgIG9wdGlvbkxpc3Q6IGFueVtdO1xuICAgIHByaXZhdGUgX2luaXRpYWxPcHRpb25zOiBhbnkgPSB7XG4gICAgICAgICd0b29sTWFuYWdlci5ob3ZlckRlbGF5JzogMjAwLFxuICAgICAgICAvLyAnZHJhZ2dpbmdUb29sLmlzRW5hYmxlZCc6IGZhbHNlLFxuICAgICAgICAvLyBpbml0aWFsQXV0b1NjYWxlOiBnby5EaWFncmFtLlVuaWZvcm1Ub0ZpbGwsXG4gICAgICAgIC8vIGF1dG9TY3JvbGxSZWdpb246IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgICAgICBsYXlvdXQ6IHRoaXMuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSksXG4gICAgICAgIGluaXRpYWxDb250ZW50QWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgaW5pdGlhbEF1dG9TY2FsZTogZ28uRGlhZ3JhbS5Vbmlmb3JtLFxuICAgICAgICAvLyBjb250ZW50QWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgLy8gdGhpcy4kKGdvLkZvcmNlRGlyZWN0ZWRMYXlvdXQpLFxuICAgICAgICAndW5kb01hbmFnZXIuaXNFbmFibGVkJzogdHJ1ZSwgLy8gZW5hYmxlIHVuZG8gJiByZWRvXG4gICAgICAgIC8vIFwiYW5pbWF0aW9uTWFuYWdlci5pc0luaXRpYWxcIjogZmFsc2UsXG4gICAgICAgIC8vIFwiYW5pbWF0aW9uTWFuYWdlci5pc0VuYWJsZWRcIjogZmFsc2UsXG4gICAgICAgIC8vIFwiZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkXCI6IHRydWVcbiAgICAgICAgZHJhZ1NlbGVjdGluZ1Rvb2w6IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkRyYWdTZWxlY3RpbmdUb29sLFxuICAgICAgICAgICAgeyBpc1BhcnRpYWxJbmNsdXNpb246IHRydWUsIGRlbGF5OiA1MCB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJveDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYXJ0LCAvLyByZXBsYWNlIHRoZSBtYWdlbnRhIGJveCB3aXRoIGEgcmVkIG9uZVxuICAgICAgICAgICAgICAgICAgICB7IGxheWVyTmFtZTogJ1Rvb2wnLCBzZWxlY3RhYmxlOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTSEFQRScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAncmdiYSgyNTUsMCwwLDApJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyNFOTVGNDcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICAnbGlua2luZ1Rvb2wubGlua1ZhbGlkYXRpb24nOiB0aGlzLmNoZWNrTGlua0NvbmRpdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAnZHJhZ2dpbmdUb29sLmRvTW91c2VNb3ZlJzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gZG8gdGhlIHN0YW5kYXJkIGJlaGF2aW9yIGJ5IGNhbGxpbmcgdGhlIHN1cGVyIG1ldGhvZFxuICAgICAgICAgICAgZ28uRHJhZ2dpbmdUb29sLnByb3RvdHlwZS5kb01vdXNlTW92ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgLy8gaWYgZHJhZ2dpbmctb3V0IGZyb20gdGhlIGRpYWdyYW0gaXMgbm90IGFsbG93ZWQsIGFuZFxuICAgICAgICAgICAgLy8gaWYgbW91c2UgaXMgb3V0c2lkZSBvZiB2aWV3cG9ydFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF0aGlzLmRpYWdyYW0uYWxsb3dEcmFnT3V0ICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuZGlhZ3JhbS52aWV3cG9ydEJvdW5kcy5jb250YWluc1BvaW50KHRoaXMuZGlhZ3JhbS5sYXN0SW5wdXQuZG9jdW1lbnRQb2ludClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhZ3JhbS5lbnN1cmVCb3VuZHMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2cCA9IHRoaXMuZGlhZ3JhbS5sYXN0SW5wdXQudmlld1BvaW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRwID0gdGhpcy5kaWFncmFtLnBvc2l0aW9uLmNvcHkoKTtcbiAgICAgICAgICAgICAgICBpZiAodnAueCA8IDApIGRwLnggLT0gMTA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodnAueCA+IDApIGRwLnggKz0gMTA7XG4gICAgICAgICAgICAgICAgaWYgKHZwLnkgPCAwKSBkcC55IC09IDEwO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZwLnkgPiAwKSBkcC55ICs9IDEwO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhZ3JhbS5wb3NpdGlvbiA9IGRwOyAvLyBzY3JvbGwgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbW91c2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gTGF5b3V0Q29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLm15RGlhZ3JhbS56b29tVG9GaXQoKTtcbiAgICAgICAgLy8gICAgIHRoaXMuZGVmYXVsdFNjYWxlWm9vbVRvRml0ID0gdGhpcy5teURpYWdyYW0uc2NhbGU7XG4gICAgICAgIC8vICAgICBpZiAoIXRoaXMuaW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSkge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHNpemVNYXJnaW4gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMTU7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5teURpYWdyYW0ucGFkZGluZyA9IG5ldyBnby5NYXJnaW4oc2l6ZU1hcmdpbik7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgfTtcblxuICAgIGNoZWNrTGlua0NvbmRpdGlvbihcbiAgICAgICAgZnJvbU5vZGU6IGdvLk5vZGUsXG4gICAgICAgIGZyb21Qb3J0OiBnby5HcmFwaE9iamVjdCxcbiAgICAgICAgdG9Ob2RlOiBnby5Ob2RlLFxuICAgICAgICB0b1BvcnQ6IGdvLkdyYXBoT2JqZWN0LFxuICAgICAgICBsaW5rOiBnby5MaW5rLFxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5saW5rVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlua1ZhbGlkYXRpb24oZnJvbU5vZGUsIGZyb21Qb3J0LCB0b05vZGUsIHRvUG9ydCwgbGluayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIE3hurdjIMSR4buLbmggY2hvIHRyxrDhu51uZyBo4bujcCBraMO0bmcgY8OzIGjDoG0gbGlua1ZhbGlkYXRpb24gxJHGsOG7o2MgdHJ1eeG7gW4gdsOgb1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBpbml0aWFsT3B0aW9ucyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbE9wdGlvbnMgPSBfLm1lcmdlKHRoaXMuX2luaXRpYWxPcHRpb25zLCB2KTtcbiAgICAgICAgLy8gXy5leHRlbmQodiwgdGhpcy5faW5pdGlhbE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldCBpbml0aWFsT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRpYWxPcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VkaXRvcjogQXRvR29qc0VkaXRvck1vZGVsO1xuICAgIEBJbnB1dCgpIHNldCBlZGl0b3IodjogQXRvR29qc0VkaXRvck1vZGVsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRvciA9IHY7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXREaWFncmFtKCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGVkaXRvcigpOiBBdG9Hb2pzRWRpdG9yTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGlzU2hvd05vZGVJbmZvOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcGxhbnRTYXR1czogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgZ28uRGlhZ3JhbS5saWNlbnNlS2V5ID0gR09fTElDRU5TRV9LRVk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIG9uTW9kZWxDaGFuZ2VMaXN0ZW5lckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNsaWNrSW5mb0J1dHRvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25PcGVuV2l6YXJkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbk9wZW5EZXRhaWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uT3BlbkFzc2V0UGFyYW1ldGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbk9wZW5JbnNpZ2h0TWFwcGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Ib3ZlckluZm9CdXR0b246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uSG92ZXJBbGVydDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Eb3VibGVDbGlja05vZGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uT3BlbkNoYW5nZUljb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgLy8gQ2xpY2sgY29tcG9uZW50XG4gICAgQE91dHB1dCgpIG9uQ2xpY2tDb21wb2VudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgY2FsbGJhY2tJbWFnZVRvcG9sb2d5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLy8gQ2xpY2sgcGFyYW0gb24gUGFyYW1UYWJsZVxuICAgIEBPdXRwdXQoKSBvbkNsaWtQYXJhbU9mVGFibGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvLyBEZWxldGUgTm9kZVxuICAgIEBPdXRwdXQoKSBvbkRlbGV0ZU5vZGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uVW5kbzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAvLyBSZW5hbWVcbiAgICBAT3V0cHV0KCkgb25SZW5hbWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBpc0FkZGVkTW9kZWxDaGFuZ2VkTGlzdGVuZXJzOiBib29sZWFuO1xuICAgIGNvbW1pdHRlZFRyYW5zYWN0aW9uU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICAgIC8vIEFkZFN1YiBhbmQgVW5TdWJcbiAgICBfc3Vic2NyaXB0aW9uTGlzdDogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVBbGwoKTtcbiAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW9uKCk7XG4gICAgICAgIC8vIHRoaXMubXlEaWFncmFtPy5jbGVhcigpO1xuICAgICAgICBpZiAoISF0aGlzLm15RGlhZ3JhbT8uZGl2KSB7XG4gICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5kaXYgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm15RGlhZ3JhbSkge1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5teURpYWdyYW0gIT0gbnVsbCAmJiB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5teURpYWdyYW0gIT0gbnVsbCAmJiB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5teURpYWdyYW0gIT0gbnVsbCAmJiB0aGlzLm15RGlhZ3JhbS5saW5rVGVtcGxhdGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubXlEaWFncmFtLmxpbmtUZW1wbGF0ZU1hcC50b0FycmF5KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5saW5rVGVtcGxhdGVNYXAucmVtb3ZlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5teURpYWdyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIGFkZE9yUmVtb3ZlQ29tcG9lbnRUZW1wbGF0ZSgpIHtcbiAgICAgICAgLy8gQWRkIE5vZGUgYW5kIE5vZGUgR3JvdXBcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMuZWRpdG9yLmRhdGE/Lm5vZGVEYXRhQXJyYXksIChub2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZFRlbXBsYXRlKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmVtb3ZlIE5vZGUgYW5kIE5vZGUgR3JvdXBcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcD8uSGIsICh0ZW1wKSA9PiB7XG4gICAgICAgICAgICBpZiAodGVtcD8ua2V5ICYmICF0aGlzLmVkaXRvci5kYXRhPy5ub2RlRGF0YUFycmF5Py5zb21lKChub2RlKSA9PiBub2RlPy50eXBlID09PSB0ZW1wPy5rZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnJlbW92ZSh0ZW1wPy5rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXA/LkhiLCAodGVtcCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRlbXA/LmtleSAmJiAhdGhpcy5lZGl0b3IuZGF0YT8ubm9kZURhdGFBcnJheT8uc29tZSgobm9kZSkgPT4gbm9kZT8udHlwZSA9PT0gdGVtcD8ua2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAucmVtb3ZlKHRlbXA/LmtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZFRlbXBsYXRlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hZGROb2RlVGVtcGxhdGUobm9kZSk7XG4gICAgICAgIHRoaXMuYWRkR3JvdXBUZW1wbGF0ZShub2RlKTtcbiAgICB9XG5cbiAgICBhZGRHcm91cFRlbXBsYXRlKG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXA/LkhiPy5bbm9kZT8udHlwZV0gfHwgIW5vZGU/LmlzR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBHcm91cFxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlJPX1dBVEVSX1RSRUFUTUVOVCkge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBST1BsYW50VGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5CT0lMRVIpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwQm9pbGVyVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT09MSU5HX1RPV0VSKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VHcm91cENvb2xpbmdUb3dlclRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuSU1NRVJTRURfVUZfV0FURVJfVFJFQVRNRU5UUykge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBJbW1lcnNlZFVGVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QUkVTU1VSSVpFRF9VRl9XQVRFUl9UUkVBVE1FTlRTKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VHcm91cENvb2xpbmdUb3dlclRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuWk9ORSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBab25lVGVtcGxhdGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUExBTlRfQ0VMTCAmJiBub2RlPy5pc0dyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwUGxhbnRDZWxsVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUExBTlRfQ0VMTF9JTlBVVF9HUk9VUCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cFBDSW5wdXRPck91dFRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICAgICAgICAgIG5ldyBnby5NYXJnaW4oMCwgNTAsIDAsIDApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBMQU5UX0NFTExfT1VUUFVUX0dST1VQKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwUENJbnB1dE9yT3V0VGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICAgICAgbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA1MCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR1JPVVBfQkFTSUNfQ09NUE9ORU5UKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VHcm91cEJhc2ljQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZE5vZGVUZW1wbGF0ZShub2RlKSB7XG4gICAgICAgIGlmICh0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXA/LkhiW25vZGU/LnR5cGVdIHx8IG5vZGU/LmlzR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3QgR3JvdXBcbiAgICAgICAgLy8gQ29tcG9uZW50IFdhdGVyIE5vcm1hbFxuICAgICAgICBpZiAoQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfV0FURVJfTk9STUFMPy5pbmNsdWRlcyhub2RlPy50eXBlKSAmJiAhbm9kZT8uaXNHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5tYWtlRW50aXR5VGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24gPz8gJycsXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUgPz8gJycsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvbXBvbmVudCBXYXRlciBXaXRoZHJhdyBPciBEaXNjaGFyZ2VcbiAgICAgICAgaWYgKEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX1dBVEVSX1dJVEhEUkFXX09SX0RJU0NIQVJHRT8uaW5jbHVkZXMobm9kZT8udHlwZSkgJiYgIW5vZGU/LmlzR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVdpdGhkcmF3T3JEaXNjaGFyZ2UoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24gPz8gJycsXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUgPz8gJycsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tcG9uZW50IEVuZXJneSBOb3JtYWxcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX0VMRUNUUklDSVRZPy5pbmNsdWRlcyhub2RlPy50eXBlKSB8fFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX05BVFVSQUxfR0FTPy5pbmNsdWRlcyhub2RlPy50eXBlKSB8fFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX0ZVRUw/LmluY2x1ZGVzKG5vZGU/LnR5cGUpIHx8XG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfU1RFQU0/LmluY2x1ZGVzKG5vZGU/LnR5cGUpKSAmJlxuICAgICAgICAgICAgIW5vZGU/LmlzR3JvdXBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VFbnRpdHlUZW1wbGF0ZUVuZXJneShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbiA/PyAnJyxcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSA/PyAnJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklNQUdFX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VJbWFnZVRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QQVJBTV9UQUJMRSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlUGFyYW1UYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTUFTU19CQUxBTkNFKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VNYXNzQmFsYW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRleHQgTm9kZVxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlVGV4dFRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsdWUgTm9kZVxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBTFVFX05PREUpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZVZhbHVlTm9kZVRlbXBsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBOb2RlXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRU1QVFkpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUVtcHR5Tm9kZVRlbXBsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBMYWJlbFxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBTFVFX0xBQkVMKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VWYWx1ZUxhYmVsVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBMYWJlbFxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTEFCRUwpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZVRleHRMYWJlbFRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gWm9uZSBpdGVtXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuWk9ORV9FTkVSR1lfSVRFTSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlWm9uZUl0ZW1UZW1wbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRhdGEgYm94XG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuREFUQV9CT1gpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZURhdGFCb3hUZW1wbGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3BlY2lhbCB0ZW1wbGF0ZVxuICAgICAgICBpZiAoQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfU1BFQ0lBTD8uaW5jbHVkZXMobm9kZT8udHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZVNwZWNpYWxUZW1wbGF0ZShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQbGFudCBDZWxsXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUExBTlRfQ0VMTCAmJiAhbm9kZT8uaXNHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5wbGFudENlbGxUZW1wbGF0ZShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0RGlhZ3JhbSgpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5teURpYWdyYW0/LmRpdikge1xuICAgICAgICAgICAgLy8gdGhpcy5teURpYWdyYW0uZGl2ID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5ncmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW1bJ2dyaWQnXSA9IHRoaXMuaW5pdGlhbE9wdGlvbnM/LmdyaWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtWydncmlkJ10gPSB0aGlzLiQoZ28uUGFuZWwsICdHcmlkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uTGF5b3V0Q29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uYWRkRGlhZ3JhbUxpc3RlbmVyKCdMYXlvdXRDb21wbGV0ZWQnLCB0aGlzLmluaXRpYWxPcHRpb25zPy5MYXlvdXRDb21wbGV0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LkxpbmtSZXNoYXBlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmFkZERpYWdyYW1MaXN0ZW5lcignTGlua1Jlc2hhcGVkJywgdGhpcy5pbml0aWFsT3B0aW9ucz8uTGlua1Jlc2hhcGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5TZWxlY3Rpb25Nb3ZlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmFkZERpYWdyYW1MaXN0ZW5lcignU2VsZWN0aW9uTW92ZWQnLCB0aGlzLmluaXRpYWxPcHRpb25zPy5TZWxlY3Rpb25Nb3ZlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uQ2hhbmdlZFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmFkZERpYWdyYW1MaXN0ZW5lcignQ2hhbmdlZFNlbGVjdGlvbicsIHRoaXMuaW5pdGlhbE9wdGlvbnM/LkNoYW5nZWRTZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uZHJhZ1NlbGVjdGluZ1Rvb2wgPSB0aGlzLmluaXRpYWxPcHRpb25zPy5kcmFnU2VsZWN0aW5nVG9vbDtcbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLnRvb2xNYW5hZ2VyLmRyYWdnaW5nVG9vbC5pc0dyaWRTbmFwRW5hYmxlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuaXNHcmlkU25hcEVuYWJsZWQnXSA/PyBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlciAmJiB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2wpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuZ3JpZFNuYXBDZWxsU2l6ZSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLnRvb2xNYW5hZ2VyLmRyYWdnaW5nVG9vbC5ncmlkU25hcENlbGxTaXplID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnZHJhZ2dpbmdUb29sLmdyaWRTbmFwQ2VsbFNpemUnXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkJ10pIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5teURpYWdyYW0udG9vbE1hbmFnZXIuZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkID1cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkJ107XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2RyYWdnaW5nVG9vbC5kb01vdXNlTW92ZSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLnRvb2xNYW5hZ2VyLmRyYWdnaW5nVG9vbC5kb01vdXNlTW92ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2RyYWdnaW5nVG9vbC5kb01vdXNlTW92ZSddO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2xpbmtpbmdUb29sLmxpbmtWYWxpZGF0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0udG9vbE1hbmFnZXIubGlua2luZ1Rvb2wubGlua1ZhbGlkYXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsT3B0aW9ucz8uWydsaW5raW5nVG9vbC5saW5rVmFsaWRhdGlvbiddO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmNvbnRlbnRBbGlnbm1lbnQgPSB0aGlzLmluaXRpYWxPcHRpb25zPy5jb250ZW50QWxpZ25tZW50ID8/IGdvLlNwb3QuQ2VudGVyO1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0ubGF5b3V0ID0gdGhpcy5pbml0aWFsT3B0aW9ucz8ubGF5b3V0O1xuICAgICAgICAgICAgLy8gdGhpcy5teURpYWdyYW0ubWluVmlld3BvcnRCb3VuZHMgPSBuZXcgZ28uUmVjdCgwLCAwLCAxMjAwLCAxMjAwKTtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZWRpdG9yPy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRPclJlbW92ZUNvbXBvZW50VGVtcGxhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5tb2RlbCA9IGdvLk1vZGVsLmZyb21Kc29uKHRoaXMuZWRpdG9yLmRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hbmltYXRpb25JbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlhZ3JhbURpdiA9IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5teURpYWdyYW1EaXYpPy5bMF07XG4gICAgICAgIHRoaXMubXlEaWFncmFtID0gdGhpcy4kKGdvLkRpYWdyYW0sIGRpYWdyYW1EaXYsIHRoaXMuaW5pdGlhbE9wdGlvbnMpO1xuICAgICAgICAvLyB0aGlzLm15RGlhZ3JhbS5pbml0aWFsUG9zaXRpb24gPSBuZXcgZ28uUG9pbnQoMCwgMCk7XG4gICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDb21wb2VudFRlbXBsYXRlKCk7XG5cbiAgICAgICAgdGhpcy5tYWtlTGlua1RlbXBsYXRlKCk7XG4gICAgICAgIC8vIGFuaW1hdGlvblxuICAgICAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uKCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIC8vIGlmICghdGhpcy5pc0FkZGVkTW9kZWxDaGFuZ2VkTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmlzQWRkZWRNb2RlbENoYW5nZWRMaXN0ZW5lcnMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uYWRkTW9kZWxDaGFuZ2VkTGlzdGVuZXIoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jaGFuZ2UgPT09IGdvLkNoYW5nZWRFdmVudC5SZW1vdmUgJiYgZS5wcm9wZXJ0eU5hbWUgPT09ICdub2RlRGF0YUFycmF5Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gZS5vbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkRlbGV0ZU5vZGUuZW1pdChkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGUuaXNUcmFuc2FjdGlvbkZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0dGVkVHJhbnNhY3Rpb25TdWJqZWN0Py5uZXh0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uY29tbWFuZEhhbmRsZXIudW5kbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm9uVW5kby5lbWl0KCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoISF0aGlzLmVkaXRvcikge1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0ubW9kZWwgPSBnby5Nb2RlbC5mcm9tSnNvbih0aGlzLmVkaXRvci5kYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRHcm91cFRlbXBsYXRlRW5lcmd5KCkge1xuICAgICAgICAvLyBmb3Igd2F0ZXJcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgU1RPUkFHRSxcbiAgICAgICAgICAgIFdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIERFTUlOX1dBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIC8vIFJPX1dBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIFBST0NFU1MsXG4gICAgICAgICAgICBXQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIERBRl9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIEVUUF9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIE1CUl9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIFpMRF9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIENPT0xJTkdfVE9XRVIsXG4gICAgICAgICAgICBCT0lMRVIsXG4gICAgICAgICAgICBPVEhFUixcbiAgICAgICAgICAgIExBTkRTQ0FQSU5HX0lSUklHQVRJT04sXG4gICAgICAgICAgICBQUkVTU1VSSVpFRF9VRl9XQVRFUl9UUkVBVE1FTlRTLFxuICAgICAgICAgICAgSU1NRVJTRURfVUZfV0FURVJfVFJFQVRNRU5UUyxcbiAgICAgICAgfSA9IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUztcbiAgICAgICAgY29uc3Qgd2F0ZXJHcm91cHMgPSBbXG4gICAgICAgICAgICBTVE9SQUdFLFxuICAgICAgICAgICAgV0FURVJfVFJFQVRNRU5ULFxuICAgICAgICAgICAgREVNSU5fV0FURVJfVFJFQVRNRU5ULFxuICAgICAgICAgICAgLy8gUk9fV0FURVJfVFJFQVRNRU5ULFxuICAgICAgICAgICAgUFJPQ0VTUyxcbiAgICAgICAgICAgIFdBU1RFV0FURVJfVFJFQVRNRU5ULFxuICAgICAgICAgICAgREFGX1dBU1RFV0FURVJfVFJFQVRNRU5ULFxuICAgICAgICAgICAgRVRQX1dBU1RFV0FURVJfVFJFQVRNRU5ULFxuICAgICAgICAgICAgTUJSX1dBU1RFV0FURVJfVFJFQVRNRU5ULFxuICAgICAgICAgICAgWkxEX1dBU1RFV0FURVJfVFJFQVRNRU5ULFxuICAgICAgICAgICAgQ09PTElOR19UT1dFUixcbiAgICAgICAgICAgIEJPSUxFUixcbiAgICAgICAgICAgIE9USEVSLFxuICAgICAgICAgICAgTEFORFNDQVBJTkdfSVJSSUdBVElPTixcbiAgICAgICAgICAgIFBSRVNTVVJJWkVEX1VGX1dBVEVSX1RSRUFUTUVOVFMsXG4gICAgICAgICAgICBJTU1FUlNFRF9VRl9XQVRFUl9UUkVBVE1FTlRTLFxuICAgICAgICBdO1xuICAgICAgICB3YXRlckdyb3Vwcy5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5pY29uLFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0ubmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBlbGVjdHJpY2FsXG4gICAgICAgIHRoaXMuaW5pdEVsZWN0cmljR3JvdXBUZW1wbGF0ZSgpO1xuXG4gICAgICAgIC8vIEZ1ZWxcbiAgICAgICAgdGhpcy5pbml0RnVlbEdyb3VwVGVtcGxhdGUoKTtcblxuICAgICAgICAvLyBHYXNcbiAgICAgICAgdGhpcy5pbml0R2FzR3JvdXBUZW1wbGF0ZSgpO1xuICAgIH1cblxuICAgIGluaXRFbGVjdHJpY0RpYWdyYW0oKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIEdSSUQsXG4gICAgICAgICAgICBESUVTRUxfR0VORVJBVE9SUyxcbiAgICAgICAgICAgIEJBVFRFUllfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBMSUdIVElOR19TWVNURU1TLFxuICAgICAgICAgICAgTElHSFRJTkdTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfTUVURVJTLFxuICAgICAgICAgICAgVFJBTlNGT1JNRVJTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfRkxZV0hFRUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBQVU1QRURfSFlEUk9fU1RPUkFHRSxcbiAgICAgICAgICAgIFRIRVJNQUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBTVVBFUl9DQVBBQ0lUT1JfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBTV0lUQ0hfR0VBUlMsXG4gICAgICAgICAgICBQUk9DRVNTX0NPTlRST0xfQVVUT01BVElPTl9TWVNURU1TLFxuICAgICAgICAgICAgUFJPQ0VTU19FUVVJUE1FTlRfTUFDSElORVMsXG4gICAgICAgICAgICBPRkZJQ0VfRVFVSVBNRU5ULFxuICAgICAgICAgICAgUE9XRVJfRElTVFJJQlVUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgICAgICAgIFBPV0VSX0RJU1RSSUJVVElPTl9TWVNURU1TLFxuICAgICAgICAgICAgTkFUVVJBTF9HQVNfR0VORVJBVE9SUyxcbiAgICAgICAgICAgIE1PVE9SX0NPTlRST0xTLFxuICAgICAgICAgICAgVkFSSUFCTEVfRlJFUVVFTkNZX0RSSVZFUlMsXG4gICAgICAgICAgICBFTEVDVFJJQ19IVkFDLFxuICAgICAgICAgICAgQ09NUFJFU1NFRF9BSVJfU1lTVEVNUyxcbiAgICAgICAgICAgIFJFRlJJR0VSQVRJT05fQ09PTElOR19TWVNURU1TLFxuICAgICAgICAgICAgTUFURVJJQUxfSEFORExJTkdfRVFVSVBNRU5ULFxuICAgICAgICAgICAgV0lORF9QT1dFUixcbiAgICAgICAgICAgIEVMRUNUUklDX0lORFVTVFJJQUxfTU9UT1JTLFxuICAgICAgICAgICAgR1JPVU5ESU5HLFxuICAgICAgICB9ID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTO1xuICAgICAgICBjb25zdCBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZSA9IFtcbiAgICAgICAgICAgIEdSSUQsXG4gICAgICAgICAgICBESUVTRUxfR0VORVJBVE9SUyxcbiAgICAgICAgICAgIEJBVFRFUllfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBMSUdIVElOR19TWVNURU1TLFxuICAgICAgICAgICAgTElHSFRJTkdTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfTUVURVJTLFxuICAgICAgICAgICAgVFJBTlNGT1JNRVJTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfRkxZV0hFRUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBQVU1QRURfSFlEUk9fU1RPUkFHRSxcbiAgICAgICAgICAgIFRIRVJNQUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBTVVBFUl9DQVBBQ0lUT1JfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBTV0lUQ0hfR0VBUlMsXG4gICAgICAgICAgICBQUk9DRVNTX0NPTlRST0xfQVVUT01BVElPTl9TWVNURU1TLFxuICAgICAgICAgICAgUFJPQ0VTU19FUVVJUE1FTlRfTUFDSElORVMsXG4gICAgICAgICAgICBPRkZJQ0VfRVFVSVBNRU5ULFxuICAgICAgICAgICAgUE9XRVJfRElTVFJJQlVUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgICAgICAgIFBPV0VSX0RJU1RSSUJVVElPTl9TWVNURU1TLFxuICAgICAgICAgICAgTkFUVVJBTF9HQVNfR0VORVJBVE9SUyxcbiAgICAgICAgICAgIE1PVE9SX0NPTlRST0xTLFxuICAgICAgICAgICAgVkFSSUFCTEVfRlJFUVVFTkNZX0RSSVZFUlMsXG4gICAgICAgICAgICBFTEVDVFJJQ19IVkFDLFxuICAgICAgICAgICAgQ09NUFJFU1NFRF9BSVJfU1lTVEVNUyxcbiAgICAgICAgICAgIFJFRlJJR0VSQVRJT05fQ09PTElOR19TWVNURU1TLFxuICAgICAgICAgICAgTUFURVJJQUxfSEFORExJTkdfRVFVSVBNRU5ULFxuICAgICAgICAgICAgV0lORF9QT1dFUixcbiAgICAgICAgICAgIEVMRUNUUklDX0lORFVTVFJJQUxfTU9UT1JTLFxuICAgICAgICAgICAgR1JPVU5ESU5HLFxuICAgICAgICBdO1xuICAgICAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdEVsZWN0cmljR3JvdXBUZW1wbGF0ZSgpIHtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gW1xuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5CQVRURVJZX0VORVJHWV9TVE9SQUdFXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVFJBTlNGT1JNRVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRUxFQ1RSSUNfTUVURVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTElHSFRJTkdTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUE9XRVJfRElTVFJJQlVUSU9OX1NZU1RFTVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TV0lUQ0hfR0VBUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTEVDVFJJQ19JTkRVU1RSSUFMX01PVE9SU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkdST1VORElOR10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLk1PVE9SX0NPTlRST0xTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTElHSFRJTkdfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkVMRUNUUklDX0hWQUNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5SRUZSSUdFUkFUSU9OX0NPT0xJTkdfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBST0NFU1NfQ09OVFJPTF9BVVRPTUFUSU9OX1NZU1RFTVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5PRkZJQ0VfRVFVSVBNRU5UXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09NUFJFU1NFRF9BSVJfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBST0NFU1NfRVFVSVBNRU5UX01BQ0hJTkVTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTUFURVJJQUxfSEFORExJTkdfRVFVSVBNRU5UXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUE9XRVJfRElTVFJJQlVUSU9OX0NPTlRST0xfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJBVFRFUklFU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBUklBQkxFX0ZSRVFVRU5DWV9EUklWRVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRUxFQ1RSSUNfRkxZV0hFRUxfRU5FUkdZX1NUT1JBR0VdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QVU1QRURfSFlEUk9fU1RPUkFHRV0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRIRVJNQUxfRU5FUkdZX1NUT1JBR0VdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TVVBFUl9DQVBBQ0lUT1JfRU5FUkdZX1NUT1JBR0VdLFxuICAgICAgICBdO1xuICAgICAgICBsaXN0SXRlbXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShlPy5pY29uLCBlLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0RnVlbEdyb3VwVGVtcGxhdGUoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IFtcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRElFU0VMX0ZVRUxTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0FTT05fTElORVNdLFxuXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJJT0RJRVNFTFNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5LRVJPU0VOU0VdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QUk9QQU5FU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRBTktFUl9UUlVDS1NdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QSVBFTElORV0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklORFVTVFJJQUxfQk9JTEVSU10sXG5cbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0VORVJBVE9SU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklORFVTVFJJQUxfRlVSTkFDRVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5JTkRVU1RSSUFMX09WRU5TXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuSU5EVVNUUklBTF9WRUhJQ0xFU19BTkRfRVFVSVBNRU5UXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NRVRFUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0RJU1BFTlNFUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX1NUUk9SQUdFX1RBTktTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRUxFQ1RSSUNfSFZBQ10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRklMVFJBVElPTlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX01BTkFHRU1FTlRTXSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0RJU1BFTlNFUlNdLmljb24sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRElTUEVOU0VSU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgbGlzdEl0ZW1zLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoZT8uaWNvbiwgZS5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdEdhc0dyb3VwVGVtcGxhdGUoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IFtcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QSVBFTElORV0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJPSUxFUlNfQU5EX0hFQVRFUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVVJOQUNFU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBPV0VSX0dFTkVSQVRJT05dLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT0dFTkVSQVRJT05dLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT01CSU5FRF9DWUNMRV9QT1dFUl9QTEFOVFNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0ZPUl9WRUhJQ0xFU19BTkRfRVFVSVBNRU5UXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0FTX01FVEVSU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJVUk5FUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GTFVFX0dBU19BTkFMWVpFUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT01CVVNUSU9OX0NPTlRST0xfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkdBU19TVE9SQUdFX1RBTktTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0FTX1BSRVNTVVJFX1JFR1VMQVRPUlNdLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRElTUEVOU0VSU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9ESVNQRU5TRVJTXS5uYW1lLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX1NUUk9SQUdFX1RBTktTXS5pY29uLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX1NUUk9SQUdFX1RBTktTXS5uYW1lLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0ZJTFRSQVRJT05TXS5pY29uLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0ZJTFRSQVRJT05TXS5uYW1lLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX01BTkFHRU1FTlRTXS5pY29uLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX01BTkFHRU1FTlRTXS5uYW1lLFxuICAgICAgICApO1xuICAgICAgICBsaXN0SXRlbXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShlPy5pY29uLCBlLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0R2FzRGlhZ3JhbSgpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgTkFUVVJBTF9HQVNfUElQRUxJTkVTLFxuICAgICAgICAgICAgTElRVUVGSUVEX05BVFVSQUxfR0FTLFxuICAgICAgICAgICAgQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QSVBFTElORSxcbiAgICAgICAgICAgIENPTVBSRVNTRURfTkFUVVJBTF9HQVNfUFJPRFVDVElPTixcbiAgICAgICAgICAgIEJPSUxFUlNfQU5EX0hFQVRFUlMsXG4gICAgICAgICAgICBGVVJOQUNFUyxcbiAgICAgICAgICAgIFBPV0VSX0dFTkVSQVRJT04sXG4gICAgICAgICAgICBDT0dFTkVSQVRJT04sXG4gICAgICAgICAgICBDT01CSU5FRF9DWUNMRV9QT1dFUl9QTEFOVFMsXG4gICAgICAgICAgICBGVUVMX0ZPUl9WRUhJQ0xFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgICAgICAgR0FTX01FVEVSUyxcbiAgICAgICAgICAgIEJVUk5FUlMsXG4gICAgICAgICAgICBGTFVFX0dBU19BTkFMWVpFUlMsXG4gICAgICAgICAgICBDT01CVVNUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgICAgICAgIEdBU19TVE9SQUdFX1RBTktTLFxuICAgICAgICAgICAgR0FTX1BSRVNTVVJFX1JFR1VMQVRPUlMsXG4gICAgICAgICAgICBOQVRVUkFMX0dBUyxcbiAgICAgICAgfSA9IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUztcbiAgICAgICAgY29uc3QgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUgPSBbXG4gICAgICAgICAgICBOQVRVUkFMX0dBU19QSVBFTElORVMsXG4gICAgICAgICAgICBMSVFVRUZJRURfTkFUVVJBTF9HQVMsXG4gICAgICAgICAgICBDT01QUkVTU0VEX05BVFVSQUxfR0FTX1BJUEVMSU5FLFxuICAgICAgICAgICAgQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QUk9EVUNUSU9OLFxuICAgICAgICAgICAgQk9JTEVSU19BTkRfSEVBVEVSUyxcbiAgICAgICAgICAgIEZVUk5BQ0VTLFxuICAgICAgICAgICAgUE9XRVJfR0VORVJBVElPTixcbiAgICAgICAgICAgIENPR0VORVJBVElPTixcbiAgICAgICAgICAgIENPTUJJTkVEX0NZQ0xFX1BPV0VSX1BMQU5UUyxcbiAgICAgICAgICAgIEZVRUxfRk9SX1ZFSElDTEVTX0FORF9FUVVJUE1FTlQsXG4gICAgICAgICAgICBHQVNfTUVURVJTLFxuICAgICAgICAgICAgQlVSTkVSUyxcbiAgICAgICAgICAgIEZMVUVfR0FTX0FOQUxZWkVSUyxcbiAgICAgICAgICAgIENPTUJVU1RJT05fQ09OVFJPTF9TWVNURU1TLFxuICAgICAgICAgICAgR0FTX1NUT1JBR0VfVEFOS1MsXG4gICAgICAgICAgICBHQVNfUFJFU1NVUkVfUkVHVUxBVE9SUyxcbiAgICAgICAgICAgIE5BVFVSQUxfR0FTLFxuICAgICAgICBdO1xuICAgICAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdEZ1ZWxEaWFncmFtKCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBESUVTRUxfRlVFTFMsXG4gICAgICAgICAgICBHQVNPTl9MSU5FUyxcbiAgICAgICAgICAgIEJJT0RJRVNFTFMsXG4gICAgICAgICAgICBLRVJPU0VOU0UsXG4gICAgICAgICAgICBQUk9QQU5FUyxcbiAgICAgICAgICAgIFRBTktFUl9UUlVDS1MsXG4gICAgICAgICAgICBQSVBFTElORSxcbiAgICAgICAgICAgIElORFVTVFJJQUxfQk9JTEVSUyxcbiAgICAgICAgICAgIEdFTkVSQVRPUlMsXG4gICAgICAgICAgICBJTkRVU1RSSUFMX0ZVUk5BQ0VTLFxuICAgICAgICAgICAgSU5EVVNUUklBTF9PVkVOUyxcbiAgICAgICAgICAgIElORFVTVFJJQUxfVkVISUNMRVNfQU5EX0VRVUlQTUVOVCxcbiAgICAgICAgICAgIEZVRUxfTUVURVJTLFxuICAgICAgICAgICAgRlVFTF9ESVNQRU5TRVJTLFxuICAgICAgICAgICAgRlVFTF9TVFJPUkFHRV9UQU5LUyxcbiAgICAgICAgICAgIEZVRUxfRklMVFJBVElPTlMsXG4gICAgICAgICAgICBGVUVMX01BTkFHRU1FTlRTLFxuICAgICAgICAgICAgRlVFTFMsXG4gICAgICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgICAgIGNvbnN0IExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlID0gW1xuICAgICAgICAgICAgRElFU0VMX0ZVRUxTLFxuICAgICAgICAgICAgR0FTT05fTElORVMsXG4gICAgICAgICAgICBCSU9ESUVTRUxTLFxuICAgICAgICAgICAgS0VST1NFTlNFLFxuICAgICAgICAgICAgUFJPUEFORVMsXG4gICAgICAgICAgICBUQU5LRVJfVFJVQ0tTLFxuICAgICAgICAgICAgUElQRUxJTkUsXG4gICAgICAgICAgICBJTkRVU1RSSUFMX0JPSUxFUlMsXG4gICAgICAgICAgICBHRU5FUkFUT1JTLFxuICAgICAgICAgICAgSU5EVVNUUklBTF9GVVJOQUNFUyxcbiAgICAgICAgICAgIElORFVTVFJJQUxfT1ZFTlMsXG4gICAgICAgICAgICBJTkRVU1RSSUFMX1ZFSElDTEVTX0FORF9FUVVJUE1FTlQsXG4gICAgICAgICAgICBGVUVMX01FVEVSUyxcbiAgICAgICAgICAgIEZVRUxfRElTUEVOU0VSUyxcbiAgICAgICAgICAgIEZVRUxfU1RST1JBR0VfVEFOS1MsXG4gICAgICAgICAgICBGVUVMX0ZJTFRSQVRJT05TLFxuICAgICAgICAgICAgRlVFTF9NQU5BR0VNRU5UUyxcbiAgICAgICAgICAgIEZVRUxTLFxuICAgICAgICBdO1xuICAgICAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdFNvbGFyRGlhZ3JhbSgpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgU09MQVJfUE9XRVIsXG4gICAgICAgICAgICBQT1dFUl9DT05ESVRJT05JTkdfVU5JVCxcbiAgICAgICAgICAgIEJBVFRFUklFUzogQkFUVEVSWSxcbiAgICAgICAgICAgIElOVkVSVEVSUzogSU5WRVJURVIsXG4gICAgICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgICAgIGNvbnN0IExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlID0gW1NPTEFSX1BPV0VSLCBQT1dFUl9DT05ESVRJT05JTkdfVU5JVCwgQkFUVEVSWSwgSU5WRVJURVJdO1xuICAgICAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdFN0ZWFtRGlhZ3JhbSgpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgVkFMVUVTLFxuICAgICAgICAgICAgU1RFQU1fVFJBUFMsXG4gICAgICAgICAgICBQUkVTU1VSRV9SRUdVTEFUT1JTLFxuICAgICAgICAgICAgU0FGRVRZX1ZBTFVFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgICAgICAgQ09OREVOU0FURV9SRVRVUk5fU1lTVEVNLFxuICAgICAgICAgICAgREVBRVJBVE9SUyxcbiAgICAgICAgICAgIEZFRURXQVRFUl9QVU1QUyxcbiAgICAgICAgICAgIEJMT1dET1dOX1RBTktTLFxuICAgICAgICAgICAgRVhQQU5TSU9OX1RBTktTLFxuICAgICAgICAgICAgSEVBVF9FWENIQU5HRVJTLFxuICAgICAgICAgICAgVFVSQklORVMsXG4gICAgICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgICAgIGNvbnN0IExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlID0gW1xuICAgICAgICAgICAgVkFMVUVTLFxuICAgICAgICAgICAgU1RFQU1fVFJBUFMsXG4gICAgICAgICAgICBQUkVTU1VSRV9SRUdVTEFUT1JTLFxuICAgICAgICAgICAgU0FGRVRZX1ZBTFVFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgICAgICAgQ09OREVOU0FURV9SRVRVUk5fU1lTVEVNLFxuICAgICAgICAgICAgREVBRVJBVE9SUyxcbiAgICAgICAgICAgIEZFRURXQVRFUl9QVU1QUyxcbiAgICAgICAgICAgIEJMT1dET1dOX1RBTktTLFxuICAgICAgICAgICAgRVhQQU5TSU9OX1RBTktTLFxuICAgICAgICAgICAgSEVBVF9FWENIQU5HRVJTLFxuICAgICAgICAgICAgVFVSQklORVMsXG4gICAgICAgIF07XG4gICAgICAgIExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEhQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlRW50aXR5VGVtcGxhdGVFbmVyZ3koXG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5pY29uLFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0ubmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlTGlzdGVuZXIoZTogZ28uQ2hhbmdlZEV2ZW50KSB7XG4gICAgICAgIC8vIHRoaXMub25Nb2RlbENoYW5nZUxpc3RlbmVyRXZlbnQuZW1pdChlKTtcbiAgICB9XG5cbiAgICBtYWtlTGlua1RlbXBsYXRlKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50czogYW55W10gPSBbXTtcbiAgICAgICAgLy8gbGluZVxuICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaXNQYW5lbE1haW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkdSQVksXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkxJTktfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xJTktfVFlQRVMuU0lNUExFXT8uc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZVdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlV2lkdGgnLCAndHlwZScsICh4KSA9PiBBdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbeF0/LnN0cm9rZVdpZHRoKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gYW5pbWF0aW9uXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHtcbiAgICAgICAgICAgICAgICAuLi5BdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5QSVBFX0FOSU1BVElPTl0/LmFuaW1hdGlvbixcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdUb3AnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzOCxcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoTmFOLCAzNiksXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpZHRoOiAxMDAsXG4gICAgICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKDEwMCwgNSksIC8vIMSQ4bq3dCBrw61jaCB0aMaw4bubYyB04buRaSB0aGnhu4N1IGzDoCAxMDB4NTBcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgLy8gbGF5ZXJOYW1lOiAnQmFja2dyb3VuZExheWVyJyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50OiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDUwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICd0ZXh0Q29tcG9uZW50JywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgICAgLy8gICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgLy8gICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgNTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50OiBnby5TcG90LkNlbnRlciwgLy8gxJDhuqNtIGLhuqNvIHbEg24gYuG6o24gbuG6sW0g4bufIHRydW5nIHTDom0gY+G7p2EgbsO6dFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQ2VudGVyLCAvLyDEkOG6o20gYuG6o28gdsSDbiBi4bqjbiBraMO0bmcgYuG7iyBk4buLY2ggY2h1eeG7g24gcmEga2jhu49pIHRydW5nIHTDom1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LCAvLyBDaHV54buDbiBkw7JuZyDEkeG7gyB2xINuIGLhuqNuIGtow7RuZyB2xrDhu6N0IHJhIG5nb8OgaVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAndGV4dENvbXBvbmVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICd0ZXh0Q29tcG9uZW50JyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdiYWNrZ3JvdW5kJywgJ3RleHRDb21wb25lbnQnLCAoeCkgPT4gKHggPyAnd2hpdGUnIDogJ3RyYW5zcGFyZW50JykpLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgbmV3IGdvLkJpbmRpbmcoJ21hcmdpbicsICdpc0Zvcm1hdCcsICh4KSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgeCA/IG5ldyBnby5NYXJnaW4oNSwgMCwgNSwgNSkgOiBuZXcgZ28uTWFyZ2luKDUsIDUsIDUsIDUpLFxuICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGFycm93XG4gICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uU2hhcGUsIC8vIHRoZSBcImZyb21cIiBhcnJvd2hlYWRcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC4uLkF0b0dvanNFZGl0b3JNb2RlbC5MSU5LX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlNJTVBMRV0/LmFycm93LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoXG4gICAgICAgICAgICAgICAgICAgICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICFbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5QSVBFX0FOSU1BVElPTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlBJUEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5QSVBFX0hJRERFTixcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoeCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZmlsbCcsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVE9ETyBmaXggbGluayBjYW5ub3Qgc2VsZWN0ZWQgaW5zaWRlIGdyb3VwIHRlbXBsYXRlXG4gICAgICAgIHRoaXMubXlEaWFncmFtLmxpbmtUZW1wbGF0ZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkxpbmssXG4gICAgICAgICAgICBnby5MaW5rLk9ydGhvZ29uYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbGF5ZXJOYW1lOiAnQmFja2dyb3VuZCcsIC8vIGxpbmsgY2Fubm90IHNlbGVjdCBpbnNpZGUgZ3JvdXAgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAvLyBjdXJ2aW5lc3M6IDIwLFxuICAgICAgICAgICAgICAgIC8vIGNvcm5lcjogNSxcbiAgICAgICAgICAgICAgICByb3V0aW5nOiBnby5MaW5rLkF2b2lkc05vZGVzLFxuICAgICAgICAgICAgICAgIHJlc2hhcGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVzZWdtZW50YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWxpbmthYmxlRnJvbTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWxpbmthYmxlVG86IHRydWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b1Nob3J0TGVuZ3RoOlxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5TSU1QTEVdLnRvU2hvcnRMZW5ndGgsIC8vIGFzc3VtZSBhcnJvd2hlYWQgYXQgXCJ0b1wiIGVuZCwgbmVlZCB0byBhdm9pZCBiYWQgYXBwZWFyYW5jZSB3aGVuIHBhdGggaXMgdGhpY2tcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbGF5ZXJOYW1lJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnRleHRDb21wb25lbnQgPyAnQmFja2dyb3VuZCcgOiAnJztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3pPcmRlcicsICd0eXBlJywgKHgpID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5QSVBFX0FOSU1BVElPTiA/IDExIDogMTAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RvU2hvcnRMZW5ndGgnLCAndHlwZScsICh4KSA9PiBBdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbeF0udG9TaG9ydExlbmd0aCB8fCAwKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3Zpc2libGUnKSxcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGxpbmtzIGNvbWUgaW4gZnJvbSB0aGUgcHJvcGVyIGRpcmVjdGlvbiBhbmQgZ28gb3V0IGFwcHJvcHJpYXRlbHlcbiAgICAgICAgICAgIC4uLmVsZW1lbnRzLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1ha2VWYWx1ZU5vZGVUZW1wbGF0ZShzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgyLCBoOiAzNiB9KSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgeyBtaW5TaXplOiBuZXcgZ28uU2l6ZShzaXplLncsIHNpemUuaCkgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSUdIVF9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDE0cHggQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQ0VSVUxFQU4sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2VkaXRhYmxlJywgJ2lzRWRpdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3Nob3J0ZW5lZE51bWJlcicpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdtYXJnaW4nLCAnaXNGb3JtYXQnLCAoeCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID8gbmV3IGdvLk1hcmdpbig1LCAwLCA1LCA1KSA6IG5ldyBnby5NYXJnaW4oNSwgNSwgNSwgNSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSAhPT0gVkFMVUVfTkE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gSWNvbiBFcnIgd2hlbiBsYWNrIG9mIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDEwLCAxMCwgMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IFZBTFVFX05BLCAvLyBPbGQgdmVyc2lvbjogVEVYVF9FUlJPUlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5TQUxNT04sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTXVsdGlsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlID09PSBWQUxVRV9OQTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5WQUxVRV9OT0RFLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlRW1wdHlOb2RlVGVtcGxhdGUoc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiAwLCBoOiAwIH0pIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTVBUWSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZVZhbHVlTGFiZWxUZW1wbGF0ZShzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgyLCBoOiAzNiB9KSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7IG1pblNpemU6IG5ldyBnby5TaXplKHNpemUudywgc2l6ZS5oKSB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDEwLCAwLCAxMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNSwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTVweCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5DRVJVTEVBTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5TaXplOiBuZXcgZ28uU2l6ZSgxNTAsIDMwKSwgLy8gU2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCBibG9ja1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ2RhdGEnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgeD8ucXVhbnRpdHkgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkOiBhbnkgPSBVdGlsc1NlcnZpY2UuY29udmVydFByZWZpeGVzRGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB4Py5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdDogVXRpbHNTZXJ2aWNlLmNvbnZlcnRTcGVjaWFsVW5pdCh4Py51bml0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5zaG9ydGVuZWROdW1iZXIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQudW5pdFByZWZpeGVzICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHNTZXJ2aWNlLmNvbnZlcnRTcGVjaWFsVW5pdCh4Py51bml0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeD8ucGVyY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWx1ZSArPSBgICgke3g/LnBlcmNlbnR9JSlgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2RhdGEnLCAoeCkgPT4gdHlwZW9mIHg/LnF1YW50aXR5ID09PSAnbnVtYmVyJyksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBTFVFX0xBQkVMLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlVGV4dExhYmVsVGVtcGxhdGUoc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiBOYU4sIGg6IDIwIH0pIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDE2cHggQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkNFUlVMRUFOLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3Zpc2libGUnKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9MQUJFTCwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZVRleHRUZW1wbGF0ZShcbiAgICAgICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0ge1xuICAgICAgICAgICAgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsXG4gICAgICAgICAgICBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMixcbiAgICAgICAgfSxcbiAgICApIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNZW51ID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgJ1ZlcnRpY2FsJyxcbiAgICAgICAgICAgIHRoaXMuJCgnQ29udGV4dE1lbnVCdXR0b24nLCB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnT3B0aW9uIDEnKSwge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdPcHRpb24gMSBjbGlja2VkIScpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJCgnQ29udGV4dE1lbnVCdXR0b24nLCB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnT3B0aW9uIDInKSwge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdPcHRpb24gMiBjbGlja2VkIScpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIC4uLiBhZGQgbW9yZSBvcHRpb25zIGFzIG5lZWRlZCAuLi5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gZnJvbVNwb3Q6IGdvLlNwb3QuUmlnaHRTaWRlLFxuICAgICAgICAgICAgICAgIC8vIHRvU3BvdDogZ28uU3BvdC5MZWZ0U2lkZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIC8vIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGlmIChlPy5kYXRhLm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGU/LmRhdGEub25TZWxlY3RlZChlPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgLy8gbW91c2VIb3ZlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICgob2JqIGFzIGFueSkucGFydD8ub2I/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgLy8gbW91c2VMZWF2ZTogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoKG9iaiBhcyBhbnkpLnBhcnQ/Lm9iPy52YWx1ZSA9PT0gVkFMVUVfTkEpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlPy5vYj8uaXNUeXBlSW5mbG93T2ZQbGFudENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iaj8uZGF0YT8ub25TZWxlY3RlZChub2RlPy5vYj8ubm9kZVBsYW50Q2VsbFBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxmLm9uQ2xpY2tDb21wb2VudC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBvYjogbm9kZT8ub2I/Lm5vZGVQbGFudENlbGxQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBjb21wb25lbnQ6IG5vZGU/Lm9iPy5ub2RlUGxhbnRDZWxsUGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLm9uQ2xpY2tJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvdWJsZUNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZT8ub2I/LmlzVHlwZUluZmxvd09mUGxhbnRDZWxsICYmICF0aGlzLl9pbml0aWFsT3B0aW9ucz8uaXNSZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2JqPy5kYXRhPy5vblNlbGVjdGVkKG5vZGU/Lm9iPy5ub2RlUGxhbnRDZWxsUGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaXNTaG93Tm9kZUluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICA/IHNlbGYub25Eb3VibGVDbGlja05vZGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgb2I6IG5vZGU/Lm9iPy5ub2RlUGxhbnRDZWxsUGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLm9uQ2xpY2tJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgaGVpZ2h0OiA2MiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICdkb2RnZXJibHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbig4LCAzLCAwLCAzKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdwYWRkaW5nJywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4Py5pc1R5cGVJbmZsb3dPZlBsYW50Q2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB4Py5mbG93T2ZQbGFudENlbGwgPT09IEFUT19FTlVNX0ZMT1dfRElSRUNUSU9OLklORkxPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAyMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBnby5NYXJnaW4oMCwgMjAsIDAsIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IDMgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVHlwZUluZmxvd09mUGxhbnRDZWxsID8geD8uaGVpZ2h0ICsgMTAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnd2lkdGgnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geD8uaXNUeXBlSW5mbG93T2ZQbGFudENlbGwgPyB4Py53aWR0aCArIDEyIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LCBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdlbmVyYXRlQWN0aW9uR3JvdXAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLklOU0lHSFQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFTEVURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3Zpc2libGUnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmcm9tU3BvdCcsICdmcm9tU3BvdCcpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RvU3BvdCcsICd0b1Nwb3QnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdtb3ZhYmxlJywgJ21vdmFibGUnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2FsaWdubWVudCcsICdhbGlnbm1lbnQnLCBmdW5jdGlvbihsb2MpIHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gbmV3IGdvLlNwb3QoMCwgMCwgbG9jLngsIDApO1xuICAgICAgICAgICAgLy8gfSkub2ZPYmplY3QoKSxcblxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGYuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5uYW1lID8/IFZBTFVFX05BO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhPy52YWx1ZSA9PT0gVkFMVUVfTkEgfHwgXy5pc05pbChkYXRhPy52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT19EQVRBO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIFRFWFRfVU5LTk9XTjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5yb3VuZChkYXRhPy52YWx1ZSwgMikudG9GaXhlZCgyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcnJvd0ZvclBsYW50Q2VsbChzaXplLCBBVE9fRU5VTV9GTE9XX0RJUkVDVElPTi5PVVRGTE9XKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBzaXplLmgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudywgc2l6ZS5oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBzaXplLmgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3dpZHRoJywgJ3dpZHRoJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJ2hlaWdodCcpLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uU2hhcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JvdW5kZWRSZWN0YW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJR0hUX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJTktfV0FURVIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd0ZXh0Tm9kZVNoYXBlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmaWxsJywgJ2ZpbGwnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJ3N0cm9rZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmVydGljYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsZXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3JlY29tbWVuZGF0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdDaXJjbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJyNFOTVGNDcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyNFOTVGNDcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xcdWY2NDknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxLjUsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICc4cHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgNSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uSG92ZXJBbGVydC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VBbGVydDogKG9iaiBhcyBhbnkpLnBhcnQ/Lm9iPy5tZXNzYWdlQWxlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VMZWF2ZTogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uSG92ZXJBbGVydC5lbWl0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnYWxlcnQnKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIElDT05fQUxFUlQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDMwLCAzMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd0ZXh0QmxvY2tWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gOCwgMTgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDIycHggQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuR1JBWSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2VkaXRhYmxlJywgJ2lzRWRpdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdhbmdsZScsICdhbmdsZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21hcmdpbicsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhPy5hbGVydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0VGV4dERhdGFCb3goZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSkgPT4gIWRhdGE/LmlzSGlkZGVuVmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFycm93Rm9yUGxhbnRDZWxsKHNpemUsIEFUT19FTlVNX0ZMT1dfRElSRUNUSU9OLklORkxPVyksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSwgbm9kZSk7XG4gICAgfVxuXG4gICAgYXJyb3dGb3JQbGFudENlbGwoc2l6ZSwgZmxvd0RpcmVjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGhlaWdodDogc2l6ZS5oLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdoZWlnaHQnLCAnaGVpZ2h0JyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSkgPT4gZGF0YT8uZmxvd09mUGxhbnRDZWxsID09PSBmbG93RGlyZWN0aW9uKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2x1bW46IGZsb3dEaXJlY3Rpb24gPT09IEFUT19FTlVNX0ZMT1dfRElSRUNUSU9OLk9VVEZMT1cgPyAwIDogMixcbiAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2l0ZW1BcnJheScsICdkYXRhTGlua0FycmF5JyksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaXRlbVRlbXBsYXRlOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygncm93JywgJ2luZGV4Um93JyksXG4gICAgICAgICAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdoZWlnaHQnLCAnaGVpZ2h0JyksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBBUlJPVyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDIwLCA0MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzb3VyY2UnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFuZWwucGFydD8uZGF0YT8uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8uaXNDcmVhdGVkID8gcGFuZWw/LiRwIDogQVJST1dfR1JBWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldFRleHREYXRhQm94KGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGE/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAgICAgcmV0dXJuIFRFWFRfVU5LTk9XTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7ZGF0YT8uc2hvcnRlbmVkTnVtYmVyfSR7ZGF0YT8udW5pdFByZWZpeGVzID8gJyAnICsgZGF0YT8udW5pdFByZWZpeGVzIDogJyd9YDtcbiAgICB9XG5cbiAgICBtYWtlRGF0YUJveFRlbXBsYXRlKFxuICAgICAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7XG4gICAgICAgICAgICB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICAgICAgICAgIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgICAgICB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgbW91c2VPdmVyOiBmdW5jdGlvbiAoZSwgb2JqKSB7fSxcbiAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUhvdmVyOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvYmogYXMgYW55KS5wYXJ0Py5vYj8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VMZWF2ZTogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob2JqIGFzIGFueSkucGFydD8ub2I/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcm93OiAwLCBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5Ib3Jpem9udGFsIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uU2hhcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlY3RhbmdsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElHSFRfQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZpbGwnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDEwLCA1LCAxMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudywgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nQmVsb3c6IDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHJvdzogMSwgc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuSG9yaXpvbnRhbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSUdIVF9CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAxMCwgNDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMTAsIHNpemUuaCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oNSwgMCwgNSwgNSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMnB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5HUkFZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZWRpdGFibGUnLCAnaXNFZGl0YWJsZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICdzaG9ydGVuZWROdW1iZXInKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlICE9PSBWQUxVRV9OQTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAxMCwgNDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMTAsIHNpemUuaCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oNSwgNSwgNSwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMnB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5HUkFZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUgIT09IFZBTFVFX05BO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAndW5pdFByZWZpeGVzJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEljb24gRXJyIHdoZW4gbGFjayBvZiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDEwLCAxMCwgMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogVkFMVUVfTkEsIC8vIE9sZCB2ZXJzaW9uOiBURVhUX0VSUk9SXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlNBTE1PTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNdWx0aWxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUgPT09IFZBTFVFX05BO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLjUsIDgsIDApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDEsIDAuNSwgLTgsIDApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBmb3VyIG5hbWVkIHBvcnRzLCBvbmUgb24gZWFjaCBzaWRlOlxuXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuREFUQV9CT1gsIG5vZGUpO1xuICAgIH1cblxuICAgIHNob3dQb2ludChsb2MpIHtcbiAgICAgICAgY29uc3QgZG9jTG9jID0gdGhpcy5teURpYWdyYW0udHJhbnNmb3JtRG9jVG9WaWV3KGxvYyk7XG4gICAgfVxuXG4gICAgbWFrZUVudGl0eVRlbXBsYXRlKFxuICAgICAgICBpY29uLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0ge1xuICAgICAgICAgICAgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsXG4gICAgICAgICAgICBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICAgICAgfSxcbiAgICApIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIG1vdXNlT3ZlcjogZnVuY3Rpb24gKGUsIG9iaikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZWxmLnNob3dQb2ludChvYmo/LnBhcnQ/LmxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2tDb21wb2VudC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IG9iaj8uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dWaXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Qmx1cjogNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd09mZnNldDogbmV3IGdvLlBvaW50KDAsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Q29sb3I6ICcjMDAwMDAwMjknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiAzIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2VuZXJhdGVBY3Rpb25Hcm91cChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5ST19XQVRFUl9UUkVBVE1FTlRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09PTElOR19UT1dFUlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQk9JTEVSXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5JTU1FUlNFRF9VRl9XQVRFUl9UUkVBVE1FTlRTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBSRVNTVVJJWkVEX1VGX1dBVEVSX1RSRUFUTUVOVFNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXModGl0bGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuRkxPV19ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuQVNTRVRfUEFSQU1FVEVSUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFVEFJTFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21vdmFibGUnLCAnbW92YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICd2aXNpYmxlJyksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHNpemUudyxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplLmgsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIHNpemUuaCAtIDUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKDYwLCA2MCksXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0ZXh0OiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMCwgMywgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCAxNSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzAwMEQ0MicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHsgbWFyZ2luOiA0IH0sIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2VkaXRhYmxlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX0NPTVBPTkVOVF9XQVRFUj8uaW5jbHVkZXMoZGF0YT8uc3lzdGVtVHlwZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT8udG9wb2xvZ3lUeXBlICE9PSBBVE9fRUNPTVBPTkVOVF9QTEFOVF9UWVBFLldBVEVSICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE/LnRvcG9sb2d5VHlwZSAhPT0gQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRS5XQVRFUl9QTEFOVF9DRUxMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMC41LCA4LCAwKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlRW50aXR5VGVtcGxhdGVFbmVyZ3koXG4gICAgICAgIGljb24sXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7XG4gICAgICAgICAgICB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICAgICAgICAgIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgICAgICB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgbW91c2VPdmVyOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbGYuc2hvd1BvaW50KG9iaj8ucGFydD8ubG9jYXRpb24pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93VmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0JsdXI6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQ6IG5ldyBnby5Qb2ludCgwLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0NvbG9yOiAnIzAwMDAwMDI5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJ2RvZGdlcmJsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBY3Rpb25Hcm91cChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVUQUlMUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT1VURkxPVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAndmlzaWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21vdmFibGUnLCAnbW92YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHNpemUudyxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplLmgsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCBBdG9Hb2pzRWRpdG9yTW9kZWwuVEVNUExBVEVfRFVQTElDQVRFW3RpdGxlXSA/PyB0aXRsZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDEwLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCAxNSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGV4dDogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIHNpemUuaCAtIDY1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAzLCAzLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMyQzJDMkMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIGZvdXIgbmFtZWQgcG9ydHMsIG9uZSBvbiBlYWNoIHNpZGU6XG5cbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIC8vIFBsYW50IENlbGxcbiAgICBwbGFudENlbGxUZW1wbGF0ZShcbiAgICAgICAgaWNvbixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHtcbiAgICAgICAgICAgIHc6IDI2MCxcbiAgICAgICAgICAgIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5QTEFOVF9DRUxMX0hFSUdIVCxcbiAgICAgICAgfSxcbiAgICApIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5zaG93UG9pbnQob2JqPy5wYXJ0Py5sb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIG1vdXNlRW50ZXI6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5vbkhvdmVyQWxlcnQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBtZXNzYWdlQWxlcnQ6IChvYmogYXMgYW55KS5wYXJ0Py5vYj8ubWVzc2FnZUFsZXJ0LFxuICAgICAgICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54ICsgOCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHNoYXBlID0gKG5vZGUgYXMgYW55KT8uZmluZE9iamVjdCgnU0hBUEVfS0VZJyk7IC8vIFRoYXkgJ1NIQVBFX0tFWScgYuG6sW5nIGtow7NhIGLhuqFuIMSR4bq3dCBjaG8gaMOsbmggU2hhcGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGFwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUuc3Ryb2tlID0gJ2JsdWUnOyAvLyBUaGF5IMSR4buVaSBtw6B1IHN0cm9rZSB0aMOgbmggYmx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5vbkhvdmVyQWxlcnQuZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGlja0NvbXBvZW50LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogb2JqPy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgZG91YmxlQ2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLm9uRG91YmxlQ2xpY2tOb2RlLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8gVG9kb1xuXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dWaXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Qmx1cjogNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd09mZnNldDogbmV3IGdvLlBvaW50KDAsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Q29sb3I6ICcjMDAwMDAwMjknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IDE3MCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICdkb2RnZXJibHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IDMgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wUmlnaHQsIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT05MWV9ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFTEVURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdpc05vdEFjdGlvbicsICh4KSA9PiAheCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIHsgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LCBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFtEZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT05MWV9ERVRBSUxTXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICByZXR1cm4geD8uaXNPbmx5RGV0YWlscyAmJiAheD8uaXNOb3RBY3Rpb24gPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICksXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHsgd2lkdGg6IHNpemUudywgaGVpZ2h0OiBzaXplLmggfSxcbiAgICAgICAgICAgICAgICAvLyB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgIC8vICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgIC8vICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgICAgIC8vICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICAvLyB9KSxcbiAgICAgICAgICAgICAgICAvLyB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSwgdmlzaWJsZTogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNTAsIDAsIDUwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMCwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGV4dDogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QaWN0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgc2l6ZS5oIC0gNjUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoSW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUExBTlRfQ0VMTF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMCwgMywgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDE1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJDMkMyQycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgLy8gdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIC8vIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIC8vIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgLy8gdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZUVudGl0eVdpdGhkcmF3T3JEaXNjaGFyZ2UoXG4gICAgICAgIGljb24sXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7XG4gICAgICAgICAgICB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICAgICAgICAgIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgICAgICB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgbW91c2VPdmVyOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbGYuc2hvd1BvaW50KG9iaj8ucGFydD8ubG9jYXRpb24pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGlja0NvbXBvZW50LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogb2JqPy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICdkb2RnZXJibHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IDMgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wUmlnaHQsIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICd2aXNpYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbW92YWJsZScsICdtb3ZhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcblxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLncsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogc2l6ZS5oLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElOS19XQVRFUixcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlRleHRCbG9jaywgdGl0bGUsIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgc2l6ZS5oIC0gNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDAsIDMsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDBENDInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGRlZmluZSBhIHRvb2x0aXAgZm9yIGVhY2ggbm9kZSB0aGF0IGRpc3BsYXlzIHRoZSBjb2xvciBhcyB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHsgbWFyZ2luOiA0IH0sIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgKSwgLy8gZW5kIG9mIEFkb3JubWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLjUsIDgsIDApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDEsIDAuNSwgLTgsIDApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBmb3VyIG5hbWVkIHBvcnRzLCBvbmUgb24gZWFjaCBzaWRlOlxuXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICBlZGl0VGV4dEdyb3VwWm9uZShlLCBidXR0b24pIHtcbiAgICAgICAgY29uc3Qgbm9kZUdyb3VwID0gYnV0dG9uLnBhcnQuYWRvcm5lZFBhcnQ7XG4gICAgICAgIGNvbnN0IGRpYWdyYW0gPSBub2RlR3JvdXAuZGlhZ3JhbTtcbiAgICAgICAgZS5kaWFncmFtLmNvbW1hbmRIYW5kbGVyLmVkaXRUZXh0QmxvY2sobm9kZUdyb3VwLmZpbmRPYmplY3QoJ1RFWFRCTE9DSycpKTtcbiAgICB9XG5cbiAgICBlZGl0VGV4dChlLCBidXR0b24pIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuICAgICAgICBlLmRpYWdyYW0uY29tbWFuZEhhbmRsZXIuZWRpdFRleHRCbG9jayhub2RlLmZpbmRPYmplY3QoJ1RFWFRCTE9DSycpKTtcbiAgICB9XG5cbiAgICBhc3luYyBkcmFnTmV3Tm9kZShlLCBidXR0b24pIHtcbiAgICAgICAgY29uc3QgdG9vbCA9IGUuZGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2w7XG5cbiAgICAgICAgaWYgKHRvb2wuaXNCZXlvbmREcmFnU2l6ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICAgICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgICAgICAgICAgZS5kaWFncmFtLnN0YXJ0VHJhbnNhY3Rpb24oJ2J1dHRvbiBkcmFnJyk7IC8vIHNlZSBkb0RlYWN0aXZhdGUsIGJlbG93XG5cbiAgICAgICAgICAgIGNvbnN0IGZyb21ub2RlID0gYnV0dG9uLnBhcnQuYWRvcm5lZFBhcnQ7XG4gICAgICAgICAgICBjb25zdCBkaWFncmFtID0gZnJvbW5vZGUuZGlhZ3JhbTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gZGlhZ3JhbS5tb2RlbDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVkYXRhID0ge1xuICAgICAgICAgICAgICAgIC4uLm1vZGVsLmNvcHlOb2RlRGF0YShkYXRhKSxcbiAgICAgICAgICAgICAgICBrZXk6IFV0aWxzU2VydmljZS5nZW5lcmF0ZVVVSUQoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtb2RlbC5hZGROb2RlRGF0YShub2RlZGF0YSk7XG4gICAgICAgICAgICBjb25zdCBuZXdub2RlID0gZGlhZ3JhbS5maW5kTm9kZUZvckRhdGEobm9kZWRhdGEpO1xuICAgICAgICAgICAgY29uc3QgbGlua2RhdGEgPSBtb2RlbC5jb3B5TGlua0RhdGEoe30pO1xuICAgICAgICAgICAgbW9kZWwuc2V0RnJvbUtleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShmcm9tbm9kZS5kYXRhKSk7XG4gICAgICAgICAgICBtb2RlbC5zZXRUb0tleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShuZXdub2RlLmRhdGEpKTtcbiAgICAgICAgICAgIG1vZGVsLmFkZExpbmtEYXRhKGxpbmtkYXRhKTtcbiAgICAgICAgICAgIGRpYWdyYW0uc2VsZWN0KG5ld25vZGUpO1xuICAgICAgICAgICAgLy8gICB0aGlzLmNyZWF0ZU5vZGVBbmRMaW5rKGRhdGEsIGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0KTtcblxuICAgICAgICAgICAgbmV3bm9kZS5sb2NhdGlvbiA9IGUuZGlhZ3JhbS5sYXN0SW5wdXQuZG9jdW1lbnRQb2ludDtcbiAgICAgICAgICAgIC8vIGRvbid0IGNvbW1pdFRyYW5zYWN0aW9uIGhlcmUsIGJ1dCBpbiB0b29sLmRvRGVhY3RpdmF0ZSwgYWZ0ZXIgZHJhZyBvcGVyYXRpb24gZmluaXNoZWRcbiAgICAgICAgICAgIC8vIHNldCB0b29sLmN1cnJlbnRQYXJ0IHRvIGEgc2VsZWN0ZWQgbW92YWJsZSBQYXJ0IGFuZCB0aGVuIGFjdGl2YXRlIHRoZSBEcmFnZ2luZ1Rvb2xcbiAgICAgICAgICAgIHRvb2wuY3VycmVudFBhcnQgPSBuZXdub2RlO1xuICAgICAgICAgICAgZS5kaWFncmFtLmN1cnJlbnRUb29sID0gdG9vbDtcbiAgICAgICAgICAgIHRvb2wuZG9BY3RpdmF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkSXRlbU9uR3JvdXBab25lKGUsIGJ1dHRvbikge1xuICAgICAgICBjb25zdCBkYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgICAgIGUuZGlhZ3JhbS5zdGFydFRyYW5zYWN0aW9uKCdBZGQgSXRlbSBPbiBHcm91cCBab25lJyk7XG4gICAgICAgIGNvbnN0IGZyb21ub2RlID0gYnV0dG9uLnBhcnQuYWRvcm5lZFBhcnQ7XG4gICAgICAgIGNvbnN0IGRyYWdEYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICAgICAgY29uc3QgZGlhZ3JhbSA9IGZyb21ub2RlLmRpYWdyYW07XG4gICAgICAgIGNvbnN0IG1vZGVsID0gZGlhZ3JhbS5tb2RlbDtcbiAgICAgICAgY29uc3Qgbm9kZWRhdGEgPSBtb2RlbC5jb3B5Tm9kZURhdGEoZHJhZ0RhdGEpO1xuICAgICAgICBtb2RlbC5hZGROb2RlRGF0YSh7XG4gICAgICAgICAgICAuLi5ub2RlZGF0YSxcbiAgICAgICAgICAgIHR5cGU6ICdTdWJTeXN0ZW0nLFxuICAgICAgICAgICAgbmFtZTogJ1tUaXRsZS4uLl0nLFxuICAgICAgICAgICAgbmFtZUl0ZW06ICdbTmFtZS4uLl0nLFxuICAgICAgICAgICAgZ3JvdXA6IGZyb21ub2RlPy5vYj8ua2V5LFxuICAgICAgICB9KTtcbiAgICAgICAgZS5kaWFncmFtLmNvbW1pdFRyYW5zYWN0aW9uKCdBZGQgSXRlbSBPbiBHcm91cCBab25lJyk7XG4gICAgICAgIC8vIGNvbnN0IG5ld25vZGUgPSBkaWFncmFtLmZpbmROb2RlRm9yRGF0YShub2RlZGF0YSk7XG4gICAgICAgIC8vIGNvbnN0IGxpbmtkYXRhID0gbW9kZWwuY29weUxpbmtEYXRhKHt9KTtcbiAgICAgICAgLy8gbW9kZWwuc2V0RnJvbUtleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShmcm9tbm9kZS5kYXRhKSk7XG4gICAgICAgIC8vIG1vZGVsLnNldFRvS2V5Rm9yTGlua0RhdGEobGlua2RhdGEsIG1vZGVsLmdldEtleUZvck5vZGVEYXRhKG5ld25vZGUuZGF0YSkpO1xuICAgICAgICAvLyBtb2RlbC5hZGRMaW5rRGF0YShsaW5rZGF0YSk7XG4gICAgICAgIC8vIGRpYWdyYW0uc2VsZWN0KG5ld25vZGUpO1xuXG4gICAgICAgIC8vIG5ld25vZGUubG9jYXRpb24gPSBuZXcgZ28uUG9pbnQoZnJvbW5vZGUubG9jYXRpb24ueCArIDIwMCwgZnJvbW5vZGUubG9jYXRpb24ueSk7XG4gICAgICAgIC8vIGUuZGlhZ3JhbS5jb21taXRUcmFuc2FjdGlvbignQ3JlYXRlIE5vZGUgYW5kIExpbmsnKTtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZUFjdGlvbkdyb3VwKGFjdGlvbnM6IEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OU1tdKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy4kKFxuICAgICAgICAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBY3Rpb25zID0gXy5maWx0ZXIob2JqLnBhcnQ/Llsnb2InXT8uYWN0aW9ucyA/PyBhY3Rpb25zLCAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgSW5zaWdodCBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09IEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5JTlNJR0hUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhb2JqLnBhcnQ/Llsnb2InXT8uaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnBhcnQ/Llsnb2InXT8udHlwZSAhPT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX0NPTVBPTkVOVF9XQVRFUj8uaW5jbHVkZXMob2JqLnBhcnQ/Llsnb2InXT8uc3lzdGVtVHlwZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoucGFydD8uWydvYiddPy50b3BvbG9neVR5cGUgIT09IEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUuV0FURVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoucGFydD8uWydvYiddPy50b3BvbG9neVR5cGUgIT09IEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUuV0FURVJfUExBTlRfQ0VMTFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9PT0gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1cgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsYW50U2F0dXMgPT09IEFUT19FUGxhbnRUeXBlLkJBU0lDX1BMQU5UICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnBhcnQ/LmRhdGE/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX05PREVcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9fRUNPTVBPTkVOVF9QTEFOVF9UWVBFLlNURUFNID09PSBvYmoucGFydD8uWydvYiddPy50b3BvbG9neVR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID09PSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuSU5TSUdIVFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5EQVRBX01BUFBJTkc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9PT0gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMUyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8ucGFydD8uWydvYiddPy5zeXN0ZW1UeXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9UWVBFUy5DT09MSU5HX1RPV0VSXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMU19BTkRfV0laQVJEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFjdGlvbnMgPSBmaWx0ZXJlZEFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvbkNsaWNrRm4gPSAoKSA9PiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuSU5TSUdIVDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5EQVRBX01BUFBJTkc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuSW5zaWdodE1hcHBpbmcuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogb2JqLnBhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVUQUlMUzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5GTE9XX0RFVEFJTFM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuRkxPV19ERVRBSUxTX0FORF9XSVpBUkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuRGV0YWlsLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG9iai5wYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9OTFlfREVUQUlMUzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbk9wZW5EZXRhaWwuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogb2JqLnBhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuQVNTRVRfUEFSQU1FVEVSUzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbk9wZW5Bc3NldFBhcmFtZXRlci5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBvYmoucGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoucGFydD8uZGF0YT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25SZW5hbWUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCAtIDUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ub2JqLnBhcnQ/LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGF5b3V0U2VydmljZS5zZXRUb29sVGlwQ29tcG9uZW50RGF0YVN0YXRpYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbXBvbmVudDogUmVuYW1lQm94Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggLSA1MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgLi4ub2JqLnBhcnQ/LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWRpdFRleHQoZSwgb2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT1VURkxPVzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGlja05ld05vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLm1lcmdlKG9iaiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Nb3ZlOiBzZWxmLmRyYWdOZXdOb2RlLCAvLyBkZWZpbmVkIGJlbG93LCB0byBzdXBwb3J0IGRyYWdnaW5nIGZyb20gdGhlIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZHJhZ0RhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuQUNUSU9OX1JJR0hUX01FTlVfR1JPVVAuREFUQV9CT1hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XyR7bW9tZW50KCkudmFsdWVPZigpfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNlbGYuc2V0UHJvRk9yTmV3Tm9kZShzZWxmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFTEVURTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVOb2RlKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbk9wZW5DaGFuZ2VJY29uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG9iai5wYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5BdG9EZWZhdWx0R29qc0VkaXRvci5BQ1RJT05TW2FjdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub3BlbkFjdGlvbk1lbnUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdCdXR0b25Cb3JkZXIuc3Ryb2tlV2lkdGgnOiAwLFxuICAgICAgICAgICAgICAgICdCdXR0b25Cb3JkZXIuZmlsbCc6ICd3aGl0ZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnaXNOb3REcmFnTmV3Tm9kZScsICh4KSA9PiAheCksXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdpc05vdERlbGV0ZScsICh4KSA9PiAheCksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdpc05vdEFjdGlvbicsICh4KSA9PiAheCksXG4gICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgIHRleHQ6ICdcXHVlNDg5JyxcbiAgICAgICAgICAgICAgICBmb250OiAnMjBweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIHNldFByb0ZPck5ld05vZGUoc2VsZikge1xuICAgICAgICBpZiAoc2VsZi5wbGFudFNhdHVzID09PSBBVE9fRVBsYW50VHlwZS5CQVNJQ19QTEFOVCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc05vdEFsbG93Q29ubmVjdDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGFzeW5jIGNsaWNrTmV3Tm9kZShlLCBidXR0b24pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGJ1dHRvbi5fZHJhZ0RhdGE7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgICAgICBlLmRpYWdyYW0uc3RhcnRUcmFuc2FjdGlvbignQ3JlYXRlIE5vZGUgYW5kIExpbmsnKTtcbiAgICAgICAgY29uc3QgZnJvbW5vZGUgPSBidXR0b24ucGFydC5hZG9ybmVkUGFydDtcblxuICAgICAgICAvLyB0aGlzLmNyZWF0ZU5vZGVBbmRMaW5rKGJ1dHRvbi5fZHJhZ0RhdGEsIGZyb21ub2RlKTtcbiAgICAgICAgY29uc3QgZHJhZ0RhdGEgPSBidXR0b24uX2RyYWdEYXRhO1xuICAgICAgICBjb25zdCBkaWFncmFtID0gZnJvbW5vZGUuZGlhZ3JhbTtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBkaWFncmFtLm1vZGVsO1xuICAgICAgICBjb25zdCBub2RlZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLm1vZGVsLmNvcHlOb2RlRGF0YShkcmFnRGF0YSksXG4gICAgICAgICAgICBrZXk6IFV0aWxzU2VydmljZS5nZW5lcmF0ZVVVSUQoKSxcbiAgICAgICAgfTtcbiAgICAgICAgbW9kZWwuYWRkTm9kZURhdGEoe1xuICAgICAgICAgICAgLi4ubm9kZWRhdGEsXG4gICAgICAgICAgICBpc0VkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgc2hvcnRlbmVkTnVtYmVyOiAwLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YUNvbGxlY3Rpb25NZXRob2Q6IEF0b0dvanNFZGl0b3JNb2RlbC5EQVRBX0NPTExFQ1RJT05fTUVUSE9ELk1BTlVBTCxcbiAgICAgICAgICAgIGNvbG9yOiBBdG9Hb2pzRWRpdG9yTW9kZWwuQ09MT1JfQ09MTEVDVElPTl9NRVRIT0RbQXRvR29qc0VkaXRvck1vZGVsLkRBVEFfQ09MTEVDVElPTl9NRVRIT0QuTUFOVUFMXS5jb2xvcixcbiAgICAgICAgICAgIGdyb3VwOiBmcm9tbm9kZT8ub2I/Lmdyb3VwLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBuZXdub2RlID0gZGlhZ3JhbS5maW5kTm9kZUZvckRhdGEobm9kZWRhdGEpO1xuXG4gICAgICAgIGNvbnN0IGxpbmtkYXRhID0gbW9kZWwuY29weUxpbmtEYXRhKHt9KTtcbiAgICAgICAgbW9kZWwuc2V0RnJvbUtleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShmcm9tbm9kZS5kYXRhKSk7XG4gICAgICAgIG1vZGVsLnNldFRvS2V5Rm9yTGlua0RhdGEobGlua2RhdGEsIG1vZGVsLmdldEtleUZvck5vZGVEYXRhKG5ld25vZGUuZGF0YSkpO1xuICAgICAgICBtb2RlbC5hZGRMaW5rRGF0YShsaW5rZGF0YSk7XG4gICAgICAgIGRpYWdyYW0uc2VsZWN0KG5ld25vZGUpO1xuICAgICAgICBpZiAobm9kZWRhdGE/Lm1vdmFibGUgIT09IHVuZGVmaW5lZCAmJiBub2RlZGF0YT8ubW92YWJsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3bm9kZS5tb3ZhYmxlID0gbm9kZWRhdGE/Lm1vdmFibGU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdub2RlLmxvY2F0aW9uID0gbmV3IGdvLlBvaW50KFxuICAgICAgICAgICAgZnJvbW5vZGUubG9jYXRpb24ueCArIDE2MCxcbiAgICAgICAgICAgIGZyb21ub2RlLmxvY2F0aW9uLnkgKyB0aGlzLmZpbmRMb2NZRnJvbW5vZGUoZnJvbW5vZGUpICogQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQsXG4gICAgICAgICk7XG4gICAgICAgIGUuZGlhZ3JhbS5jb21taXRUcmFuc2FjdGlvbignQ3JlYXRlIE5vZGUgYW5kIExpbmsnKTtcbiAgICB9XG5cbiAgICBmaW5kTG9jWUZyb21ub2RlKGZyb21ub2RlKSB7XG4gICAgICAgIC8vIEZpbmQgbG9jYXRpb24gYXV0byByaWdodFxuICAgICAgICBjb25zdCBsb2NZRnJvbW5vZGUgPSBmcm9tbm9kZS5kYXRhPy5sb2M/LnNwbGl0KCcgJyk/LlsxXTtcbiAgICAgICAgY29uc3QgbG9jWUFscmVhZHlFeGlzdDogYW55ID0gW107XG4gICAgICAgIGZyb21ub2RlLmZpbmRMaW5rc091dE9mKCkuZWFjaChmdW5jdGlvbiAobGluaykge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IGxpbmsudG9Ob2RlO1xuICAgICAgICAgICAgaWYgKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICBsb2NZQWxyZWFkeUV4aXN0LnB1c2godGFyZ2V0Tm9kZS5kYXRhPy5sb2M/LnNwbGl0KCcgJyk/LlsxXSAtIGxvY1lGcm9tbm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgd2hpbGUgKHRoaXMuaXNFbXB0eVlMb2MobG9jWUFscmVhZHlFeGlzdCwgaSkgPT09IG51bGwgJiYgaSA8IDEwMCkge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzRW1wdHlZTG9jKGxvY1lBbHJlYWR5RXhpc3QsIGkpO1xuICAgIH1cblxuICAgIGlzRW1wdHlZTG9jKGxvY1lBbHJlYWR5RXhpc3QsIGkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIV8uc29tZShcbiAgICAgICAgICAgICAgICBsb2NZQWxyZWFkeUV4aXN0LFxuICAgICAgICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgICAgICAgICB4IDwgaSAqIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVUICsgQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgLyAyICYmXG4gICAgICAgICAgICAgICAgICAgIHggPiBpICogQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgLSBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCAvIDIsXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIV8uc29tZShcbiAgICAgICAgICAgICAgICBsb2NZQWxyZWFkeUV4aXN0LFxuICAgICAgICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgICAgICAgICB4IDwgLWkgKiBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCArIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVUIC8gMiAmJlxuICAgICAgICAgICAgICAgICAgICB4ID4gLWkgKiBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCAtIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVUIC8gMixcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gLWk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY3JlYXRlTmV3Tm9kZShuZXdub2RlKSB7XG4gICAgICAgIHRoaXMuYWRkVGVtcGxhdGUobmV3bm9kZSk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLnN0YXJ0VHJhbnNhY3Rpb24oJ2FkZCBncm91cCBub2RlJyk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm1vZGVsLmFkZE5vZGVEYXRhKG5ld25vZGUpO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5jb21taXRUcmFuc2FjdGlvbignYWRkIGdyb3VwIG5vZGUnKTtcbiAgICB9XG5cbiAgICBkZWxldGVOb2RlKGUpIHtcbiAgICAgICAgZS5kaWFncmFtLnN0YXJ0VHJhbnNhY3Rpb24oJ0RlbGV0ZSBncm91cCBub2RlJyk7XG4gICAgICAgIGUuZGlhZ3JhbS5yZW1vdmVQYXJ0cyhlLmRpYWdyYW0uc2VsZWN0aW9uKTtcbiAgICAgICAgZS5kaWFncmFtLmNvbW1pdFRyYW5zYWN0aW9uKCdEZWxldGUgZ3JvdXAgbm9kZScpO1xuICAgIH1cblxuICAgIGRlbGV0ZU5vZGVPbkRpYWdyYW0oZSkge1xuICAgICAgICBlLnN0YXJ0VHJhbnNhY3Rpb24oJ0RlbGV0ZSBncm91cCBub2RlJyk7XG4gICAgICAgIGUucmVtb3ZlUGFydHMoZS5zZWxlY3Rpb24pO1xuICAgICAgICBlLmNvbW1pdFRyYW5zYWN0aW9uKCdEZWxldGUgZ3JvdXAgbm9kZScpO1xuICAgIH1cblxuICAgIGluc2lnaHROb2RlKGUpIHt9XG5cbiAgICBkcmF3TGluayhlLCBidXR0b24pIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuICAgICAgICBjb25zdCB0b29sID0gZS5kaWFncmFtLnRvb2xNYW5hZ2VyLmxpbmtpbmdUb29sO1xuICAgICAgICB0b29sLnN0YXJ0T2JqZWN0ID0gbm9kZS5wb3J0O1xuICAgICAgICBlLmRpYWdyYW0uY3VycmVudFRvb2wgPSB0b29sO1xuICAgICAgICB0b29sLmRvQWN0aXZhdGUoKTtcbiAgICB9XG5cbiAgICBtYWtlUG9ydEdyb3VwKG5hbWUsIGFsaWduLCBzcG90LCBvdXRwdXQsIGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWwgPSBhbGlnbi5lcXVhbHMoZ28uU3BvdC5Ub3ApIHx8IGFsaWduLmVxdWFscyhnby5TcG90LkJvdHRvbSk7XG4gICAgICAgIHJldHVybiB0aGlzLiQoXG4gICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyM5MTlDQTUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiA0MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogYWxpZ24sXG4gICAgICAgICAgICAgICAgc3RyZXRjaDogaG9yaXpvbnRhbCA/IGdvLkdyYXBoT2JqZWN0Lkhvcml6b250YWwgOiBnby5HcmFwaE9iamVjdC5WZXJ0aWNhbCxcbiAgICAgICAgICAgICAgICBwb3J0SWQ6IG5hbWUsXG4gICAgICAgICAgICAgICAgZnJvbVNwb3Q6IHNwb3QsXG4gICAgICAgICAgICAgICAgZnJvbUxpbmthYmxlOiBvdXRwdXQsXG4gICAgICAgICAgICAgICAgdG9TcG90OiBzcG90LFxuICAgICAgICAgICAgICAgIHRvTGlua2FibGU6IGlucHV0LFxuICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkNlbnRlciwgLy8gdOG6rXAgdHJ1bmcgdsOgbyB0cnVuZyB0w6JtIGPhu6dhIFBhbmVsXG4gICAgICAgICAgICAgICAgLy8gbW91c2VFbnRlcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgIC8vICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAvLyAgICAgOiAoZSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgY29uc3QgdGV4dEJsb2NrID0gKHBhbmVsIGFzIGFueSk/LmZpbmRPYmplY3QoJ3RleHRCbG9jaycpIGFzIGdvLlRleHRCbG9jayB8IG51bGw7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIGlmICh0ZXh0QmxvY2spIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICYmIG91dHB1dFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGV4dEJsb2NrLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgY2FzZSAnQic6XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgY2FzZSAnUic6IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICdyZ2IoMjQzIDE0NCAxNzEpJztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGNhc2UgJ0wnOiB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAncmdiKDEwMywxNTEsMjA3KSc7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAncmdiKDI0MyAxNDQgMTcxKSc7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgICAgfSxcblxuICAgICAgICAgICAgICAgIC8vIG1vdXNlTGVhdmU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAvLyAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgLy8gICAgIDogKGUsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIGNvbnN0IHRleHRCbG9jayA9IChwYW5lbCBhcyBhbnkpLmZpbmRPYmplY3QoJ3RleHRCbG9jaycpIGFzIGdvLlRleHRCbG9jayB8IG51bGw7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIGlmICh0ZXh0QmxvY2spIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRleHRCbG9jay52aXNpYmxlID0gZmFsc2U7IC8vIOG6qG4gVGV4dEJsb2NrIGtoaSBy4budaSBraOG7j2kgUGFuZWxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgICAgICAvLyAgICAgICB9LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnRWxsaXBzZScsIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLCAvLyBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjaXJjbGVcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICBzdHJva2U6ICcjOTE5Q0E1JywgLy8gQm9yZGVyIGNvbG9yIG9mIHRoZSBjaXJjbGVcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAsIC8vIE1hdGNoIHRoZSBwYW5lbCdzIHdpZHRoXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCwgLy8gTWF0Y2ggdGhlIHBhbmVsJ3MgaGVpZ2h0XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgLy8gICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIC8vICAgICB7XG4gICAgICAgICAgICAvLyAgICAgICAgIG5hbWU6ICd0ZXh0QmxvY2snLFxuICAgICAgICAgICAgLy8gICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAvLyAgICAgICAgIHRleHQ6ICdcXHVmMGRhJywgLy8gTcOjIFVuaWNvZGUgdMawxqFuZyDhu6luZyB24bubaSBmYS1jYXJldC1sZWZ0XG4gICAgICAgICAgICAvLyAgICAgICAgIGZvbnQ6ICc5MDAgMTJweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLCAvLyDEkOG6t3QgbcOgdSBjaOG7ryB0aMOgbmggbcOgdSB0cuG6r25nXG4gICAgICAgICAgICAvLyAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgLy8gICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnLCAoXykgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2FzZSAnQic6IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdWYwZDcnO1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYXNlICdSJzoge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkYSc7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHVmMGQ3JztcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWtlUG9ydChuYW1lLCBhbGlnbiwgc3BvdCwgb3V0cHV0LCBpbnB1dCkge1xuICAgICAgICAvLyBpZiAodGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIHt9O1xuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IGhvcml6b250YWwgPSBhbGlnbi5lcXVhbHMoZ28uU3BvdC5Ub3ApIHx8IGFsaWduLmVxdWFscyhnby5TcG90LkJvdHRvbSk7XG4gICAgICAgIC8vIGNvbnN0IHZlcnRpY2FsID0gYWxpZ24uZXF1YWxzKGdvLlNwb3QuTGVmdCkgfHwgYWxpZ24uZXF1YWxzKGdvLlNwb3QuUmlnaHQpO1xuICAgICAgICAvLyB0aGUgcG9ydCBpcyBiYXNpY2FsbHkganVzdCBhIHRyYW5zcGFyZW50IHJlY3RhbmdsZSB0aGF0IHN0cmV0Y2hlcyBhbG9uZyB0aGUgc2lkZSBvZiB0aGUgbm9kZSxcbiAgICAgICAgLy8gYW5kIGJlY29tZXMgY29sb3JlZCB3aGVuIHRoZSBtb3VzZSBwYXNzZXMgb3ZlciBpdFxuICAgICAgICByZXR1cm4gdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgd2lkdGg6IGhvcml6b250YWwgPyBOYU4gOiA4LFxuICAgICAgICAgICAgICAgIGhlaWdodDogIWhvcml6b250YWwgPyBOYU4gOiA4LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogYWxpZ24sXG4gICAgICAgICAgICAgICAgc3RyZXRjaDogaG9yaXpvbnRhbCA/IGdvLkdyYXBoT2JqZWN0Lkhvcml6b250YWwgOiBnby5HcmFwaE9iamVjdC5WZXJ0aWNhbCxcbiAgICAgICAgICAgICAgICBwb3J0SWQ6IG5hbWUsXG4gICAgICAgICAgICAgICAgZnJvbVNwb3Q6IHNwb3QsXG4gICAgICAgICAgICAgICAgZnJvbUxpbmthYmxlOiBvdXRwdXQsXG4gICAgICAgICAgICAgICAgdG9TcG90OiBzcG90LFxuICAgICAgICAgICAgICAgIHRvTGlua2FibGU6IGlucHV0LFxuICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkNlbnRlciwgLy8gdOG6rXAgdHJ1bmcgdsOgbyB0cnVuZyB0w6JtIGPhu6dhIFBhbmVsXG4gICAgICAgICAgICAgICAgbW91c2VFbnRlcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiAoZSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dEJsb2NrID0gKHBhbmVsIGFzIGFueSk/LmZpbmRPYmplY3QoJ3RleHRCbG9jaycpIGFzIGdvLlRleHRCbG9jayB8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0QmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICYmIG91dHB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJsb2NrLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUic6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICdyZ2IoMjQzIDE0NCAxNzEpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0wnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAncmdiKDEwMywxNTEsMjA3KSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAncmdiKDI0MyAxNDQgMTcxKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIG1vdXNlTGVhdmU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogKGUsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRCbG9jayA9IChwYW5lbCBhcyBhbnkpLmZpbmRPYmplY3QoJ3RleHRCbG9jaycpIGFzIGdvLlRleHRCbG9jayB8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0QmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCbG9jay52aXNpYmxlID0gZmFsc2U7IC8vIOG6qG4gVGV4dEJsb2NrIGtoaSBy4budaSBraOG7j2kgUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YT8uaXNOb3RBbGxvd0Nvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF0YT8uc2VsZWN0YWJsZSA9PT0gZmFsc2UgJiYgIWRhdGE/LmlzQWxsb3dDb25uZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRhdGE/LmZsb3dPZlBsYW50Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YT8uZmxvd09mUGxhbnRDZWxsID09PSBBVE9fRU5VTV9GTE9XX0RJUkVDVElPTi5JTkZMT1cgJiYgbmFtZSA9PT0gJ0wnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YT8uZmxvd09mUGxhbnRDZWxsID09PSBBVE9fRU5VTV9GTE9XX0RJUkVDVElPTi5PVVRGTE9XICYmIG5hbWUgPT09ICdSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1InOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWRhdGE/LmlzTm90U2VsZWN0T3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdMJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFkYXRhPy5pc05vdFNlbGVjdElucHV0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAndGV4dEJsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnXFx1ZjBkYScsIC8vIE3DoyBVbmljb2RlIHTGsMahbmcg4bupbmcgduG7m2kgZmEtY2FyZXQtbGVmdFxuICAgICAgICAgICAgICAgICAgICBmb250OiAnOTAwIDEycHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJywgLy8gxJDhurd0IG3DoHUgY2jhu68gdGjDoG5oIG3DoHUgdHLhuq9uZ1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJywgKF8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0InOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHVmMGQ3JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUic6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdWYwZGEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkNyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuJChnby5TaGFwZSwge1xuICAgICAgICAvLyAgICAgZmlsbDogJ3RyYW5zcGFyZW50JywgLy8gY2hhbmdlZCB0byBhIGNvbG9yIGluIHRoZSBtb3VzZUVudGVyIGV2ZW50IGhhbmRsZXJcbiAgICAgICAgLy8gICAgIHN0cm9rZVdpZHRoOiAwLCAvLyBubyBzdHJva2VcbiAgICAgICAgLy8gICAgIHdpZHRoOiBob3Jpem9udGFsID8gTmFOIDogOCwgLy8gaWYgbm90IHN0cmV0Y2hpbmcgaG9yaXpvbnRhbGx5LCBqdXN0IDggd2lkZVxuICAgICAgICAvLyAgICAgaGVpZ2h0OiAhaG9yaXpvbnRhbCA/IE5hTiA6IDgsIC8vIGlmIG5vdCBzdHJldGNoaW5nIHZlcnRpY2FsbHksIGp1c3QgOCB0YWxsXG4gICAgICAgIC8vICAgICBhbGlnbm1lbnQ6IGFsaWduLCAvLyBhbGlnbiB0aGUgcG9ydCBvbiB0aGUgbWFpbiBTaGFwZVxuICAgICAgICAvLyAgICAgc3RyZXRjaDogaG9yaXpvbnRhbCA/IGdvLkdyYXBoT2JqZWN0Lkhvcml6b250YWwgOiBnby5HcmFwaE9iamVjdC5WZXJ0aWNhbCxcbiAgICAgICAgLy8gICAgIHBvcnRJZDogbmFtZSwgLy8gZGVjbGFyZSB0aGlzIG9iamVjdCB0byBiZSBhIFwicG9ydFwiXG4gICAgICAgIC8vICAgICBmcm9tU3BvdDogc3BvdCwgLy8gZGVjbGFyZSB3aGVyZSBsaW5rcyBtYXkgY29ubmVjdCBhdCB0aGlzIHBvcnRcbiAgICAgICAgLy8gICAgIGZyb21MaW5rYWJsZTogb3V0cHV0LCAvLyBkZWNsYXJlIHdoZXRoZXIgdGhlIHVzZXIgbWF5IGRyYXcgbGlua3MgZnJvbSBoZXJlXG4gICAgICAgIC8vICAgICB0b1Nwb3Q6IHNwb3QsIC8vIGRlY2xhcmUgd2hlcmUgbGlua3MgbWF5IGNvbm5lY3QgYXQgdGhpcyBwb3J0XG4gICAgICAgIC8vICAgICB0b0xpbmthYmxlOiBpbnB1dCwgLy8gZGVjbGFyZSB3aGV0aGVyIHRoZSB1c2VyIG1heSBkcmF3IGxpbmtzIHRvIGhlcmVcbiAgICAgICAgLy8gICAgIGN1cnNvcjogJ3BvaW50ZXInLCAvLyBzaG93IGEgZGlmZmVyZW50IGN1cnNvciB0byBpbmRpY2F0ZSBwb3RlbnRpYWwgbGluayBwb2ludFxuICAgICAgICAvLyAgICAgbW91c2VFbnRlcjogKGUsIHBvcnQpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAvLyB0aGUgUE9SVCBhcmd1bWVudCB3aWxsIGJlIHRoaXMgU2hhcGVcbiAgICAgICAgLy8gICAgICAgICBpZiAoIWUuZGlhZ3JhbS5pc1JlYWRPbmx5ICYmIG91dHB1dCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBwb3J0LmZpbGwgPSAncmdiYSgyNTUsMCwyNTUsMC41KSdcbiAgICAgICAgLy8gICAgICAgICB9O1xuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICAgIG1vdXNlTGVhdmU6IChlLCBwb3J0KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIChwb3J0LmZpbGwgPSAndHJhbnNwYXJlbnQnKTtcbiAgICAgICAgLy8gICAgIH0sXG4gICAgICAgIC8vIH0pO1xuICAgIH1cblxuICAgIG1ha2VHcm91cEJhc2ljQ29tcG9uZW50KGljb24sIHRpdGxlLCBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9KSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbGF5b3V0OiB0aGlzLiQoZ28uTGF5ZXJlZERpZ3JhcGhMYXlvdXQsIHsgZGlyZWN0aW9uOiAwIH0pLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAgICAgICAgICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyBtb3ZhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZHJhZ0NvbXB1dGF0aW9uOiAobm9kZSwgcHQsIGdyaWRwdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwdC54ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQocHQueCAvIEF0b0dvanNFZGl0b3JNb2RlbC5CQVNJQ19HUklEX1NJWkVfV0lEVEgpICpcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5CQVNJQ19HUklEX1NJWkVfV0lEVEg7XG4gICAgICAgICAgICAgICAgICAgIHB0LnkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChwdC55IC8gQXRvR29qc0VkaXRvck1vZGVsLkJBU0lDX0dSSURfU0laRV9IRUlHSFQpICpcbiAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5CQVNJQ19HUklEX1NJWkVfSEVJR0hUO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoQXRvR29qc0VkaXRvck1vZGVsLkJBU0lDX0dSSURfU0laRV9XSURUSCwgQXRvR29qc0VkaXRvck1vZGVsLkJBU0lDX0dSSURfU0laRV9IRUlHSFQpLFxuICAgICAgICAgICAgICAgIG1pblNpemU6IG5ldyBnby5TaXplKDEsIDEpLFxuICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDEsIDEpLFxuICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKDEwMCwgMTAwKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyB0aGlzLiQoZ28uUGxhY2Vob2xkZXIpLFxuICAgICAgICAgICAgICAgIC8vIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC8vIHRoaXMuJChnby5UZXh0QmxvY2ssIHRpdGxlLCB7XG4gICAgICAgICAgICAvLyAgICAgcm93OiAwLFxuICAgICAgICAgICAgLy8gICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgICAgIC8vICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgIC8vICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgLy8gICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAvLyAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAna2V5JykubWFrZVR3b1dheSgpLCksXG5cbiAgICAgICAgICAgIC8vIHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgIC8vICAgICAnVGFibGUnLFxuICAgICAgICAgICAgLy8gICAgIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcExlZnQsXG4gICAgICAgICAgICAvLyAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLCAtMTAsIC0xMCksXG4gICAgICAgICAgICAvLyAgICAgICAgIC8vIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgNTAsIDApLFxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgdGhpcy4kKFxuICAgICAgICAgICAgLy8gICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgIC8vICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgLy8gICAgICAgICB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDQwLCA0MCksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAvLyAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgY29sdW1uOiAxLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRlZmF1bHRBbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMjApLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHRpdGxlLCB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCA1LCAxMCksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMywgMywgMTApLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDQwKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzAwMEQ0MicsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmluZSBhIHRvb2x0aXAgZm9yIGVhY2ggbm9kZSB0aGF0IGRpc3BsYXlzIHRoZSBjb2xvciBhcyB0ZXh0XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHsgbWFyZ2luOiA0IH0sIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKSksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICksIC8vIGVuZCBvZiBBZG9ybm1lbnRcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgKSxcbiAgICAgICAgICAgIC8vICAgICApLFxuICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VHcm91cFRlbXBsYXRlKGljb24sIHRpdGxlLCBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9KSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIGxheW91dDogdGhpcy4kKGdvLkZvcmNlRGlyZWN0ZWRMYXlvdXQgLCB7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vICAgICBkaXJlY3Rpb246IDAsXG4gICAgICAgICAgICAgICAgLy8gICAgIC8vICAgICBzZXRzUG9ydFNwb3RzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gfSksXG5cbiAgICAgICAgICAgICAgICAvLyBsYXlvdXQ6IHRoaXMuJChnby5MYXllcmVkRGlncmFwaExheW91dCwge1xuICAgICAgICAgICAgICAgIC8vICAgICBkaXJlY3Rpb246IDAsXG4gICAgICAgICAgICAgICAgLy8gICAgIHNldHNQb3J0U3BvdHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIH0pLFxuXG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcblxuICAgICAgICAgICAgICAgIC8vIC8vICAgICAvLyBhZG9ybm1lbnQgd2hlbiBhIGdyb3VwIGlzIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgLy8gLy8gICAgIC8vIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgLy8gLy8gICAgIC8vICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICAgLy8gLy8gICAgIC8vICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgLy8gLy8gICAgIC8vICAgICB0aGlzLiQoZ28uU2hhcGUsICdSZWN0YW5nbGUnLCB7IGZpbGw6IG51bGwsIHN0cm9rZTogJ2RvZGdlcmJsdWUnLCBzdHJva2VXaWR0aDogOCB9KSxcbiAgICAgICAgICAgICAgICAvLyAvLyAgICAgLy8gICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciksXG4gICAgICAgICAgICAgICAgLy8gLy8gICAgIC8vICksXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnbGF5b3V0JywgJ2xheW91dCcsICh4KSA9PlxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiB0aGlzLiQoZ28uRm9yY2VEaXJlY3RlZExheW91dCAsIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgZGlyZWN0aW9uOiAwLFxuICAgICAgICAgICAgLy8gICAgICAgICBzZXRzUG9ydFNwb3RzOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWluU2l6ZTogbmV3IGdvLlNpemUoNDAwLCA0MDApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbig2MCwgMjAsIDIwLCAyMCkgfSksXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgICAvLyAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAvLyAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgIC8vICAgICB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BMZWZ0LFxuICAgICAgICAgICAgLy8gICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMCwgLTEwLCAtMTApLFxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgdGl0bGUsIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgLy8gICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgNSwgMyksXG4gICAgICAgICAgICAvLyAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgLy8gICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgIC8vICAgICAgICAgZm9udDogJ25vcm1hbCA4cHQgQXJpYWwnLFxuICAgICAgICAgICAgLy8gICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgIC8vICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgIC8vICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNDAsIDQwKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAgICAgLy8gICAgIHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgLy8gICAgICAgICB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDMsIDMsIDMpLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgNDApLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgc3Ryb2tlOiAnIzAwMEQ0MicsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBmb250OiAnYm9sZCA4cHQgQXJpYWwnLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgLy8gICAgICAgICB9LFxuICAgICAgICAgICAgLy8gICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgLy8gICAgICAgICB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBkZWZpbmUgYSB0b29sdGlwIGZvciBlYWNoIG5vZGUgdGhhdCBkaXNwbGF5cyB0aGUgY29sb3IgYXMgdGV4dFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKCdUb29sVGlwJywgdGhpcy4kKGdvLlRleHRCbG9jaywgeyBtYXJnaW46IDQgfSwgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpKSksIC8vIGVuZCBvZiBBZG9ybm1lbnRcbiAgICAgICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICApLFxuICAgICAgICAgICAgLy8gICAgIC8vIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgLy8gKSxcblxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAsIC0xMCwgLTEwKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCA1MCwgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNDAsIDQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAyMCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgQXRvR29qc0VkaXRvck1vZGVsLlRFTVBMQVRFX0RVUExJQ0FURVt0aXRsZV0gPz8gdGl0bGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDUsIDEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAzLCAzLCAxMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgNDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMDAwRDQyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lIGEgdG9vbHRpcCBmb3IgZWFjaCBub2RlIHRoYXQgZGlzcGxheXMgdGhlIGNvbG9yIGFzIHRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgeyBtYXJnaW46IDQgfSwgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgLy8gZW5kIG9mIEFkb3JubWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlSW1hZ2VUZW1wbGF0ZSgpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgek9yZGVyOiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhPy52aXNpYmxlID09PSAnYm9vbGVhbicgPyBkYXRhPy52aXNpYmxlIDogdHJ1ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5JTUFHRV9ST19XQVRFUl9UUkVBVE1FTlRfUEFUSCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKDUwMCwgNTAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMzAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbWFyZ2luJywgJ21hcmdpbicpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnd2lkdGgnLCAnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICdoZWlnaHQnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NvdXJjZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnNvdXJjZSA/IGRhdGE/LnNvdXJjZSA6IEF0b0dvanNFZGl0b3JNb2RlbC5JTUFHRV9ST19XQVRFUl9UUkVBVE1FTlRfUEFUSDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklNQUdFX1RFTVBMQVRFLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlUGFyYW1UYWJsZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5QYXJ0LFxuICAgICAgICAgICAgJ1ZlcnRpY2FsJyxcbiAgICAgICAgICAgIC8vIHRoaXMuJChnby5TaGFwZSwgeyBmaWxsOiAnI0U2RjBGNycsIHN0cm9rZTogJyMwMDYzQTknLCBzdHJva2VXaWR0aDogMywgZ2VvbWV0cnlTdHJpbmc6ICdNIDUgMCBMIDk1IDAgUSAxMDAgMCAxMDAgNSBMIDEwMCA5NSBRIDEwMCAxMDAgOTUgMTAwIEwgNSAxMDAgUSAwIDEwMCAwIDk1IEwgMCA1IFEgMCAwIDUgMCcgIH0pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHpPcmRlcjogMixcbiAgICAgICAgICAgICAgICAvLyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDIwMCksXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygncGFkZGluZycsICdwYWRkaW5nJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhPy52aXNpYmxlID09PSAnYm9vbGVhbicgPyBkYXRhPy52aXNpYmxlIDogdHJ1ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gSGVhZGVyXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuRmlsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluU2l6ZTogbmV3IGdvLlNpemUoTmFOLCAyNyksXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAtNiwgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSkgPT4gISFkYXRhPy50aXRsZSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5TaGFwZSxcbiAgICAgICAgICAgICAgICAgICAgJ1JvdW5kZWRSZWN0YW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIxOiA1LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZmlsbCcsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LkZpbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDE0cHggc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3RpdGxlJyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy50aXRsZVRleHRDb2xvciB8fCAnd2hpdGUnO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5TaGFwZSxcbiAgICAgICAgICAgICAgICAnUmVjdGFuZ2xlJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNixcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIC02LCAwKSxcbiAgICAgICAgICAgICAgICAgICAgc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuRmlsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmaWxsJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5jb2xvcjtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5jb2xvcjtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSkgPT4gISFkYXRhPy50aXRsZSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAgICAgICAgICAgICAnUm91bmRlZFJlY3RhbmdsZScsXG4gICAgICAgICAgICAgICAgICAgIHsgZmlsbDogJyNFNkYwRjcnLCBzdHJva2U6ICcjMDA2M0E5Jywgc3Ryb2tlV2lkdGg6IDQsIHBhcmFtZXRlcjE6IDUgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZpbGwnLCAnYmdDb2xvcicpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJ2JvcmRlclRhYmxlJyksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZGVmYXVsdHMgZm9yIGFsbCByb3dzIGFuZCBjb2x1bW5zOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Um93U2VwYXJhdG9yU3Ryb2tlOiAnIzAwNjJBOScsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sdW1uU2VwYXJhdG9yU3Ryb2tlOiAnIzAwNjJBOScsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U2VwYXJhdG9yUGFkZGluZzogbmV3IGdvLk1hcmdpbig1LCAyLCA1LCAyKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2RlZmF1bHRSb3dTZXBhcmF0b3JTdHJva2UnLCAnYm9yZGVyVGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2RlZmF1bHRDb2x1bW5TZXBhcmF0b3JTdHJva2UnLCAnYm9yZGVyVGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAnVGFibGVSb3cnLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgeyByb3c6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdyb3cgMSBjb2wgMScsIHsgY29sdW1uOiAwLCBtYXJnaW46IDIgfSksXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAncm93IDEgY29sIDInLCB7IGNvbHVtbjogMSwgbWFyZ2luOiAyIH0pLFxuICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICdUYWJsZVJvdycsXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB7IHJvdzogMSB9LFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgJ3JvdyAyIGNvbCAxJywgeyBjb2x1bW46IDAsIG1hcmdpbjogMiB9KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdyb3cgMiBjb2wgMicsIHsgY29sdW1uOiAxLCBtYXJnaW46IDIgfSksXG4gICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdpdGVtQXJyYXknLCAnZGF0YVRhYmxlJyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdpdGVtQXJyYXknLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhLmRhdGFUYWJsZS5maWx0ZXIoKHgpID0+IHg/LnZpc2libGUgIT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9IGRhdGEuZGF0YVRhYmxlLmZpbHRlcigoeCkgPT4geD8udmlzaWJsZSAhPT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGE/LmlzU2hvd0RhdGFMb25naXR1ZGluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5tYXAoZGF0YVRhYmxlLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi54LCBpc09ubHlTaG93UGFyYW1OYW1lOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk/LmNvbmNhdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5tYXAoZGF0YVRhYmxlLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT25seVNob3dWYWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5TaXplVmFsdWU6IG5ldyBnby5TaXplKDE3MCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhVGFibGU7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVtVGVtcGxhdGU6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBuZXcgZ28uQmluZGluZygncm93JywgJ2luZGV4Um93JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICdoZWlnaHQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIEFSUk9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoMjAsIDQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NvdXJjZScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIHBhbmVsLnBhcnQ/LmRhdGE/LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gZGF0YT8uaXNDcmVhdGVkID8gcGFuZWw/LiRwIDogQVJST1dfR1JBWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtVGVtcGxhdGU6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFibGVSb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoucGFuZWwucGFydC5kYXRhPy5kYXRhVGFibGVbb2JqLnJvd10/LmlzRWRpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWtQYXJhbU9mVGFibGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ub2JqLnBhbmVsLnBhcnQuZGF0YT8uZGF0YVRhYmxlW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoucGFuZWwucGFydC5kYXRhPy5pc1Nob3dEYXRhTG9uZ2l0dWRpbmFsID8gMCA6IG9iai5yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/Lm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21heFNpemUnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8ubWF4U2l6ZU5hbWVQYXJhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdkZXNpcmVkU2l6ZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmRlc2lyZWRTaXplTmFtZVBhcmFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWRhdGE/LmlzT25seVNob3dWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNlcGFyYXRvclBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5GaWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoMTcwLCAxNSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFkYXRhPy5pc09ubHlTaG93UGFyYW1OYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2NvbHVtbicsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5pc09ubHlTaG93VmFsdWUgPyAwIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdtaW5TaXplJywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/Lm1pblNpemVWYWx1ZSA/PyBuZXcgZ28uU2l6ZSg5MCwgMTQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21heFNpemUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5tYXhTaXplVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZGVzaXJlZFNpemUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5kZXNpcmVkU2l6ZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoSW5maW5pdHksIE5hTiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7ZGF0YT8udGFnTmFtZSB8fCAnJ30gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0ke2RhdGE/LnZhbHVlfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSAmJiBkYXRhPy50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWRhdGE/LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21heFNpemUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGE/LmlzUmVhZE9ubHkgJiYgIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBnby5TaXplKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT8ubWF4U2l6ZVZhbHVlPy53aWR0aCA/IGRhdGE/Lm1heFNpemVWYWx1ZT8ud2lkdGggLSAxNSA6IE5hTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE/Lm1heFNpemVWYWx1ZT8uaGVpZ2h0ID8/IE5hTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/Lm1heFNpemVWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZvbnQnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8uZm9udDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgNSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBJQ09OU19CQVNFNjRbJ3VmMDQ0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnRvb2xUaXBBY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEpID0+ICEhZGF0YT8udG9vbFRpcEFjdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWRhdGE/LmlzUmVhZE9ubHkgJiYgIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdvcGFjaXR5JywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5pc0VkaXRhYmxlID09PSBmYWxzZSA/IDAuNiA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUEFSQU1fVEFCTEUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VNYXNzQmFsYW5jZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5QYXJ0LFxuICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgLy8gU2V0IGRlZmF1bHRzIGZvciBhbGwgcm93cyBhbmQgY29sdW1uczpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDQsXG4gICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDQ1MCwgMzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAndG9vbHRpcCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3Zpc2libGUnKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCA1LCAwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdNYXNzIEJhbGFuY2U6JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZvbnQnLCAnZm9udCcpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5BTElaQVJJTixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZvbnQnLCAnZm9udCcpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJ2NvbG9yVmFsdWUnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5NQVNTX0JBTEFOQ0UsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VHcm91cFJPUGxhbnRUZW1wbGF0ZShpY29uLCB0aXRsZSwgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiA4MCwgaDogODAgfSkge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkdyb3VwLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKE5hTiwgNjAwKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnVGFibGUnLFxuXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NIQVBFX0tFWScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI0ZDRkNGRCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigxNSwgMCwgMCwgMCkgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgIFJPX0xJTkVfRElSVFksXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA4KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4Py5pc1ZpZXdHZW5lcmFsICYmIHg/Lmhhc091dEZsb3cgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdUYWJsZScsIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAyMTgpLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgLy8gc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVmVydGljYWwsXG4gICAgICAgICAgICAgICAgcG9ydElkOiAnSW5mbG93JyxcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMTUwKSxcbiAgICAgICAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgIHRvU3BvdDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b0xpbmthYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdUYWJsZScsIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAxMDI1LCAzMDUpLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICBwb3J0SWQ6ICdPdXRGbG93X0NsZWFuJyxcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgdG9TcG90OiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAsIDQ4MCwgNTI1KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCA0NzUsIDU1MiksXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgcG9ydElkOiAnT3V0Rmxvd19EaXJ0eScsXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIHRvU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdhbGlnbm1lbnQnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVmlld0dlbmVyYWwgJiYgeD8uaGFzT3V0Rmxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgZ28uU3BvdCgwLCAwLCA1MDUsIDUwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IGdvLlNwb3QoMCwgMCwgNDgwLCA1MjUpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZUdyb3VwQm9pbGVyVGVtcGxhdGUoaWNvbiwgdGl0bGUsIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODAsIGg6IDgwIH0pIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Hcm91cCxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoTmFOLCA2MDApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NIQVBFX0tFWScsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjRkNGQ0ZEJyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdTcG90Jywge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAuNSwgMCwgMTEyKSxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgIHBvcnRJZDogJ0luZmxvdycsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgxLCAxLCAtMjE1LCAwKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgT1VURkxPV19MSU5FX0RJUlRZLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVmlld0dlbmVyYWwgJiYgeD8uaGFzT3V0RmxvdyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkJvdHRvbUxlZnQsXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgcG9ydElkOiAnT3V0RmxvdycsXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VHcm91cENvb2xpbmdUb3dlclRlbXBsYXRlKGljb24sIHRpdGxlLCBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9KSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDMwLCAwLCAwKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0hBUEVfS0VZJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJyNGQ0ZDRkQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1RhYmxlJywge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAsIDAsIDUzMyksXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgIHBvcnRJZDogJ0luZmxvdycsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLjUsIDEsIDIzLCAwKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgT1VURkxPV19MSU5FX0RJUlRZLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVmlld0dlbmVyYWwgJiYgeD8uaGFzT3V0RmxvdyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAxOCksXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgcG9ydElkOiAnT3V0RmxvdycsXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHRvU3BvdDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0b0xpbmthYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZUdyb3VwSW1tZXJzZWRVRlRlbXBsYXRlKGljb24sIHRpdGxlLCBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9KSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoTmFOLCA2MDApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICAvLyAgIHJldHVybiB4Py5zZWxlY3RhYmxlO1xuICAgICAgICAgICAgLy8gfSksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0hBUEVfS0VZJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJyNGQ0ZDRkQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMzIwKSxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBwb3J0SWQ6ICdJbmZsb3cnLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgdG9TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdhbGlnbm1lbnQnLCAnJywgKHgpID0+IHg/LltBVE9fU1BPVF9MT0NBVElPTl9UWVBFLlNQT1RfSU5GTE9XXSksXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMzIwKSxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBwb3J0SWQ6ICdPdXRGbG93X0NsZWFuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGZyb21TcG90OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAvLyB0b1Nwb3Q6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdhbGlnbm1lbnQnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LltBVE9fU1BPVF9MT0NBVElPTl9UWVBFLlNQT1RfT1VURkxPV107XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlR3JvdXBJbW1lcnNlZFVGVGVtcGxhdGUoXG4gICAgLy8gICBpY29uLFxuICAgIC8vICAgdGl0bGUsXG4gICAgLy8gICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9XG4gICAgLy8gKSB7XG4gICAgLy8gICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAvLyAgICAgZ28uR3JvdXAsXG4gICAgLy8gICAgICdTcG90JyxcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgIC8vICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG4gICAgLy8gICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAzMCwgMCwgMCksXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShcbiAgICAvLyAgICAgICBnby5Qb2ludC5zdHJpbmdpZnlcbiAgICAvLyAgICAgKSxcbiAgICAvLyAgICAgdGhpcy4kKFxuICAgIC8vICAgICAgIGdvLlBhbmVsLFxuICAgIC8vICAgICAgICdBdXRvJyxcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICByb3c6IDAsXG4gICAgLy8gICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgIC8vICAgICAgIH0sXG4gICAgLy8gICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAvLyAgICAgICAgIG5hbWU6ICdTSEFQRV9LRVknLFxuICAgIC8vICAgICAgICAgZmlsbDogJyNGQ0ZDRkQnLFxuICAgIC8vICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgIC8vICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgLy8gICAgICAgICBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAvLyAgICAgICB9KSxcblxuICAgIC8vICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApIH0pXG4gICAgLy8gICAgICksXG4gICAgLy8gICAgIHRoaXMuJChnby5QYW5lbCwgJ1RhYmxlJywge1xuICAgIC8vICAgICAgIHdpZHRoOiAwLFxuICAgIC8vICAgICAgIGhlaWdodDogMCxcbiAgICAvLyAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAsIDAsIDM0MCksXG4gICAgLy8gICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgIC8vICAgICAgIHBvcnRJZDogJ0luZmxvdycsXG4gICAgLy8gICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgLy8gICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAvLyAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAvLyAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgLy8gICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgfSksXG4gICAgLy8gICAgIHRoaXMuJChcbiAgICAvLyAgICAgICBnby5QYW5lbCxcbiAgICAvLyAgICAgICAnU3BvdCcsXG4gICAgLy8gICAgICAge1xuICAgIC8vICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuVG9wLFxuICAgIC8vICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAwKSxcbiAgICAvLyAgICAgICB9LFxuICAgIC8vICAgICAgIC8vIHRoaXMuJChcbiAgICAvLyAgICAgICAvLyAgIGdvLlBpY3R1cmUsXG4gICAgLy8gICAgICAgLy8gICBPVVRGTE9XX0xJTkVfRElSVFksXG4gICAgLy8gICAgICAgLy8gICB7XG4gICAgLy8gICAgICAgLy8gICAgIHdpZHRoOiAxMCxcbiAgICAvLyAgICAgICAvLyAgICAgaGVpZ2h0OiAyMCxcbiAgICAvLyAgICAgICAvLyAgIH0sXG4gICAgLy8gICAgICAgLy8gICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoeCkgPT4ge1xuICAgIC8vICAgICAgIC8vICAgICByZXR1cm4geD8uaXNWaWV3R2VuZXJhbCAmJiB4Py5oYXNPdXRGbG93ID8gdHJ1ZSA6IGZhbHNlO1xuICAgIC8vICAgICAgIC8vICAgfSlcbiAgICAvLyAgICAgICAvLyApLFxuICAgIC8vICAgICAgIHRoaXMuJChnby5QYW5lbCwge1xuICAgIC8vICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAtNTApLFxuICAgIC8vICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuVG9wLFxuICAgIC8vICAgICAgICAgcG9ydElkOiAnT3V0RmxvdycsXG4gICAgLy8gICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAvLyAgICAgICAgIGZyb21TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAvLyAgICAgICAgIHRvU3BvdDogZ28uU3BvdC5SaWdodCxcbiAgICAvLyAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgLy8gICAgICAgfSlcbiAgICAvLyAgICAgKVxuICAgIC8vICAgKTtcblxuICAgIC8vICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIC8vIH1cblxuICAgIGdyb3VwUGxhbnRDZWxsVGVtcGxhdGUoaWNvbiwgdGl0bGUsIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODAsIGg6IDgwIH0pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAgICAgICAgICAgICAvLyBsYXlvdXQ6IHRoaXMuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSksXG4gICAgICAgICAgICAgICAgLy8gaXNTdWJHcmFwaEV4cGFuZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIC8vIGxheWVyTmFtZTogJ0ZvcmVncm91bmQnLFxuICAgICAgICAgICAgICAgIC8vIHdhc1N1YkdyYXBoRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGF2b2lkYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gcmVzaXphYmxlOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgLy8gcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyB3aWR0aDogZGF0YT8ub2I/Lm1pbldpdGggPz8gNTAsXG4gICAgICAgICAgICAgICAgLy8gaGVpZ2h0OiA1MDAsXG5cbiAgICAgICAgICAgICAgICAvLyBpc1N1YkdyYXBoRXhwYW5kZWQ6IHRydWUsIC8vIGVuc3VyZSB0aGUgZ3JvdXAgaXMgYWx3YXlzIGV4cGFuZGVkXG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZXNCb3VuZHNBZnRlckRyYWc6IHRydWUsXG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlc0RyYWdEcm9wRm9yTWVtYmVyczogdHJ1ZSwgLy8gaGFuZGxlIGRyYWctYW5kLWRyb3AgZXZlbnRzIGZvciBpdHMgbWVtYmVyIG5vZGVzXG5cbiAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZSg1MDAsIDUwMCksXG4gICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoNTAwLCA1MDApLFxuXG4gICAgICAgICAgICAgICAgLy8gaXNTdWJHcmFwaEV4cGFuZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIGxheWVyTmFtZTogRElBR1JBTS5MQVlFUlMuQkFDS0dST1VORCxcblxuICAgICAgICAgICAgICAgIC8vIG1vdXNlRHJvcDogZnVuY3Rpb24gKGUsIGdycCkge1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyBkaXNhbGxvdyBkcm9wcGluZyBhbnl0aGluZyBvbnRvIGFuIEFkb3JubWVudFxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoZ3JwIGluc3RhbmNlb2YgZ28uQWRvcm5tZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAvLyBkcmFnQ29tcHV0YXRpb246IGZ1bmN0aW9uIChub2RlLCBwdCwgZ3JpZFB0KSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBncnAgPSBub2RlLmNvbnRhaW5pbmdHcm91cDtcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGdycCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgbGV0IHJlY3QgPSBncnAuYWN0dWFsQm91bmRzO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcHQueCA9IE1hdGgubWF4KHJlY3QubGVmdCwgTWF0aC5taW4ocHQueCwgcmVjdC5yaWdodCkpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcHQueSA9IE1hdGgubWF4KHJlY3QudG9wLCBNYXRoLm1pbihwdC55LCByZWN0LmJvdHRvbSkpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBwdDtcbiAgICAgICAgICAgICAgICAvLyB9LFxuXG4gICAgICAgICAgICAgICAgLy8gZHJvcENvbXB1dGF0aW9uOiBmdW5jdGlvbiAobm9kZSwgcHQsIGdyaWRQdCkge1xuICAgICAgICAgICAgICAgIC8vICAgICBsZXQgZ3JwID0gbm9kZS5jb250YWluaW5nR3JvdXA7XG4gICAgICAgICAgICAgICAgLy8gICAgIGlmIChncnAgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGxldCByZWN0ID0gZ3JwLmFjdHVhbEJvdW5kcztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHB0LnggPSBNYXRoLm1heChyZWN0LmxlZnQsIE1hdGgubWluKHB0LngsIHJlY3QucmlnaHQpKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHB0LnkgPSBNYXRoLm1heChyZWN0LnRvcCwgTWF0aC5taW4ocHQueSwgcmVjdC5ib3R0b20pKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gcHQ7XG4gICAgICAgICAgICAgICAgLy8gfSxcblxuICAgICAgICAgICAgICAgIC8vIGRyYWdDb21wdXRhdGlvbjogZnVuY3Rpb24gKHBhcnQsIHB0LCBncmlkcHQpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gR2V0IHRoZSBjdXJyZW50IGdyb3VwJ3MgYWN0dWFsIGJvdW5kc1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBncnAgPSBwYXJ0LmNvbnRhaW5pbmdHcm91cDtcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGdycCkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgYm5kcyA9IGdycC5hY3R1YWxCb3VuZHM7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBsb2MgPSBwYXJ0LmxvY2F0aW9uO1xuXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAvLyBTZWUgaWYgdGhlIHBhcnQncyBuZXcgbG9jYXRpb24gd291bGQgYmUgb3V0IG9mIGJvdW5kc1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgbmV3eCA9IE1hdGgubWF4KGJuZHMueCwgTWF0aC5taW4ocHQueCwgYm5kcy5yaWdodCAtIHBhcnQuYWN0dWFsQm91bmRzLndpZHRoIC8gMikpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgbmV3eSA9IE1hdGgubWF4KGJuZHMueSwgTWF0aC5taW4ocHQueSwgYm5kcy5ib3R0b20gLSBwYXJ0LmFjdHVhbEJvdW5kcy5oZWlnaHQgLyAyKSk7XG5cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIC8vIE1vZGlmeSB0aGUgcmVzdWx0IHBvaW50IHRvIGtlZXAgdGhlIFBhcnQgaW5zaWRlIHRoZSBHcm91cFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIG5ldyBnby5Qb2ludChuZXd4LCBuZXd5KTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gcHQ7XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubXlEaWFncmFtPy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG1vdXNlRHJhZ0VudGVyOiAoZSwgIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgLy8gbW91c2VEcm9wOiAoZSwgIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgLy8gbW91c2VFbnRlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgLy8gICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdCh7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gbGV0IHNoYXBlID0gKG5vZGUgYXMgYW55KT8uZmluZE9iamVjdCgnU0hBUEVfS0VZJyk7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIGlmIChzaGFwZSkge1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyAgICAgc2hhcGUuc3Ryb2tlID0gJ2JsdWUnO1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyB9XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAvLyBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gbGV0IHNoYXBlID0gKG5vZGUgYXMgYW55KT8uZmluZE9iamVjdCgnU0hBUEVfS0VZJyk7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIGlmIChzaGFwZSkge1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyAgICAgc2hhcGUuc3Ryb2tlID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLldISVRFO1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyB9XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbGF5b3V0JywgJycsIGZ1bmN0aW9uIChkYXRhLCBub2RlKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGE/LmxheW91dFZhbHVlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MQVlPVVRfRURJVE9SLkFVVE9cbiAgICAgICAgICAgICAgICAvLyAgICAgPyBzZWxmLiQoZ28uTGF5ZXJlZERpZ3JhcGhMYXlvdXQsIHsgZGlyZWN0aW9uOiAwIH0pXG4gICAgICAgICAgICAgICAgLy8gICAgIDogbm9kZT8ubGF5b3V0O1xuICAgICAgICAgICAgICAgIGlmIChkYXRhPy5sYXlvdXRWYWx1ZSAhPT0gZGF0YT8ubGF5b3V0VmFsdWVDbG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmxheW91dFZhbHVlQ2xvbmUgPSBkYXRhPy5sYXlvdXRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmxheW91dFZhbHVlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MQVlPVVRfRURJVE9SLkFVVE9cbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLiQoZ28uTGF5b3V0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZT8ubGF5b3V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA6IHNlbGYuJChnby5MYXlvdXQpO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhPy5sYXlvdXQ7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGE/LnByZXZpb3VzTGF5b3V0IHx8IHNlbGYuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSk7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHNlbGYuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdncmlkJywgJ2dyaWQnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCd3aWR0aCcsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiBkYXRhPy5vYj8ubWluV2l0aCA/PyA1MDtcbiAgICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21pblNpemUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGdvLlNpemUoZGF0YT8ub2I/Lm1pbldpdGggPz8gNTAsIGRhdGE/Lm9iPy5taW5IZWlnaHQgPz8gNTApOyAvLyBDdXN0b21pemUgbWluU2l6ZSBiYXNlZCBvbiBkYXRhXG4gICAgICAgICAgICB9KS5vZk9iamVjdCgpLFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ3dpZHRoJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIGRhdGE/Lm9iPy5taW5XaXRoID8/IDUwOyAvLyBDdXN0b21pemUgbWluU2l6ZSBiYXNlZCBvbiBkYXRhXG4gICAgICAgICAgICAvLyB9KS5vZk9iamVjdCgpLFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiBkYXRhPy5vYj8ubWluSGVpZ2h0ID8/IDUwOyAvLyBDdXN0b21pemUgbWluU2l6ZSBiYXNlZCBvbiBkYXRhXG4gICAgICAgICAgICAvLyB9KS5vZk9iamVjdCgpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnaXNTdWJHcmFwaEV4cGFuZGVkJywgJ2V4cGFuZGVkJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbjpuZXcgZ28uTWFyZ2luKDAsIDUwLCAwLCA1MCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0hBUEVfS0VZJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCkgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIG5vZGUubWVtYmVyVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIChub2RlLCBncm91cCkge1xuICAgICAgICAvLyAgICAgaWYgKCFncm91cCkgcmV0dXJuIHRydWU7IC8vIGFsbG93IHVuZ3JvdXBpbmdcbiAgICAgICAgLy8gICAgIGNvbnN0IGdyb3VwQm91bmRzID0gZ3JvdXAuYWN0dWFsQm91bmRzO1xuICAgICAgICAvLyAgICAgY29uc3Qgbm9kZUJvdW5kcyA9IG5vZGUuYWN0dWFsQm91bmRzO1xuICAgICAgICAvLyAgICAgcmV0dXJuIGdyb3VwQm91bmRzLmNvbnRhaW5zUmVjdChub2RlQm91bmRzKTtcbiAgICAgICAgLy8gfTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIGdyb3VwUENJbnB1dE9yT3V0VGVtcGxhdGUoaWNvbiwgdGl0bGUsIHBhZGRpbmc6IGdvLk1hcmdpbikge1xuICAgICAgICAvLyBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgLy8gICAgIGdvLkdyb3VwLFxuICAgICAgICAvLyAgICAgJ1Nwb3QnLFxuICAgICAgICAvLyAgICAge1xuICAgICAgICAvLyAgICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG4gICAgICAgIC8vICAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgIC8vICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgICAgLy8ge1xuICAgICAgICAvLyAgICAgLy8gICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKDUwMCwgNTAwKSxcbiAgICAgICAgLy8gICAgIC8vICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gICAgIC8vICAgICBhcmlhUmVhZE9ubHk6IHRydWUsXG4gICAgICAgIC8vICAgICAvLyB9LFxuICAgICAgICAvLyAgICAgdGhpcy4kKFxuICAgICAgICAvLyAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAvLyAgICAgICAgICdBdXRvJyxcbiAgICAgICAgLy8gICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAvLyAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAvLyAgICAgICAgICAgICAvLyBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgIC8vICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLldISVRFLFxuICAgICAgICAvLyAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgLy8gICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgIC8vICAgICAgICAgfSksXG4gICAgICAgIC8vICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgIC8vICAgICAgICAgfSksXG4gICAgICAgIC8vICAgICApLFxuICAgICAgICAvLyApO1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkdyb3VwLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KSxcbiAgICAgICAgICAgICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhdm9pZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIGlzU3ViR3JhcGhFeHBhbmRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gaXNTdWJHcmFwaEV4cGFuZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyBsYXllck5hbWU6ICdGb3JlZ3JvdW5kJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwYWRkaW5nID8/IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5XSElURSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQUxJWkFSSU4sXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlR3JvdXBab25lVGVtcGxhdGUoXG4gICAgICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHtcbiAgICAgICAgICAgIHc6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiAxNCxcbiAgICAgICAgICAgIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgICAgICB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Hcm91cCxcbiAgICAgICAgICAgICdWZXJ0aWNhbCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uR3JpZExheW91dCwge1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGluZ0NvbHVtbjogMSxcbiAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogbmV3IGdvLlNpemUoMCwgMCksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5zaG93UG9pbnQob2JqPy5wYXJ0Py5sb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dCbHVyOiA2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93T2Zmc2V0OiBuZXcgZ28uUG9pbnQoMCwgMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogJyMwMDAwMDAyOScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICdkb2RnZXJibHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IDMgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZHJhZ0RhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX05PREUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogc2VsZi5hZGRJdGVtT25Hcm91cFpvbmUsIC8vIGRlZmluZWQgYmVsb3csIHRvIHN1cHBvcnQgYSBjbGljayBvbiB0aGUgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCdXR0b25Cb3JkZXIuc3Ryb2tlV2lkdGgnOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQnV0dG9uQm9yZGVyLmZpbGwnOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdcXHVmMDU1JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJzIwcHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMmMyYzJjJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQWN0aW9uR3JvdXAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFVEFJTFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFTEVURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIEVkaXQgVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICdCdXR0b24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgY2xpY2s6IHNlbGYuZWRpdFRleHRHcm91cFpvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICdCdXR0b25Cb3JkZXIuc3Ryb2tlV2lkdGgnOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAnQnV0dG9uQm9yZGVyLmZpbGwnOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRleHQ6ICdcXHVlMWJmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgZm9udDogJzIwcHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBzdHJva2U6ICcjMmMyYzJjJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgLy8gT3BlbiBEZXRhaWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAnQnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHNlbGYub25PcGVuRGV0YWlsLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgJ0J1dHRvbkJvcmRlci5zdHJva2VXaWR0aCc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICdCdXR0b25Cb3JkZXIuZmlsbCc6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRleHQ6ICdcXHVlNDlhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgZm9udDogJzIwcHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICF0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgPyB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBhY3Rpb25Nb3ZlOiBzZWxmLmRyYWdOZXdOb2RlLCAvLyBkZWZpbmVkIGJlbG93LCB0byBzdXBwb3J0IGRyYWdnaW5nIGZyb20gdGhlIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBfZHJhZ0RhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIHR5cGU6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX05PREUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBuYW1lOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgY29sb3I6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBjbGljazogc2VsZi5jbGlja05ld05vZGUsIC8vIGRlZmluZWQgYmVsb3csIHRvIHN1cHBvcnQgYSBjbGljayBvbiB0aGUgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICdCdXR0b25Cb3JkZXIuc3Ryb2tlV2lkdGgnOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAnQnV0dG9uQm9yZGVyLmZpbGwnOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRleHQ6ICdcXHVlMTU3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgZm9udDogJzIwcHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBzdHJva2U6ICcjMmMyYzJjJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICA6IHt9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBjbGljazogc2VsZi5kZWxldGVOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAnQnV0dG9uQm9yZGVyLnN0cm9rZVdpZHRoJzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgJ0J1dHRvbkJvcmRlci5maWxsJzogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB0ZXh0OiAnXFx1ZjJlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGZvbnQ6ICcyMHB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudywgTmFOKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigxNywgMTAsIDE2LCAxMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDUsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDI1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5OSUdIVF9SSURFUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxNnB4IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlpPTkUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2Vab25lSXRlbVRlbXBsYXRlKFxuICAgICAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7XG4gICAgICAgICAgICB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMTIsXG4gICAgICAgICAgICBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMixcbiAgICAgICAgfSxcbiAgICApIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIG1vdXNlSG92ZXI6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgICAgLy8gICAgICAgICBpZiAoKG9iaiBhcyBhbnkpLnBhcnQ/Lm9iPy52YWx1ZSA9PT0gVkFMVUVfTkEpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdCh7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54ICsgOCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBub2RlOiBub2RlXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgbW91c2VMZWF2ZTogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICBpZiAoKG9iaiBhcyBhbnkpLnBhcnQ/Lm9iPy52YWx1ZSA9PT0gVkFMVUVfTkEpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuaXNTaG93Tm9kZUluZm8gPyBzZWxmLm9uQ2xpY2tJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBub2RlOiBub2RlXG4gICAgICAgICAgICAvLyAgICAgICAgIH0pIDogbnVsbDtcbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogc2l6ZS53LFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemUuaCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJR0hUX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJTktfV0FURVIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ1ZlcnRpY2FsJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDAsIDUsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEycHggQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTklHSFRfUklERVIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICduYW1lJywgKHgpID0+ICEheCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDEwLCAwLCAxMCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCA1LCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICcxMnB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5OSUdIVF9SSURFUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc011bHRpbGluZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDEwMCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lSXRlbScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lSXRlbScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICduYW1lSXRlbScsICh4KSA9PiAhIXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNSwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnMTJweCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQ0VSVUxFQU4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnPCAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdkYXRhJywgKHgpID0+IHR5cGVvZiB4Py5xdWFudGl0eSA9PT0gJ251bWJlcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNSwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnMTJweCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQ0VSVUxFQU4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnZGF0YScsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgeD8ucXVhbnRpdHkgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkOiBhbnkgPSBVdGlsc1NlcnZpY2UuY29udmVydFByZWZpeGVzRGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeD8ucXVhbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0OiB4Py51bml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZC5zaG9ydGVuZWROdW1iZXIgKyAnICcgKyBmb3JtYXR0ZWQudW5pdFByZWZpeGVzICsgeD8udW5pdCA/PyAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdkYXRhJywgKHgpID0+IHR5cGVvZiB4Py5xdWFudGl0eSA9PT0gJ251bWJlcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCA1LCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICcxMnB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5DRVJVTEVBTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcgPicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdkYXRhJywgKHgpID0+IHR5cGVvZiB4Py5xdWFudGl0eSA9PT0gJ251bWJlcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuWk9ORV9FTkVSR1lfSVRFTSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZVNwZWNpYWxUZW1wbGF0ZShcbiAgICAgICAgaWNvbixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHtcbiAgICAgICAgICAgIHc6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgICAgICAgICAgaDogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsXG4gICAgICAgIH0sXG4gICAgKSB7XG4gICAgICAgIGxldCBub2RlOiBhbnkgPSBudWxsO1xuICAgICAgICBzd2l0Y2ggKHRpdGxlKSB7XG4gICAgICAgICAgICBjYXNlIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TUEVDSUFMX1BST0NFU1M6XG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBmcm9tU3BvdDogZ28uU3BvdC5SaWdodCwgIC8vIGNvbWluZyBvdXQgZnJvbSBtaWRkbGUtcmlnaHRcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRvU3BvdDogZ28uU3BvdC5MZWZ0XG4gICAgICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdDaXJjbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMkQzQjc3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBST0NFU1MsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgMTAsIDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg2MCwgNjApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMC41LCA4LCAwKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDEsIDAuNSwgLTgsIDApLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZm91ciBuYW1lZCBwb3J0cywgb25lIG9uIGVhY2ggc2lkZTpcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1BFQ0lBTF9TVE9SQUdFOlxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IHNpemUudywgaGVpZ2h0OiBzaXplLmggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ0NpcmNsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMyRDNCNzcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1RPUkFHRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluU2l6ZTogbmV3IGdvLlNpemUoNDAsIDQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDUwLCA1MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzb3VyY2UnLCAnaWNvbicpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvdXIgbmFtZWQgcG9ydHMsIG9uZSBvbiBlYWNoIHNpZGU6XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlNQRUNJQUxfU1RPUkU6XG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJEM0I3NycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdTdG9yZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgMTAsIDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg2MCwgNjApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlNQRUNJQUxfRElTQ0hBUkdFOlxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IHNpemUudywgaGVpZ2h0OiBzaXplLmggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ0NpcmNsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMyRDNCNzcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnRGlzY2hhcmdlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDYwLCA2MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1BFQ0lBTF9PVEhFUjpcbiAgICAgICAgICAgICAgICBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdDaXJjbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMkQzQjc3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgJ090aGVyJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDYwLCA2MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXJ0QW5pbWF0aW9uKCkge1xuICAgICAgICBjb25zdCBkaWFncmFtID0gdGhpcy5teURpYWdyYW07XG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgZGlhZ3JhbS5saW5rcy5lYWNoKChsaW5rKSA9PiB7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZHNraXBzID0gZGlhZ3JhbS5za2lwc1VuZG9NYW5hZ2VyO1xuICAgICAgICAgICAgICAgIGRpYWdyYW0uc2tpcHNVbmRvTWFuYWdlciA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBkaWFncmFtLmxpbmtzLmVhY2goKGxpbmspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSBsaW5rLmZpbmRPYmplY3QoJ1BJUEUnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhc2hhcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IG9mZiA9IHNoYXBlPy5zdHJva2VEYXNoT2Zmc2V0IC0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZiA9IHNoYXBlPy5zdHJva2VEYXNoT2Zmc2V0IC0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGUgKG1vdmUpIHRoZSBzdHJva2UgZGFzaFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUuc3Ryb2tlRGFzaE9mZnNldCA9IG9mZiA8PSAwID8gNjAgOiBvZmY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkaWFncmFtLnNraXBzVW5kb01hbmFnZXIgPSBvbGRza2lwcztcbiAgICAgICAgICAgIH0sIDYwMCk7XG4gICAgICAgICAgICAvLyA2MFxuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cblxuICAgIHN0b3BBbmltYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbkludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9EYXRhVVJMKHVybCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhyZWFkZXIucmVzdWx0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTCh4aHIucmVzcG9uc2UpO1xuICAgICAgICB9O1xuICAgICAgICB4aHIub3BlbignR0VUJywgdXJsKTtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9XG5cbiAgICBnZXRCYXNlNjREaWFncmFtV2l0aEVtcHR5RGF0YSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIC8vIFRlc3RcbiAgICAgICAgLy8gY29uc3QgbmV3V2luZG93ID0gd2luZG93Lm9wZW4oJycsICduZXdXaW5kb3cnKTtcbiAgICAgICAgLy8gaWYgKCFuZXdXaW5kb3cpIHtcbiAgICAgICAgLy8gICAgIHJldHVybjtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBjb25zdCBuZXdEb2N1bWVudCA9IG5ld1dpbmRvdz8uZG9jdW1lbnQ7XG4gICAgICAgIGlmICghdGhpcy5teURpYWdyYW0/Lm1vZGVsPy5ub2RlRGF0YUFycmF5Py5sZW5ndGggJiYgIXRoaXMubXlEaWFncmFtPy5tb2RlbD8ubGlua0RhdGFBcnJheT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdmcgPSB0aGlzLm15RGlhZ3JhbS5tYWtlU3ZnKHtcbiAgICAgICAgICAgIHNjYWxlOiB0aGlzLmRlZmF1bHRTY2FsZVpvb21Ub0ZpdCxcbiAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDEyMDAsIE5hTiksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnd2hpdGUnLFxuICAgICAgICAgICAgcGFkZGluZzogMjAsXG4gICAgICAgICAgICBlbGVtZW50RmluaXNoZWQ6IGZ1bmN0aW9uIChncmFwaE9iamVjdCwgc3ZnRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHN2Z0VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGlwLXBhdGgnKTtcbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIEltYWdlIFVSTCB0byBiYXNlNjQgLT4gRm9yIHNob3dpbmcgUGljdHVyZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgaWYgKGdyYXBoT2JqZWN0IGluc3RhbmNlb2YgZ28uUGljdHVyZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnRvRGF0YVVSTChzdmdFbGVtZW50LmhyZWYuYmFzZVZhbCwgZnVuY3Rpb24gKGRhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0VsZW1lbnQuc2V0QXR0cmlidXRlKCdocmVmJywgZGF0YVVybCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBNYWtlIFRleHQgTm9kZSBTaGFwZSBCb3JkZXJcbiAgICAgICAgICAgICAgICBpZiAoZ3JhcGhPYmplY3Q/Lm5hbWUgPT09ICd0ZXh0Tm9kZVNoYXBlJykge1xuICAgICAgICAgICAgICAgICAgICBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgJ3JnYmEoNjQsIDE4MSwgMjA2LCAwLjYpJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVtcHR5IFZhbHVlXG4gICAgICAgICAgICAgICAgaWYgKGdyYXBoT2JqZWN0Py5uYW1lID09PSAndGV4dEJsb2NrVmFsdWUnIHx8IGdyYXBoT2JqZWN0Py5uYW1lID09PSAndGV4dEJsb2NrVW5pdFByZWZpeGVzJykge1xuICAgICAgICAgICAgICAgICAgICBzdmdFbGVtZW50LnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdmdFbGVtZW50LmNsaXBQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN2Z0VsZW1lbnQuY2xpcFBhdGggPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFjazogKHN2ZykgPT4ge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdmdTdHIgPSBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHN2Zyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBUZXN0XG4gICAgICAgICAgICAgICAgICAgIC8vIG5ld0RvY3VtZW50Py5ib2R5Py5hcHBlbmRDaGlsZChzdmcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NFN2ZyA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN2Z1N0cikpKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGJhc2U2NFN2ZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdldCBjYW52YXMgY29udGV4dCBmb3IgZHJhd2luZyBvbiBjYW52YXNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZnV2lkdGggPSBpbWcud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdmdIZWlnaHQgPSBpbWcuaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSBzdmdXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBzdmdIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlNjRQTkcgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbWl0SW1hZ2VUb3BvbG9neShiYXNlNjRQTkcucmVwbGFjZSgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnLCAnJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZW1pdEltYWdlVG9wb2xvZ3koYmFzZTY0KSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tJbWFnZVRvcG9sb2d5LmVtaXQoYmFzZTY0KTtcbiAgICB9XG5cbiAgICBvcGVuQWN0aW9uTWVudSgpIHtcbiAgICAgICAgLy8gV2hlbiB0aGlzIG5vZGUgaXMgY2xpY2tlZCwgYWRqdXN0IHRoZSBtZW51IHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IG1vdXNlUHQgPSB0aGlzLm15RGlhZ3JhbS5sYXN0SW5wdXQudmlld1BvaW50O1xuICAgICAgICAvLyAvLyBXaGVuIHRoaXMgbm9kZSBpcyBjbGlja2VkLCBkaXNwbGF5IHRoZSBkcm9wZG93biBtZW51XG4gICAgICAgIGNvbnN0IG1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmFjdGlvbk1lbnVJZCk7XG4gICAgICAgIGlmIChtZW51KSB7XG4gICAgICAgICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgICAgICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gbW91c2VQdC54ICsgJ3B4JztcbiAgICAgICAgICAgIG1lbnUuc3R5bGUudG9wID0gbW91c2VQdC55ICsgJ3B4JztcblxuICAgICAgICAgICAgdGhpcy5tZW51VHJpZ2dlci5vcGVuTWVudSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3BlbkFjdGlvbk1lbnUoZGF0YToge1xuICAgIC8vICAgZTogYW55LFxuICAgIC8vICAgb2JqOiBhbnksXG4gICAgLy8gICB0eXBlPzogc3RyaW5nO1xuICAgIC8vIH0pIHtcbiAgICAvLyAgIGxldCBtb3VzZVB0ID0gdGhpcy5teURpYWdyYW0ubGFzdElucHV0LnZpZXdQb2ludDtcbiAgICAvLyAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYWN0aW9uTWVudUlkKTtcbiAgICAvLyAgIHN3aXRjaCAoZGF0YT8udHlwZSkge1xuICAgIC8vICAgICBjYXNlICdkcm9wbGlzdCc6IHtcbiAgICAvLyAgICAgICAvLyBXaGVuIHRoaXMgbm9kZSBpcyBjbGlja2VkLCBhZGp1c3QgdGhlIG1lbnUgcG9zaXRpb25cbiAgICAvLyAgICAgICBjb25zdCBidXR0b25SZWN0ID0gZGF0YT8ub2JqPy5wYXJ0Py5hY3R1YWxCb3VuZHM7XG4gICAgLy8gICAgICAgY29uc3QgZGlhZ3JhbSA9IGRhdGE/LmUuZGlhZ3JhbTtcbiAgICAvLyAgICAgICBjb25zdCBwb2ludCA9IGRpYWdyYW0udHJhbnNmb3JtRG9jVG9WaWV3KG5ldyBnby5Qb2ludChidXR0b25SZWN0Py54LCBidXR0b25SZWN0Py5ib3R0b20pKTtcbiAgICAvLyAgICAgICBtb3VzZVB0ID0ge1xuICAgIC8vICAgICAgICAgeDogcG9pbnQueCxcbiAgICAvLyAgICAgICAgIHk6IHBvaW50LnlcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICAgYnJlYWs7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgY2FzZSAnYWN0aW9uJzoge1xuICAgIC8vICAgICAgIG1vdXNlUHQgPSB0aGlzLm15RGlhZ3JhbS5sYXN0SW5wdXQudmlld1BvaW50O1xuICAgIC8vICAgICAgIHRoaXMub3B0aW9uTGlzdCA9IHRoaXMuYWN0aW9ucztcbiAgICAvLyAgICAgICB0ZW1wbGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYWN0aW9uTWVudUlkKTtcbiAgICAvLyAgICAgICBicmVhaztcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBkZWZhdWx0OiB7XG4gICAgLy8gICAgICAgbW91c2VQdCA9IHRoaXMubXlEaWFncmFtLmxhc3RJbnB1dC52aWV3UG9pbnQ7XG4gICAgLy8gICAgICAgdGhpcy5vcHRpb25MaXN0ID0gdGhpcy5hY3Rpb25zO1xuICAgIC8vICAgICAgIHRlbXBsYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hY3Rpb25NZW51SWQpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9XG4gICAgLy8gICBpZiAodGVtcGxhdGUpIHtcbiAgICAvLyAgICAgdGVtcGxhdGUuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIC8vICAgICB0ZW1wbGF0ZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgLy8gICAgIHRlbXBsYXRlLnN0eWxlLmxlZnQgPSBtb3VzZVB0LnggKyAncHgnO1xuICAgIC8vICAgICB0ZW1wbGF0ZS5zdHlsZS50b3AgPSBtb3VzZVB0LnkgKyAncHgnO1xuICAgIC8vICAgICB0aGlzLm1lbnVUcmlnZ2VyLm9wZW5NZW51KCk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgdW5zdWJzY3JpYmVBbGwoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb25MaXN0KSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25MaXN0LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uTGlzdCA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICBhZGRTdWJzY3JpYmVzKC4uLnN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbkxpc3QuYWRkKGVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yIHtcbiAgICBleHBvcnQgZW51bSBFTlVNX0FDVElPTlMge1xuICAgICAgICBERVRBSUxTID0gJ09wZW4gZGV0YWlscyAmIHdpemFyZCcsXG4gICAgICAgIE9OTFlfREVUQUlMUyA9ICdPcGVuIGRldGFpbHMnLFxuICAgICAgICBSRU5BTUUgPSAnUmVuYW1lIHRoaXMgYm94JyxcbiAgICAgICAgT1VURkxPVyA9ICdDcmVhdGUgYW4gb3V0ZmxvdycsXG4gICAgICAgIERFTEVURSA9ICdEZWxldGUnLFxuICAgICAgICBJTlNJR0hUID0gJ0luU2lnaHQgdGFnIG1hcHBpbmcnLFxuICAgICAgICBEQVRBX01BUFBJTkcgPSAnRGF0YSBNYXBwaW5nJyxcbiAgICAgICAgTU9SRSA9ICdNb3JlJyxcbiAgICAgICAgRkxPV19ERVRBSUxTID0gJ0Zsb3cgZGV0YWlscycsXG4gICAgICAgIEZMT1dfREVUQUlMU19BTkRfV0laQVJEID0gJ0Zsb3cgZGV0YWlscyAmIHdpemFyZCcsIC8vIG9ubHkgbm93IGZvciBDb29saW5nIFRvd2VyXG4gICAgICAgIEFTU0VUX1BBUkFNRVRFUlMgPSAnQXNzZXQgcGFyYW1ldGVycycsXG4gICAgICAgIENIQU5HRV9JQ09OID0gJ0NoYW5nZSBpY29uJyxcbiAgICB9XG5cbiAgICBleHBvcnQgY29uc3QgQUNUSU9OUzogYW55ID0ge1xuICAgICAgICBbRU5VTV9BQ1RJT05TLkRFVEFJTFNdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuREVUQUlMUyxcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtbWVtby1jaXJjbGUtaW5mbycsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5GTE9XX0RFVEFJTFNdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuRkxPV19ERVRBSUxTLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1hcnJvdy1wcm9ncmVzcycsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5GTE9XX0RFVEFJTFNfQU5EX1dJWkFSRF06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5GTE9XX0RFVEFJTFNfQU5EX1dJWkFSRCxcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtYXJyb3ctcHJvZ3Jlc3MnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuQVNTRVRfUEFSQU1FVEVSU106IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5BU1NFVF9QQVJBTUVURVJTLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1ib3gtYXJjaGl2ZScsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5PTkxZX0RFVEFJTFNdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuT05MWV9ERVRBSUxTLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1tZW1vLWNpcmNsZS1pbmZvJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgICBbRU5VTV9BQ1RJT05TLlJFTkFNRV06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICBpY29uQ2xhc3NOYW1lOiAnZmFyIGZhLWlucHV0LXRleHQnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuT1VURkxPV106IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1kaWFncmFtLW5lc3RlZCcsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5ERUxFVEVdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhbCBmYS10cmFzaC1jYW4nLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuSU5TSUdIVF06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5JTlNJR0hULFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS10YWcnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuREFUQV9NQVBQSU5HXToge1xuICAgICAgICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkRBVEFfTUFQUElORyxcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtdGFnJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgICBbRU5VTV9BQ1RJT05TLk1PUkVdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuTU9SRSxcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYWwgZmEtbWVtby1jaXJjbGUtaW5mbycsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTl06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTixcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtaW1hZ2UnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBESVNUQU5DRV8yX09VVFBVVCA9IDYwO1xufVxuIl19