@hailin-zheng/editor-core 1.0.49 → 1.0.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index-cjs.js CHANGED
@@ -271,7 +271,7 @@ class RenderObject {
271
271
  throw new Error('this.rect.maxWidth is null');
272
272
  }
273
273
  const { padding, margin } = this;
274
- return this.rect.maxWidth - padding.left - padding.right - margin.left - margin.bottom;
274
+ return this.rect.maxWidth - padding.left - padding.right - margin.left - margin.right;
275
275
  }
276
276
  /**
277
277
  * 根据内框内容高度,更新外框框体高度
@@ -307,33 +307,33 @@ class BranchRenderObject extends RenderObject {
307
307
  constructor(element) {
308
308
  super(element);
309
309
  }
310
- chilren = [];
310
+ children = [];
311
311
  getItems() {
312
- return this.chilren;
312
+ return this.children;
313
313
  }
314
314
  addChild(...items) {
315
315
  for (let i = 0; i < items.length; i++) {
316
316
  const item = items[i];
317
317
  item.parent = this;
318
- this.chilren.push(item);
318
+ this.children.push(item);
319
319
  }
320
320
  }
321
321
  insertChild(item, index) {
322
- this.chilren.splice(index, 0, item);
322
+ this.children.splice(index, 0, item);
323
323
  item.parent = this;
324
324
  }
325
325
  removeChild(child) {
326
- const index = this.chilren.indexOf(child);
326
+ const index = this.children.indexOf(child);
327
327
  if (index < 0) {
328
328
  throw new Error('为查找到当前元素');
329
329
  }
330
330
  if (child.parent === this) ;
331
- this.chilren.splice(index, 1);
331
+ this.children.splice(index, 1);
332
332
  }
333
333
  removeChildByIndex(index) {
334
- const child = this.chilren[index];
334
+ const child = this.children[index];
335
335
  if (child) {
336
- this.chilren.splice(index, 1);
336
+ this.children.splice(index, 1);
337
337
  //child.parent = null;
338
338
  }
339
339
  else {
@@ -341,19 +341,19 @@ class BranchRenderObject extends RenderObject {
341
341
  }
342
342
  }
343
343
  clear() {
344
- const items = [...this.chilren];
344
+ const items = [...this.children];
345
345
  for (let i = items.length - 1; i >= 0; i--) {
346
346
  this.removeChildByIndex(i);
347
347
  }
348
348
  }
349
349
  get length() {
350
- return this.chilren.length;
350
+ return this.children.length;
351
351
  }
352
352
  getChild(index) {
353
- return this.chilren[index];
353
+ return this.children[index];
354
354
  }
355
355
  getChildIndex(child) {
356
- return this.chilren.indexOf(child);
356
+ return this.children.indexOf(child);
357
357
  }
358
358
  destroy() {
359
359
  super.destroy();
@@ -363,7 +363,7 @@ class BranchRenderObject extends RenderObject {
363
363
  child.destroy();
364
364
  //this.removeChild(child);
365
365
  }
366
- this.chilren.length = 0;
366
+ this.children.length = 0;
367
367
  //this.chilren = null;
368
368
  }
369
369
  }
@@ -845,7 +845,8 @@ class EventSourceCore {
845
845
  closed = false;
846
846
  subs = [];
847
847
  next(data) {
848
- this.subs.forEach((sub) => {
848
+ const subs = [...this.subs];
849
+ subs.forEach((sub) => {
849
850
  sub.invoke(data);
850
851
  });
851
852
  }
@@ -1076,7 +1077,8 @@ class Element {
1076
1077
  beginMeasure() {
1077
1078
  this.paintRenders.length = 0;
1078
1079
  }
1079
- endMeasure() { }
1080
+ endMeasure() {
1081
+ }
1080
1082
  getIndex() {
1081
1083
  if (this.parent) {
1082
1084
  return this.parent.getChildIndex(this);
@@ -1530,6 +1532,8 @@ class ViewOptions {
1530
1532
  //留痕区域的生效时间段,同一用户的留痕块在此时间外需要生成新的留痕块
1531
1533
  trackChangePeriod = 10;
1532
1534
  onChange = new Subject();
1535
+ //打印模式,普通模式,续打模式
1536
+ printMode = 'normal';
1533
1537
  constructor() {
1534
1538
  }
1535
1539
  }
@@ -2378,16 +2382,25 @@ class ValidateProps {
2378
2382
  class DataElementGroupProps {
2379
2383
  id;
2380
2384
  name;
2385
+ hidden;
2381
2386
  clone(dest) {
2382
2387
  dest = dest ?? new DataElementGroupProps();
2383
2388
  dest.id = this.id;
2384
2389
  dest.name = this.name;
2390
+ dest.hidden = this.hidden;
2385
2391
  }
2386
2392
  getSerializeProps() {
2387
- return {
2388
- id: this.id,
2389
- name: this.name
2390
- };
2393
+ const props = {};
2394
+ if (this.id) {
2395
+ props.id = this.id;
2396
+ }
2397
+ if (this.name) {
2398
+ props.name = this.name;
2399
+ }
2400
+ if (this.hidden) {
2401
+ props.hidden = this.hidden;
2402
+ }
2403
+ return props;
2391
2404
  }
2392
2405
  }
2393
2406
  class DataElementBarcodeProps {
@@ -2895,13 +2908,25 @@ class DocumentRenderObject extends BlockContainerRenderObject {
2895
2908
  render.overlaysContext.fillRect(position.x, position.y, docWidth, this.rect.height, 'white', 5, 'black');
2896
2909
  e.render.tran(() => {
2897
2910
  e.render.contentContext.ctx.fillStyle = e.docCtx.viewOptions.defaultColor;
2911
+ this.checkPrintMode(e);
2898
2912
  e.nextRender();
2913
+ this.drawCopyRight(viewOptions, render, position);
2914
+ this.drawDocPageNum(render, viewOptions, position);
2915
+ //绘制文档边距线
2916
+ this.drawMarginLine(position, render, docWidth, docHeight);
2917
+ this.drawWatermark(render, viewOptions, position);
2899
2918
  });
2900
- this.drawCopyRight(viewOptions, render, position);
2901
- this.drawDocPageNum(render, viewOptions, position);
2902
- //绘制文档边距线
2903
- this.drawMarginLine(position, render, docWidth, docHeight);
2904
- this.drawWatermark(render, viewOptions, position);
2919
+ }
2920
+ /**
2921
+ * 打印模式检查
2922
+ * 如果是续打模式,需要进行裁剪打印范围,页眉页脚都不需要打印
2923
+ * @private
2924
+ */
2925
+ checkPrintMode(e) {
2926
+ if (e.docCtx.viewOptions.printMode === 'continuation' && this.getIndex() === 0) {
2927
+ const { x, y, width, height } = this.getChild(1).rect;
2928
+ e.render.contentContext.clip(x, y, width, height);
2929
+ }
2905
2930
  }
2906
2931
  /**
2907
2932
  * 绘制版权信息
@@ -7601,18 +7626,6 @@ class DataElementGroupElement extends InlineGroupInputElement {
7601
7626
  constructor() {
7602
7627
  super('data-group');
7603
7628
  this.props = new DataElementGroupProps();
7604
- this.addEvent('ElementContextMenu', (evt) => {
7605
- if (evt.ctx.viewOptions.devMode) {
7606
- evt.menus.push({
7607
- icon: '获取数据组值', caption: '获取数据组值', eventObj: {
7608
- onClick: () => {
7609
- const str = ElementSerialize.serializeString(this, { all: false });
7610
- alert(str);
7611
- }
7612
- }
7613
- });
7614
- }
7615
- }, true);
7616
7629
  this.addEvent('ElementMousemove', (evt) => {
7617
7630
  this.isMouseenter = true;
7618
7631
  this.refreshView();
@@ -7626,6 +7639,9 @@ class DataElementGroupElement extends InlineGroupInputElement {
7626
7639
  return super.cloneSelf(data, DataElementGroupElement);
7627
7640
  }
7628
7641
  createRenderObject(options, renderCtx) {
7642
+ if (this.props.hidden) {
7643
+ return null;
7644
+ }
7629
7645
  return new DataElementGroupRenderObject(this);
7630
7646
  }
7631
7647
  serialize(viewOptions) {
@@ -7713,6 +7729,7 @@ class DataElementGroupFactory extends DataElementBaseFactory {
7713
7729
  const ele = new DataElementGroupElement();
7714
7730
  ele.props.id = props.id;
7715
7731
  ele.props.name = props.name;
7732
+ ele.props.hidden = Boolean(props.hidden);
7716
7733
  return ele;
7717
7734
  }
7718
7735
  }
@@ -12687,6 +12704,7 @@ class DocumentEvent {
12687
12704
  return row.getChild(i - 1);
12688
12705
  }
12689
12706
  }
12707
+ return row.getChild(table.getColsCount() - 1);
12690
12708
  }
12691
12709
  return cellElement;
12692
12710
  }
@@ -13776,20 +13794,14 @@ class DocumentChange {
13776
13794
  * @returns
13777
13795
  */
13778
13796
  isInCurrentUserTrack(target, trackType) {
13779
- if (target.parent instanceof TrackRunElement && target.parent.type === trackType && target.parent.props.userId === this.viewOptions.editUser.id) {
13780
- return true;
13781
- }
13782
- return false;
13797
+ return target.parent instanceof TrackRunElement && target.parent.type === trackType && target.parent.props.userId === this.viewOptions.editUser.id;
13783
13798
  }
13784
13799
  isInTrackElement(target, trackType) {
13785
- if (target.parent instanceof TrackRunElement && target.parent.type === trackType) {
13786
- return true;
13787
- }
13788
- return false;
13800
+ return target.parent instanceof TrackRunElement && target.parent.type === trackType;
13789
13801
  }
13790
13802
  /**
13791
13803
  * 留痕除文本以外的其他元素
13792
- * @param control
13804
+ * @param target
13793
13805
  */
13794
13806
  onTrackDeleteElement(target) {
13795
13807
  const parent = target.parent;
@@ -13824,7 +13836,7 @@ class DocumentChange {
13824
13836
  if (offset === 0 && len === target.textMeasures.length) {
13825
13837
  const trackInputText = this.getNextTrackInputElement(target, exports.TrackRunTypeEnum.Deleted);
13826
13838
  trackInputText.text = target.text + trackInputText.text;
13827
- target.splice(0, target.textMeasures.length);
13839
+ target.splice(0, len);
13828
13840
  //target.remove();
13829
13841
  return;
13830
13842
  }
@@ -14048,8 +14060,11 @@ class DocumentChange {
14048
14060
  }
14049
14061
  /**
14050
14062
  * 向目标移动元素
14051
- * @param sourceElement
14063
+ * @param targetElement
14064
+ * @param targetOffset
14052
14065
  * @param moveElement
14066
+ * @param moveOffset
14067
+ * @param ss
14053
14068
  */
14054
14069
  moveElement(targetElement, targetOffset, moveElement, moveOffset, ss) {
14055
14070
  moveElement.remove();
@@ -14632,6 +14647,10 @@ function createPrintTemplate({ width, height, orient }) {
14632
14647
  font-size: 0;
14633
14648
  }
14634
14649
  @media print {
14650
+ @page {
14651
+ size: ${orient};
14652
+ margin: 0;
14653
+ }
14635
14654
  html,
14636
14655
  body {
14637
14656
  width: ${width}mm;
@@ -14950,7 +14969,7 @@ class EditorContext {
14950
14969
  this.imageLoader.clear();
14951
14970
  }
14952
14971
  /**
14953
- * 切换到行打印模式
14972
+ * 切换行打印模式
14954
14973
  */
14955
14974
  switchTextlineMode() {
14956
14975
  this.document.viewOptions.textRowLineMode = !this.document.viewOptions.textRowLineMode;
@@ -15005,8 +15024,8 @@ class DocumentContext {
15005
15024
  return this.ctx.treeFind(item => validateDataEle(item) && item['props']['name'] === name);
15006
15025
  }
15007
15026
  /**
15008
- * 获取数据元值集合
15009
- */
15027
+ * 获取数据元值集合
15028
+ */
15010
15029
  getDataElementValues() {
15011
15030
  const structList = this.getDataElementModelList();
15012
15031
  return structList.map(item => ({
@@ -15020,14 +15039,31 @@ class DocumentContext {
15020
15039
  * @returns
15021
15040
  */
15022
15041
  getDataElementModelList() {
15023
- const dataEleList = this.ctx.treeFilter(item => validateDataEle(item));
15042
+ const dataEleList = this.ctx.treeFilter(item => validateDataEle(item) || item instanceof DataElementInlineGroup);
15024
15043
  const dataInlineGroups = dataEleList.filter(item => item instanceof DataElementInlineGroup);
15025
15044
  const dataLeafs = dataEleList.filter(item => item instanceof DataElementLeaf);
15026
15045
  //复选框数据元
15027
15046
  const dataCheckList = dataLeafs.filter(item => item instanceof DataElementCheck);
15028
15047
  //除复选框之外的LeafDataElement
15029
- const dataOtherLeafValues = CommonUtil.removeUnionSet(dataLeafs, dataCheckList).map(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.field, item, getValue: () => { return item.getValue(); }, setValue: (val) => { item.setValue(val); } }));
15030
- const dataInlineStructList = dataInlineGroups.map(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => { return item.getValue(); }, setValue: (val) => { item.setValue(val); } }));
15048
+ const dataOtherLeafValues = CommonUtil.removeUnionSet(dataLeafs, dataCheckList).map(item => ({
15049
+ id: item.props.id,
15050
+ name: item.props.name,
15051
+ fieldName: item.props.field,
15052
+ item,
15053
+ getValue: () => {
15054
+ return item.getValue();
15055
+ },
15056
+ setValue: (val) => {
15057
+ item.setValue(val);
15058
+ }
15059
+ }));
15060
+ const dataInlineStructList = dataInlineGroups.map(item => ({
15061
+ id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => {
15062
+ return item.getValue();
15063
+ }, setValue: (val) => {
15064
+ item.setValue(val);
15065
+ }
15066
+ }));
15031
15067
  //复选框列表
15032
15068
  const dataCheckStructList = this.getDataCheckModelList(dataCheckList);
15033
15069
  return [...dataInlineStructList, ...dataCheckStructList, ...dataOtherLeafValues];
@@ -15083,7 +15119,18 @@ class DocumentContext {
15083
15119
  }
15084
15120
  };
15085
15121
  });
15086
- const singleCheckListValues = singleCheckList.map(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => { return item.getValue(); }, setValue: (val) => { item.setValue(val); } }));
15122
+ const singleCheckListValues = singleCheckList.map(item => ({
15123
+ id: item.props.id,
15124
+ name: item.props.name,
15125
+ fieldName: item.props.fieldName,
15126
+ item,
15127
+ getValue: () => {
15128
+ return item.getValue();
15129
+ },
15130
+ setValue: (val) => {
15131
+ item.setValue(val);
15132
+ }
15133
+ }));
15087
15134
  return [...singleCheckListValues, ...groupCheckListValues];
15088
15135
  }
15089
15136
  /**
@@ -15149,7 +15196,9 @@ class DocumentContext {
15149
15196
  let bindData = typeof data === 'string' ? JSON.parse(data) : data;
15150
15197
  if (Array.isArray(bindData)) {
15151
15198
  const obj = {};
15152
- bindData.forEach(item => { obj[item.key] = item.value; });
15199
+ bindData.forEach(item => {
15200
+ obj[item.key] = item.value;
15201
+ });
15153
15202
  bindData = obj;
15154
15203
  }
15155
15204
  const dataList = this.getDataElementModelList();
@@ -15710,125 +15759,6 @@ class ElementTrackManage {
15710
15759
  }
15711
15760
  }
15712
15761
 
15713
- /**
15714
- * 离屏打印
15715
- */
15716
- class DocumentPrintOffscreenBase {
15717
- documentPaint;
15718
- viewOptions;
15719
- docCtx;
15720
- renderCtx;
15721
- elementReader;
15722
- constructor() {
15723
- this.viewOptions = new ViewOptions();
15724
- this.viewOptions.copyRightInfo = '万达信息电子病历编辑器,www.wondersgroup.com';
15725
- this.viewOptions.showCharRect = true;
15726
- this.viewOptions.drawCharRectColor = 'green';
15727
- this.viewOptions.showLineRect = true;
15728
- this.viewOptions.docSpace = 20;
15729
- this.viewOptions.reviewWindowWidth = 200;
15730
- this.viewOptions.mmToPixelsRatio = 3.7795001220703126;
15731
- //整个画布的尺寸
15732
- this.viewOptions.viewSettings = {
15733
- width: 1000,
15734
- height: 800
15735
- };
15736
- this.viewOptions.editUser = {
15737
- id: '6666',
15738
- name: '管理员'
15739
- };
15740
- const { canvas, ctx } = this.createCanvas(200, 200);
15741
- const ss = new SelectionState();
15742
- this.docCtx = new EditorContext(ss, this.viewOptions);
15743
- this.renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);
15744
- this.documentPaint = new DocumentPaint(this.renderCtx, this.docCtx, new Map());
15745
- this.elementReader = new ElementReader(this.docCtx, this.renderCtx);
15746
- this.docCtx.syncRefresh = () => {
15747
- };
15748
- }
15749
- async print(data, ranges = null) {
15750
- await this.prepare(data);
15751
- const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
15752
- if (!canvasNodes.length) {
15753
- console.warn('无可打印页');
15754
- return;
15755
- }
15756
- const docProps = this.docCtx.document.props;
15757
- printNodes(canvasNodes, { ...docProps });
15758
- }
15759
- /**
15760
- * 获取绘制的图片,格式为Base64编码
15761
- */
15762
- async getImagesContent(data, ranges = null) {
15763
- await this.prepare(data);
15764
- const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
15765
- if (!canvasNodes.length) {
15766
- console.warn('无可导出页');
15767
- return [];
15768
- }
15769
- return canvasNodes.map(node => node.toDataURL());
15770
- }
15771
- async getPrintNodes(data, ranges = null) {
15772
- await this.prepare(data);
15773
- const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
15774
- return canvasNodes;
15775
- }
15776
- /**
15777
- * 读取数据,排版
15778
- * @param data
15779
- */
15780
- async prepare(data) {
15781
- this.elementReader.read(data);
15782
- this.documentPaint.rePages();
15783
- await Promise.all(this.docCtx.imageLoader.getLoadTasks());
15784
- const { scale, docPageSettings: { width, height } } = this.viewOptions;
15785
- this.renderCtx.update({ scale, width, height });
15786
- }
15787
- getCanvasNodes(printPages, printRanges = null) {
15788
- const { scale, docPageSettings: { width, height } } = this.viewOptions;
15789
- const canvasList = [];
15790
- for (let i = 0; i < printPages.length; i++) {
15791
- if (printRanges && printRanges.indexOf(i) === -1) {
15792
- continue;
15793
- }
15794
- const { canvas: canvasNode, ctx } = this.createCanvas(width, height);
15795
- const renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);
15796
- renderCtx.init({ width, height, scale });
15797
- renderCtx.drawMode = 'print';
15798
- const doc = printPages[i];
15799
- const tmp = ElementUtil.cloneRect(doc.rect);
15800
- doc.rect.x = 0;
15801
- doc.rect.y = 0;
15802
- ElementPaint.drawPage(renderCtx, this.docCtx, doc, { x: 0, y: 0 });
15803
- renderCtx.overlaysContext.clear();
15804
- renderCtx.mainContext.fillRect(0, 0, width, height, 'white');
15805
- renderCtx.commit({ width, height, scale });
15806
- doc.rect = tmp;
15807
- canvasList.push(canvasNode);
15808
- }
15809
- return canvasList;
15810
- }
15811
- }
15812
- class DocumentPrintOffscreen extends DocumentPrintOffscreenBase {
15813
- createRenderCtx(mainCtx, viewOptions, docCtx) {
15814
- const renderCtx = new RenderContext(new PaintContent(mainCtx));
15815
- const { scale, docPageSettings: { width, height } } = this.viewOptions;
15816
- renderCtx.init({ scale, width, height });
15817
- return renderCtx;
15818
- }
15819
- createCanvas(width, height) {
15820
- const canvasNode = document.createElement('canvas');
15821
- canvasNode.style.cursor = 'text';
15822
- canvasNode.style.width = width + 'px';
15823
- canvasNode.style.height = height + 'px';
15824
- const ctx = canvasNode.getContext('2d');
15825
- ElementUtil.setCanvasProps(canvasNode, ctx, this.viewOptions.docPageSettings);
15826
- return {
15827
- canvas: canvasNode, ctx
15828
- };
15829
- }
15830
- }
15831
-
15832
15762
  class CanvasTextEditor {
15833
15763
  docScroll;
15834
15764
  holdSpace;
@@ -15862,6 +15792,8 @@ class CanvasTextEditor {
15862
15792
  onScrollViewEvent = new Subject();
15863
15793
  //文档改变事件:内容及样式,业务模块需要根据此事件,来追踪当前文档是否改变的状态
15864
15794
  onDocChangedEvent = new Subject();
15795
+ //执行flushTask,refreshDoc之前,此时可以在文档计算排版之前改变内容
15796
+ onBeforeRefreshDocument = new Subject();
15865
15797
  constructor(docScroll, holdSpace, ruleCanvas, editCanvasContainer, editCanvas, editInput, editCursor, cursorWrapper) {
15866
15798
  this.docScroll = docScroll;
15867
15799
  this.holdSpace = holdSpace;
@@ -16055,6 +15987,7 @@ class CanvasTextEditor {
16055
15987
  }
16056
15988
  let rePaint = this.docCtx.refreshType === 'content';
16057
15989
  if (rePaint) {
15990
+ this.onBeforeRefreshDocument.next();
16058
15991
  this.documentSelection.clearSnapshot();
16059
15992
  this.docComment.readComments();
16060
15993
  suppressTracking(() => {
@@ -16639,15 +16572,26 @@ class CanvasTextEditor {
16639
16572
  }
16640
16573
  this.flushToSchedule();
16641
16574
  }
16642
- test() {
16643
- const print = new DocumentPrintOffscreen();
16644
- const doc = this.docCtx.document.clone();
16645
- const para = new ParagraphElement();
16646
- const ps = new PSymbolElement();
16647
- ps.defaultHeight = 60;
16648
- para.addChild(ps);
16649
- doc.getChild(1).addChild(para, 0);
16650
- print.print(doc);
16575
+ test2() {
16576
+ //获取文档上下文
16577
+ const docEleCtx = this.docCtx.getCtx(this.docCtx.document);
16578
+ //获取年龄数据元
16579
+ const dataEle = docEleCtx.getControlById('1493477712134672386');
16580
+ //获取要隐藏的数据组
16581
+ const dataGroup = docEleCtx.ctx.treeFind((item) => item instanceof DataElementGroupElement);
16582
+ //侦听数据元更改时间
16583
+ dataEle.onChangeSubject.subscribe((e) => {
16584
+ //在文档重新排版、绘制前,获取最终的指定节点的内容
16585
+ const beforeRefreshSub = this.onBeforeRefreshDocument.subscribe((e2) => {
16586
+ console.log('内容发生改变,隐藏数据组');
16587
+ //获取年龄数据元输入的值
16588
+ const age = Number.parseInt(dataEle.getValue());
16589
+ //年龄大于20,隐藏数据元
16590
+ dataGroup.props.hidden = age > 20;
16591
+ //取消订阅事件
16592
+ beforeRefreshSub.unsubscribe();
16593
+ });
16594
+ });
16651
16595
  }
16652
16596
  }
16653
16597
 
@@ -16689,6 +16633,125 @@ class DocumentCombine {
16689
16633
  }
16690
16634
  }
16691
16635
 
16636
+ /**
16637
+ * 离屏打印
16638
+ */
16639
+ class DocumentPrintOffscreenBase {
16640
+ documentPaint;
16641
+ viewOptions;
16642
+ docCtx;
16643
+ renderCtx;
16644
+ elementReader;
16645
+ constructor() {
16646
+ this.viewOptions = new ViewOptions();
16647
+ this.viewOptions.copyRightInfo = '万达信息电子病历编辑器,www.wondersgroup.com';
16648
+ this.viewOptions.showCharRect = true;
16649
+ this.viewOptions.drawCharRectColor = 'green';
16650
+ this.viewOptions.showLineRect = true;
16651
+ this.viewOptions.docSpace = 20;
16652
+ this.viewOptions.reviewWindowWidth = 200;
16653
+ this.viewOptions.mmToPixelsRatio = 3.7795001220703126;
16654
+ //整个画布的尺寸
16655
+ this.viewOptions.viewSettings = {
16656
+ width: 1000,
16657
+ height: 800
16658
+ };
16659
+ this.viewOptions.editUser = {
16660
+ id: '6666',
16661
+ name: '管理员'
16662
+ };
16663
+ const { canvas, ctx } = this.createCanvas(200, 200);
16664
+ const ss = new SelectionState();
16665
+ this.docCtx = new EditorContext(ss, this.viewOptions);
16666
+ this.renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);
16667
+ this.documentPaint = new DocumentPaint(this.renderCtx, this.docCtx, new Map());
16668
+ this.elementReader = new ElementReader(this.docCtx, this.renderCtx);
16669
+ this.docCtx.syncRefresh = () => {
16670
+ };
16671
+ }
16672
+ async print(data, ranges = null) {
16673
+ await this.prepare(data);
16674
+ const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
16675
+ if (!canvasNodes.length) {
16676
+ console.warn('无可打印页');
16677
+ return;
16678
+ }
16679
+ const docProps = this.docCtx.document.props;
16680
+ printNodes(canvasNodes, { ...docProps });
16681
+ }
16682
+ /**
16683
+ * 获取绘制的图片,格式为Base64编码
16684
+ */
16685
+ async getImagesContent(data, ranges = null) {
16686
+ await this.prepare(data);
16687
+ const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
16688
+ if (!canvasNodes.length) {
16689
+ console.warn('无可导出页');
16690
+ return [];
16691
+ }
16692
+ return canvasNodes.map(node => node.toDataURL());
16693
+ }
16694
+ async getPrintNodes(data, ranges = null) {
16695
+ await this.prepare(data);
16696
+ const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);
16697
+ return canvasNodes;
16698
+ }
16699
+ /**
16700
+ * 读取数据,排版
16701
+ * @param data
16702
+ */
16703
+ async prepare(data) {
16704
+ this.elementReader.read(data);
16705
+ this.documentPaint.rePages();
16706
+ await Promise.all(this.docCtx.imageLoader.getLoadTasks());
16707
+ const { scale, docPageSettings: { width, height } } = this.viewOptions;
16708
+ this.renderCtx.update({ scale, width, height });
16709
+ }
16710
+ getCanvasNodes(printPages, printRanges = null) {
16711
+ const { scale, docPageSettings: { width, height } } = this.viewOptions;
16712
+ const canvasList = [];
16713
+ for (let i = 0; i < printPages.length; i++) {
16714
+ if (printRanges && printRanges.indexOf(i) === -1) {
16715
+ continue;
16716
+ }
16717
+ const { canvas: canvasNode, ctx } = this.createCanvas(width, height);
16718
+ const renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);
16719
+ renderCtx.init({ width, height, scale });
16720
+ renderCtx.drawMode = 'print';
16721
+ const doc = printPages[i];
16722
+ const tmp = ElementUtil.cloneRect(doc.rect);
16723
+ doc.rect.x = 0;
16724
+ doc.rect.y = 0;
16725
+ ElementPaint.drawPage(renderCtx, this.docCtx, doc, { x: 0, y: 0 });
16726
+ renderCtx.overlaysContext.clear();
16727
+ renderCtx.mainContext.fillRect(0, 0, width, height, 'white');
16728
+ renderCtx.commit({ width, height, scale });
16729
+ doc.rect = tmp;
16730
+ canvasList.push(canvasNode);
16731
+ }
16732
+ return canvasList;
16733
+ }
16734
+ }
16735
+ class DocumentPrintOffscreen extends DocumentPrintOffscreenBase {
16736
+ createRenderCtx(mainCtx, viewOptions, docCtx) {
16737
+ const renderCtx = new RenderContext(new PaintContent(mainCtx));
16738
+ const { scale, docPageSettings: { width, height } } = this.viewOptions;
16739
+ renderCtx.init({ scale, width, height });
16740
+ return renderCtx;
16741
+ }
16742
+ createCanvas(width, height) {
16743
+ const canvasNode = document.createElement('canvas');
16744
+ canvasNode.style.cursor = 'text';
16745
+ canvasNode.style.width = width + 'px';
16746
+ canvasNode.style.height = height + 'px';
16747
+ const ctx = canvasNode.getContext('2d');
16748
+ ElementUtil.setCanvasProps(canvasNode, ctx, this.viewOptions.docPageSettings);
16749
+ return {
16750
+ canvas: canvasNode, ctx
16751
+ };
16752
+ }
16753
+ }
16754
+
16692
16755
  /**
16693
16756
  * 删除当前段落
16694
16757
  * @param evt
@@ -17039,4 +17102,4 @@ exports.validateDataEle = validateDataEle;
17039
17102
  exports.validateDataEleRenderObj = validateDataEleRenderObj;
17040
17103
  exports.validateInlineInputRenderObj = validateInlineInputRenderObj;
17041
17104
  exports.watchChanged = watchChanged;
17042
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtZXZlbnQtZGVmaW5lLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9ub3RpZnkudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL3JlbmRlci1kZWZpbmUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2NvbW1vbi11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXRyYWNlLXRyYWNraW5nLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9ldmVudC1zdWJqZWN0LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LWRlZmluZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1wcm9wcy50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1kZWNvcmF0ZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWZvb3Rlci1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1oZWFkZXItaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9wYXJhZ3JhcGgvcC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3N5bWJvbC9wLXN5bWJvbC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGV4dC90ZXh0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtc2VyaWFsaXplLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RleHQvdHJhY2stcnVuLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtdXRpbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtY29udGFpbmVyLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXNlbGVjdGlvbi50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jaGVja2JveC9jaGVja2JveC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvY29tbWVudC1lbGVtZW50LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvdmFsaWRhdGUtbXNnLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXJjb2RlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtY2hlY2staW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWRhdGUtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWdyb3VwLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1pbWFnZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtbGlzdC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtdGV4dC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RlY29yYXRlL2ZpbGwtbnVsbC1zcGFjZS1pbXBsZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtYm9keS1wYXJ0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvbWVkaWEtZm9ybXVsYS9tZW5zdHJ1YWwtaGlzdG9yeS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9waWN0dXJlL2ltYWdlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvcmFkaW8vcmFkaW8taW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9zeW1ib2wvYnItc3ltYm9sLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGFibGUvdGFibGUtc3BsaXQtY2VsbC1wYXRjaC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1zcGxpdC1jZWxsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2RvYy1ydWxlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvcmVuZGVyLWNvbnRleHQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXRleHRsaW5lLW1vZGUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtbWVhc3VyZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvcmFuZ2UtdXRpbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1wYWludC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1yZW5kZXItY3V0LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9zZWxlY3Rpb24tb3ZlcmxheXMudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXBhaW50LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3BhcmFncmFwaC9wLWxpbmUtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1yZWFkZXIudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWV2ZW50LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1pbnB1dC1jdXJzb3IudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNoYW5nZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXRlbXBsYXRlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1ldmFsLWZ1bmMudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWltYWdlcy1sb2FkZXIudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNvbnRleHQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWNvbW1lbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXNlZ21lbnRlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC10cmFjZS1tYW5hZ2UudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LXByaW50LW9mZnNjcmVlbi50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci90ZXh0ZWRpdG9yLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1jb21iaW5lLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXR5cGUtaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCwgUmVjdCB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tIFwibmFub2lkXCI7XG5pbXBvcnQgeyBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgVHJhY2tSdW5UeXBlRW51bSB9IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuXG5leHBvcnQgdHlwZSBFdmVudFN0YWdlID0gJ0FsbCcgfCAnQ2FwdHVyZScgfCAnQnViYmxpbmcnO1xuZXhwb3J0IHR5cGUgRXZlbnRUeXBlcyA9ICdFbGVtZW50TW91c2Vkb3duJyB8ICdFbGVtZW50TW91c2Vtb3ZlJyB8ICdFbGVtZW50Q2xpY2snIHwgJ0VsZW1lbnREYmxDbGljaycgfCAnRWxlbWVudE1vdXNlRW50ZXInXG4gICAgfCAnRWxlbWVudE1vdXNlTGVhdmUnIHwgJ0JhY2tzcGFjZUtleScgfCAnRGVsZXRlS2V5JyB8ICdFbGVtZW50U2hvd24nIHwgJ0VsZW1lbnRDb250ZXh0TWVudScgfCAnR290Q3Vyc29yJyB8ICdMb3N0Q3Vyc29yJyB8ICdFbGVtZW50S2V5RG93bicgfCAnRWxlbWVudERyb3AnIHxcbiAgICAnRWxlbWVudFRhYktleScgfCAnR2V0VHJhY2tUaXBzJztcblxuZXhwb3J0IHR5cGUgSGl0UmVnaW9uID0gJ2hlYWRlcicgfCAnYm9keScgfCAnZm9vdGVyJyB8ICdyZXZpZXcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpdEV2ZW50SW5mbyB7XG4gICAgcmVsYXRpdmVSZWN0OiBSZWN0LFxuICAgIGFic29sdXRlUmVjdDogUmVjdCxcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsXG4gICAgZWxlbWVudDogTGVhZkVsZW1lbnQsXG4gICAgc2hhZG93UmVuZGVySW5kZXg6IG51bWJlcixcbiAgICBoaXREb2NJbmRleDogbnVtYmVyLFxuICAgIHN0YXJ0UmVnaW9uPzogSGl0UmVnaW9uXG59XG5cbi8qKlxuICog5YWD57Sg5LqL5Lu2XG4gKi9cbmV4cG9ydCBjbGFzcyBFbGVtZW50RXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjdHg6IEVkaXRvckNvbnRleHQpIHsgfVxuICAgIC8qKlxuICAgICAqIOS6i+S7tua6kOWktOWvueixoVxuICAgICAqL1xuICAgIHNvdXJjZSE6IEVsZW1lbnQ7XG4gICAgc291cmNlT2Zmc2V0ITogbnVtYmVyO1xuICAgIHNvdXJjZVJlbmRlciE6IFJlbmRlck9iamVjdDtcbiAgICAvKipcbiAgICAgKiDlvZPliY3miYDlnKjnmoTlr7nosaFcbiAgICAgKi9cbiAgICBjdXJyZW50RWxlbWVudCE6IEVsZW1lbnQ7XG4gICAgY3VycmVudFJlbmRlck9iamVjdFghOiBudW1iZXI7XG4gICAgY3VycmVudFJlbmRlck9iamVjdFkhOiBudW1iZXI7XG4gICAgLy/mmK/lkKblj5bmtojlkJHkuIrlhpLms6FcbiAgICBpc0NhbmNlbCE6IGJvb2xlYW47XG4gICAgZ2xvYmFsWCE6IG51bWJlcjtcbiAgICBnbG9iYWxZITogbnVtYmVyO1xuICAgIHBhZ2VYITogbnVtYmVyO1xuICAgIHBhZ2VZITogbnVtYmVyO1xuICAgIHNoaWZ0ITogYm9vbGVhbjtcbiAgICBjdHJsITogYm9vbGVhbjtcbiAgICBidXR0b25zITogbnVtYmVyO1xuICAgIGdldCBzZWxlY3Rpb25TdGF0ZSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5jdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVMaXN0ZW5lciB7XG4gICAgW2xpc3RlbmVyOiBzdHJpbmddOiA8VCBleHRlbmRzIEV2ZW50PihldnQ6IFQpID0+IHZvaWQ7XG59XG5leHBvcnQgY2xhc3MgQ29udGVudE1lbnVJdGVtIHtcbiAgICBpY29uITogc3RyaW5nO1xuICAgIGNhcHRpb24hOiBzdHJpbmc7XG4gICAgZXZlbnRPYmohOiBNZW51TGlzdGVuZXI7XG4gICAgc3ViSXRlbXM/OiBBcnJheTxDb250ZW50TWVudUl0ZW0+ID0gW107XG59XG4vKipcbiAqIOm8oOagh+aTjeS9nOeahOS6i+S7tlxuICovXG5leHBvcnQgY2xhc3MgTW91c2VFbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5cbmV4cG9ydCBjbGFzcyBNb3VzZWRvd25FbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5leHBvcnQgY2xhc3MgS2V5Ym9yYWRFbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQge1xuICAgIGtleSE6IHN0cmluZztcbiAgICBzb3VyY2VFdmVudCE6IEtleWJvYXJkRXZlbnQ7XG59XG5leHBvcnQgY2xhc3MgR290Q3Vyc29yRXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQgeyB9XG5leHBvcnQgY2xhc3MgTG9zdEN1cnNvckV2ZW50IGV4dGVuZHMgRWxlbWVudEV2ZW50IHsgfVxuZXhwb3J0IGludGVyZmFjZSBJVHJhY2tUaXBzIHtcbiAgICB0cmFja1J1blR5cGU6IFRyYWNrUnVuVHlwZUVudW07XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRhdGU6IHN0cmluZztcbiAgICBjb250ZW50OiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgR2V0VHJhY2tUaXBzRXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQge1xuICAgIHRyYWNrVGlwcyE6IElUcmFja1RpcHM7XG59XG5leHBvcnQgY2xhc3MgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQgZXh0ZW5kcyBFbGVtZW50RXZlbnQge1xuICAgIG1lbnVzOiBBcnJheTxDb250ZW50TWVudUl0ZW0+ID0gW107XG59XG5leHBvcnQgY2xhc3MgRHJvcEVsZW1lbnRFdmVudCBleHRlbmRzIEVsZW1lbnRFdmVudCB7XG4gICAgZHJhZ0VsZW1lbnQhOiBFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50UHJvcHM8VCBleHRlbmRzIEVsZW1lbnRFdmVudCA9IEVsZW1lbnRFdmVudD4geyBpZDogc3RyaW5nLCBldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldnQ6IFQpID0+IHZvaWQsIHVzZUNhcHR1cmU6IGJvb2xlYW4gfVxuZXhwb3J0IGNsYXNzIEV2ZW50TWFwIHtcbiAgICBwcml2YXRlIG1hcDogV2Vha01hcDxFbGVtZW50LCBBcnJheTxFdmVudFByb3BzPGFueT4+PiA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBhZGQ8VCBleHRlbmRzIEVsZW1lbnRFdmVudD4oZWxlbWVudDogRWxlbWVudCwgZXZlbnROYW1lOiBFdmVudFR5cGVzLCBsaXN0ZW5lcjogKGV2dDogVCkgPT4gdm9pZCwgdXNlQ2FwdHVyZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMubWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgZXZlbnRJZCA9IG5hbm9pZCg4KTtcbiAgICAgICAgY29uc3QgZXZlbnRQcm9wczogRXZlbnRQcm9wczxUPiA9IHsgaWQ6IGV2ZW50SWQsIGV2ZW50TmFtZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUgfTtcbiAgICAgICAgaWYgKCFldmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMubWFwLnNldChlbGVtZW50LCBbZXZlbnRQcm9wc10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnRzLnB1c2goZXZlbnRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50SWQ7XG4gICAgfVxuXG4gICAgcmVtb3ZlKGVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLm1hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVySW5kZXggPSBldmVudHMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZXZlbnRJZCk7XG4gICAgICAgICAgICBpZiAobGlzdGVuZXJJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRzLnNwbGljZShsaXN0ZW5lckluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUJ5VHlwZShlbGVtZW50OiBFbGVtZW50LCBldmVudE5hbWU6IEV2ZW50VHlwZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJFdmVudHMgPSBldmVudHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5ldmVudE5hbWUgPT09IGV2ZW50TmFtZSk7XG4gICAgICAgICAgICBmaWx0ZXJFdmVudHMuZm9yRWFjaChpdGVtID0+IHsgdGhpcy5yZW1vdmUoZWxlbWVudCwgaXRlbS5pZCkgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhcihlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICB0aGlzLm1hcC5kZWxldGUoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0KGVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCB1c2VDYXB0dXJlID0gZmFsc2UpOiBBcnJheTwoZXZ0OiBFbGVtZW50RXZlbnQpID0+IHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5tYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGV2ZW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLmV2ZW50TmFtZSA9PT0gZXZlbnROYW1lICYmIGl0ZW0udXNlQ2FwdHVyZSA9PT0gdXNlQ2FwdHVyZSkubWFwKGl0ZW0gPT4gaXRlbS5saXN0ZW5lcik7XG4gICAgICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgfVxufSIsImNvbnN0IEVESVRPUl9SRUFDVElWRSA9ICdfX2VkaXRvcl9yZWFjdGl2ZSc7XG5jb25zdCBJVEVSQVRPUl9LRVkgPSBTeW1ib2woJ2l0ZXJhdG9yLWtleScpXG5leHBvcnQgY29uc3QgcmVhY3RpdmVNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIG9iamVjdD4oKTtcbmV4cG9ydCBjb25zdCB0YXJnZXRNYXBzID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBNYXA8cHJvcFR5cGUsIFNldDxub3RpZnlDYWxsYmFjaz4+PigpO1xudHlwZSBwcm9wVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbDtcbmludGVyZmFjZSBub3RpZnlDYWxsYmFjayB7XG4gICAgKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IHZvaWQ7XG59XG5cblxuY29uc3QgYWN0aXZlRm5zOiBBcnJheTxub3RpZnlDYWxsYmFjaz4gPSBbXTtcbmZ1bmN0aW9uIHRyYWNrKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSkge1xuICAgIGNvbnN0IGFjdGl2ZUZuID0gYWN0aXZlRm5zW2FjdGl2ZUZucy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWFjdGl2ZUZuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhcmdldE1hcCA9IHRhcmdldE1hcHMuZ2V0KHRhcmdldClcbiAgICBpZiAoIXRhcmdldE1hcCkge1xuICAgICAgICB0YXJnZXRNYXBzLnNldCh0YXJnZXQsICh0YXJnZXRNYXAgPSBuZXcgTWFwKCkpKVxuICAgIH1cbiAgICBsZXQgZWZmZWN0Rm5zID0gdGFyZ2V0TWFwLmdldChwKTtcbiAgICBpZiAoIWVmZmVjdEZucykge1xuICAgICAgICB0YXJnZXRNYXAuc2V0KHAsIChlZmZlY3RGbnMgPSBuZXcgU2V0KCkpKVxuICAgIH1cbiAgICBlZmZlY3RGbnMuYWRkKGFjdGl2ZUZuKVxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8v5LiN6ZyA6KaB6Kem5Y+RXG4gICAgaWYgKHAudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdfXycpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0TWFwID0gdGFyZ2V0TWFwcy5nZXQodGFyZ2V0KTtcbiAgICBpZiAoIXRhcmdldE1hcCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVmZmVjdEZucyA9IHRhcmdldE1hcC5nZXQocCk7XG4gICAgY29uc3QgaXRlcmF0b3JGbnMgPSB0YXJnZXRNYXAuZ2V0KElURVJBVE9SX0tFWSk7XG4gICAgY29uc3QgZm5zID0gbmV3IFNldDxub3RpZnlDYWxsYmFjaz4oKTtcbiAgICBlZmZlY3RGbnMgJiYgZWZmZWN0Rm5zLmZvckVhY2goaXRlbSA9PiBmbnMuYWRkKGl0ZW0pKTtcbiAgICBpdGVyYXRvckZucyAmJiBpdGVyYXRvckZucy5mb3JFYWNoKGl0ZW0gPT4gZm5zLmFkZChpdGVtKSk7XG4gICAgY29uc3QgYWN0aXZlRm4gPSBhY3RpdmVGbnNbYWN0aXZlRm5zLmxlbmd0aCAtIDFdO1xuICAgIC8v6Ziy5q2i5q275b6q546v77yM6L+H5ruk5q2j5Zyo6L+Q6KGM55qE5Ymv5L2c55SoXG4gICAgaWYgKGFjdGl2ZUZuKSB7XG4gICAgICAgIGZucy5kZWxldGUoYWN0aXZlRm4pXG4gICAgfVxuICAgIGZucy5mb3JFYWNoKGZuID0+IHtcbiAgICAgICAgZm4odGFyZ2V0LCBwLCBvbGRWYWx1ZSwgbmV3VmFsdWUpXG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaENoYW5nZWQ8VCBleHRlbmRzIG9iamVjdD4oc291cmNlOiBULCBjYjogbm90aWZ5Q2FsbGJhY2spOiBUIHtcbiAgICBpZiAoKDxhbnk+c291cmNlKVtFRElUT1JfUkVBQ1RJVkVdKSB7XG4gICAgICAgIGFkZFRvVHJhY2soKDxhbnk+c291cmNlKVsncmF3J10sIHNvdXJjZSwgY2IpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RQcm94eSA9IHJlYWN0aXZlTWFwLmdldChzb3VyY2UpO1xuICAgIGlmIChleGlzdFByb3h5KSB7XG4gICAgICAgIHJldHVybiBleGlzdFByb3h5IGFzIFQ7XG4gICAgfVxuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHNvdXJjZSwge1xuICAgICAgICBnZXQodGFyZ2V0LCBwLCByZWNlaXZlcikge1xuICAgICAgICAgICAgaWYgKHAgPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwID09PSBFRElUT1JfUkVBQ1RJVkUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgcmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdhdGNoQ2hhbmdlZChyZXMsIGNiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCh0YXJnZXQsIHAsIG5ld1ZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6K6+572uJyArIHAudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gKDxhbnk+dGFyZ2V0KVtwXTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFJlZmxlY3Quc2V0KHRhcmdldCwgcCwgbmV3VmFsdWUsIHJlY2VpdmVyKTtcbiAgICAgICAgICAgIGlmICgoPGFueT5yZWNlaXZlcikucmF3ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAob2xkVmFsdWUgIT09IG5ld1ZhbHVlICYmIChvbGRWYWx1ZSA9PT0gb2xkVmFsdWUgfHwgbmV3VmFsdWUgPT09IG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRhcmdldCwgcCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfSlcbiAgICBhZGRUb1RyYWNrKHNvdXJjZSwgcHJveHksIGNiKTtcbiAgICByZXR1cm4gcHJveHk7XG59XG5cbmZ1bmN0aW9uIGFkZFRvVHJhY2soc291cmNlOiBvYmplY3QsIHByb3h5OiBvYmplY3QsIGNiOiBub3RpZnlDYWxsYmFjayk6IHZvaWQge1xuICAgIGFjdGl2ZUZucy5wdXNoKGNiKTtcbiAgICB0cmFjayhzb3VyY2UsIElURVJBVE9SX0tFWSk7XG4gICAgYWN0aXZlRm5zLnBvcCgpO1xuICAgIHJlYWN0aXZlTWFwLnNldChzb3VyY2UsIHByb3h5KTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Tm90aWZ5Q2hhbmdlZENhbGxiYWNrKHRhcmdldDogb2JqZWN0LCBwOiBwcm9wVHlwZSwgY2I6IG5vdGlmeUNhbGxiYWNrKTogdm9pZCB7XG4gICAgbGV0IHRyYWNrVGFyZ2V0OiBhbnkgPSB0YXJnZXQ7XG4gICAgaWYgKCg8YW55PnRhcmdldClbRURJVE9SX1JFQUNUSVZFXSkge1xuICAgICAgICB0cmFja1RhcmdldCA9ICg8YW55PnRhcmdldClbJ3JhdyddO1xuICAgIH1cbiAgICBhY3RpdmVGbnMucHVzaChjYilcbiAgICB0cmFjayh0cmFja1RhcmdldCwgcCk7XG4gICAgYWN0aXZlRm5zLnBvcCgpXG59XG5cbmV4cG9ydCBjb25zdCBpc0RhdGUgPSAodmFsOiB1bmtub3duKTogdmFsIGlzIERhdGUgPT4gdmFsIGluc3RhbmNlb2YgRGF0ZVxuXG5leHBvcnQgY29uc3Qgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG5leHBvcnQgY29uc3QgdG9UeXBlU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+XG4gICAgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSlcblxuZXhwb3J0IGNvbnN0IHRvUmF3VHlwZSA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIHRvVHlwZVN0cmluZyh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG4iLCJpbXBvcnQgeyBSZWN0LCBFbGVtZW50LCBNYXJnaW5Qcm9wcywgUGFkZGluZ1Byb3BzLCBQb3NpdGlvbiwgVmlld09wdGlvbnMgfSBmcm9tICcuL2VsZW1lbnQtZGVmaW5lJ1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tICcuL3JlbmRlci1jb250ZXh0JztcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5cbi8qKlxuICog5a6a5LmJ57uE5Lu255qEVUnlvaLlvI/nmoTmuLLmn5NcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IHtcbiAgICBtYXJnaW4hOiBNYXJnaW5Qcm9wcztcbiAgICBwYWRkaW5nITogUGFkZGluZ1Byb3BzO1xuICAgIHJlY3Q6IFJlY3QgPSBuZXcgUmVjdCgpO1xuICAgIHBhcmVudCE6IEJyYW5jaFJlbmRlck9iamVjdDtcbiAgICAvKipcbiAgICAqIOWPr+eCueWHu+aAp++8jOS+i+Wmgu+8mm51bGwtdGV4dCDljaDkvY3nrKblhYPntKDkuI3lhbflpIflj6/ngrnlh7vog73liptcbiAgICAqL1xuICAgIGRpc2FibGVDbGljayE6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IFQpIHtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBuZXcgTWFyZ2luUHJvcHMoKTtcbiAgICAgICAgdGhpcy5wYWRkaW5nID0gbmV3IFBhZGRpbmdQcm9wcygpO1xuICAgIH1cbiAgICBhYnN0cmFjdCBjbG9uZSgpOiBSZW5kZXJPYmplY3Q7XG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGU6IE9taXQ8SVJlbmRlckRhdGEsICduZXh0UmVuZGVyJz4pOiB2b2lkIHsgfVxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgICAgICAvL3RoaXMubWFyZ2luID0gbnVsbDtcbiAgICAgICAgLy90aGlzLnBhZGRpbmcgPSBudWxsO1xuICAgICAgICAvL3RoaXMucmVjdCA9IG51bGw7XG4gICAgICAgIC8vdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIOiOt+WPluWGheWuueWMuuWfn+ahhuS9k1xuICAgICogQHBhcmFtIHJlbmRlciBcbiAgICAqIEByZXR1cm5zIFxuICAgICovXG4gICAgZ2V0SW5uZXJSZWN0KCk6IFJlY3Qge1xuICAgICAgICBjb25zdCB7IHBhZGRpbmcgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdCgpO1xuICAgICAgICByZWN0LnggPSBwYWRkaW5nLmxlZnQ7XG4gICAgICAgIHJlY3QueSA9IHBhZGRpbmcudG9wO1xuICAgICAgICByZWN0Lm1heFdpZHRoID0gdGhpcy5yZWN0Lm1heFdpZHRoIC0gcGFkZGluZy5sZWZ0IC0gcGFkZGluZy5yaWdodDtcbiAgICAgICAgaWYgKHRoaXMucmVjdC5tYXhIZWlnaHQpIHtcbiAgICAgICAgICAgIHJlY3QubWF4SGVpZ2h0ID0gdGhpcy5yZWN0Lm1heEhlaWdodCAtIHBhZGRpbmcudG9wIC0gcGFkZGluZy5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfVxuXG4gICAgZ2V0SW5uZXJNYXhXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMucmVjdC5tYXhXaWR0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzLnJlY3QubWF4V2lkdGggaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYWRkaW5nLCBtYXJnaW4gfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY3QubWF4V2lkdGggLSBwYWRkaW5nLmxlZnQgLSBwYWRkaW5nLnJpZ2h0IC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4uYm90dG9tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruWGheahhuWGheWuuemrmOW6pu+8jOabtOaWsOWkluahhuahhuS9k+mrmOW6plxuICAgICAqIEBwYXJhbSBpbm5lclJlY3RcbiAgICAgKi9cbiAgICB1cGRhdGVSZW5kZXJIZWlnaHQoaW5uZXJSZWN0OiBSZWN0IHwgbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gdHlwZW9mIGlubmVyUmVjdCA9PT0gJ251bWJlcicgPyBpbm5lclJlY3QgOiAoPFJlY3Q+aW5uZXJSZWN0KS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IHsgcGFkZGluZywgbWFyZ2luIH0gPSB0aGlzO1xuICAgICAgICAvL+WkluWxguWuueWZqOmrmOW6puetieS6juWGheWuuemrmOW6pivlpJbovrnot50r5YaF6L656LedXG4gICAgICAgIHRoaXMucmVjdC5oZWlnaHQgPSBpbm5lckhlaWdodCArIHBhZGRpbmcudG9wICsgcGFkZGluZy5ib3R0b207XG4gICAgfVxuXG4gICAgZ2V0SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0Q2hpbGRJbmRleCh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFic3RyYWN0IHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQ7XG59XG5cbi8qKlxuICog5Y+25a2Q6IqC54K55riy5p+T5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMZWFmUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4gZXh0ZW5kcyBSZW5kZXJPYmplY3Q8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFQgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQgYXMgVCk7XG4gICAgfVxufVxuXG4vKipcbiAqIOaeneW5suiKgueCuea4suafk+WFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJhbmNoUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4gZXh0ZW5kcyBSZW5kZXJPYmplY3Q8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFQgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQgYXMgVCk7XG4gICAgfVxuICAgIHByaXZhdGUgY2hpbHJlbjogQXJyYXk8UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgIGdldEl0ZW1zKCk6IEFycmF5PFJlbmRlck9iamVjdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuO1xuICAgIH1cblxuICAgIGFkZENoaWxkKC4uLml0ZW1zOiBBcnJheTxSZW5kZXJPYmplY3Q+KTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50ID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuY2hpbHJlbi5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2hpbGQoaXRlbTogUmVuZGVyT2JqZWN0LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDAsIGl0ZW0pO1xuICAgICAgICBpdGVtLnBhcmVudCA9IHRoaXM7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGQoY2hpbGQ6IFJlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hpbHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuLrmn6Xmib7liLDlvZPliY3lhYPntKAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQucGFyZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAvL2NoaWxkLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlscmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGRCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxyZW5baW5kZXhdO1xuICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgLy9jaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuLrmn6Xmib7liLDlvZPliY3lhYPntKAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNoaWxyZW5dO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRCeUluZGV4KGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4ubGVuZ3RoO1xuICAgIH1cblxuXG4gICAgZ2V0Q2hpbGQ8VCBleHRlbmRzIFJlbmRlck9iamVjdCA9IFJlbmRlck9iamVjdD4oaW5kZXg6IG51bWJlcik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuW2luZGV4XSBhcyBUO1xuICAgIH1cblxuICAgIGdldENoaWxkSW5kZXgoY2hpbGQ6IFJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgfVxuXG5cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY2hpbGQuZGVzdHJveSgpO1xuICAgICAgICAgICAgLy90aGlzLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxyZW4ubGVuZ3RoID0gMDtcbiAgICAgICAgLy90aGlzLmNoaWxyZW4gPSBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVuZGVyRGF0YSB7XG4gICAgcmVuZGVyOiBSZW5kZXJDb250ZXh0VHlwZSxcbiAgICBwb3NpdGlvbjogUG9zaXRpb24sXG4gICAgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LFxuICAgIG5leHRSZW5kZXI6ICgpID0+IHZvaWRcbn1cbi8qKlxuICog5Z2X57qn5riy5p+T5YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJyYW5jaFJlbmRlck9iamVjdDxUPiB7XG4gICAgc2V0UmVuZGVyV2lkdGgobWF4V2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlY3QubWF4V2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgdGhpcy5yZWN0LndpZHRoID0gbWF4V2lkdGg7XG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJyYW5jaFJlbmRlck9iamVjdDxUPiB7XG59XG5cbi8qKlxuICog5YyF5ZCr5Z2X57qn5riy5p+T5YWD57Sg55qE5a655Zmo5YWD57SgLOS+i+WmgmJvZHnjgIF0YWJsZS1jZWxs562JXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IGV4dGVuZHMgQnJhbmNoUmVuZGVyT2JqZWN0PFQ+IHtcbiAgICBzZXRSZW5kZXJXaWR0aChtYXhXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVjdC5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICB0aGlzLnJlY3Qud2lkdGggPSBtYXhXaWR0aDtcbiAgICB9XG59XG5cbi8qKlxuICog5aSa57qnIOKAmEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3TigJkg5YyF6KO55YWD57Sg77yM5L6L5aaCIHDjgIF0YWJsZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDxUPiB7IH1cblxuLyoqXG4gKiDlrrnlmagt5a2Q5YaF5a655Li65aSa5Liq6KGM5YaF5Z2X57qn5YWD57Sg77yM5L6L5aaCdGFibGUtcm93XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmxpbmVCbG9ja0NvbnRhaW5lciBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHsgfVxuXG4vKipcbiAqIOacjeWKoeS6jnRhYmxlLWNlbGxcbiAqIOWPr+iiq+Wkmue6p+aLhuWIhueahOWFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCB7IH1cblxuLyoqXG4gKiDmnIDlsI/kuI3lj6/liIblibLljZXkvY3nmoTlnZfnuqfooYzmoYbvvIzkvovlpoIgcC1saW5lXG4gKiDkuIDooYzkuI3lj6/lrZjlnKjkuo7kuKTkuKrpobXpnaLkuK0s5Z2X57qn6KGM5qGG5LiN6IO95YiG5biD5Zyo5Lik5Liq6aG16Z2i5LitXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0IHsgfVxuXG5cbmV4cG9ydCB0eXBlIEJvcmRlclR5cGUgPSAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0LW1pZGRsZScgfCAncmlnaHQtbWlkZGxlJyB8ICd0b3AtbWlkZGxlJyB8ICdib3R0b20tbWlkZGxlJyB8ICdub25lJyB8ICdsZWZ0LXRvcCcgfCAnbGVmdC1ib3R0b20nIHwgJ3JpZ2h0LXRvcCcgfCAncmlnaHQtYm90dG9tJztcbmV4cG9ydCB0eXBlIEN1cnNvclR5cGUgPSAndGV4dCcgfCAncm93LXJlc2l6ZScgfCAnY29sLXJlc2l6ZScgfCAnbm9uZScgfCAnZGVmYXVsdCcgfCAnbW92ZScgfCAncG9pbnRlcicgfCAndy1yZXNpemUnIHwgJ3MtcmVzaXplJyB8ICdzZS1yZXNpemUnIHwgJ25lLXJlc2l6ZSc7XG5leHBvcnQgZW51bSBSZW5kZXJPYmplY3RUeXBlIHtcbiAgICBCcmFuY2ggPSAwLFxuICAgIExlYWYgPSAxXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lYXN1cmVSZW5kZXJTdHJ1Y3Q8VD4ge1xuICAgIHJlY3Q6IFJlY3QsXG4gICAgcmVuZGVyOiBUXG59XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IFJlY3QgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgQm9yZGVyVHlwZSB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmludGVyZmFjZSBQb3NpdGlvbiB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1vblV0aWwge1xuXG4gICAgLyoqXG4gICAgICog5Yik5pat5Z2Q5qCH5piv5ZCm5Zyo55+p5b2i5qGG5YaFXG4gICAgICogQHBhcmFtIHJlY3QgXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBpc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJlY3Q6IE9taXQ8UmVjdCwgJ21heFdpZHRoJ3wnbWF4SGVpZ2h0Jz4sIHBvc2l0aW9uOiBQb3NpdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcG9zaXRpb24ueCA+PSByZWN0LnhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi54IDw9IHJlY3QueCArIHJlY3Qud2lkdGhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55ID49IHJlY3QueVxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgPD0gcmVjdC55ICsgcmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzSW5zaWRlUmVjdEJ5UmVjdChyZWN0OiBSZWN0LCBwb3NpdGlvbjogUmVjdCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcG9zaXRpb24ueCA+PSByZWN0LnhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi54IDw9IHJlY3QueCArIHJlY3Qud2lkdGhcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55ID49IHJlY3QueVxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnkgPD0gcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55ICsgcG9zaXRpb24uaGVpZ2h0IDw9IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueCArIHBvc2l0aW9uLndpZHRoIDw9IHJlY3QueCArIHJlY3Qud2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5Z2Q5qCH5piv5ZCm5Zyo55+p5b2i55qE6L655qGG5LiKXG4gICAgICogQHBhcmFtIHJlY3QgXG4gICAgICogQHBhcmFtIGJvcmRlcldpZHRoIFxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNJblJlY3RCb3JkZXIocmVjdDogUmVjdCwgYm9yZGVyV2lkdGg6IG51bWJlciwgcG9zaXRpb246IFBvc2l0aW9uKTogeyBib3JkZXJUeXBlOiBCb3JkZXJUeXBlIH0ge1xuICAgICAgICBjb25zdCBsZWZ0Qm9yZGVyUmVjdDogUmVjdCA9IHsgeDogMCwgeTogMCwgd2lkdGg6IGJvcmRlcldpZHRoLCBoZWlnaHQ6IHJlY3QuaGVpZ2h0LCBtYXhXaWR0aDogMCwgbWF4SGVpZ2h0OiAwIH07XG4gICAgICAgIGNvbnN0IHJpZ2h0Qm9yZGVyUmVjdDogUmVjdCA9IHsgeDogcmVjdC53aWR0aCAtIGJvcmRlcldpZHRoLCB5OiAwLCB3aWR0aDogYm9yZGVyV2lkdGgsIGhlaWdodDogcmVjdC5oZWlnaHQsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgY29uc3QgdG9wQm9yZGVyUmVjdDogUmVjdCA9IHsgeDogMCwgeTogMCwgd2lkdGg6IHJlY3Qud2lkdGgsIGhlaWdodDogYm9yZGVyV2lkdGgsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgY29uc3QgYm90dG9tQm9yZGVyUmVjdDogUmVjdCA9IHsgeDogMCwgeTogcmVjdC5oZWlnaHQgLSBib3JkZXJXaWR0aCwgd2lkdGg6IHJlY3Qud2lkdGgsIGhlaWdodDogYm9yZGVyV2lkdGgsIG1heFdpZHRoOiAwLCBtYXhIZWlnaHQ6IDAgfTtcbiAgICAgICAgbGV0IGJvcmRlclR5cGU6IEJvcmRlclR5cGUgPSAnbm9uZSc7XG4gICAgICAgIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24obGVmdEJvcmRlclJlY3QsIHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgYm9yZGVyVHlwZSA9ICdsZWZ0JztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmlnaHRCb3JkZXJSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGJvcmRlclR5cGUgPSAncmlnaHQnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbih0b3BCb3JkZXJSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGJvcmRlclR5cGUgPSAndG9wJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24oYm90dG9tQm9yZGVyUmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICBib3JkZXJUeXBlID0gJ2JvdHRvbSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgYm9yZGVyVHlwZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreWdkOagh+aYr+WQpuWcqOWbvueJh+eahOe8qeaUvuaTjeS9nOeCueS4ilxuICAgICAqL1xuICAgIHN0YXRpYyBpc0luUGljdHVyZVJlc2l6ZVBvaW50KHJlY3Q6IFJlY3QsIHBvczogUG9zaXRpb24sIHI6IG51bWJlcik6IHsgYm9yZGVyVHlwZTogQm9yZGVyVHlwZSB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gcmVjdDtcbiAgICAgICAgY29uc3QgeCA9IDA7XG4gICAgICAgIGNvbnN0IHkgPSAwO1xuICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHR5cGU6IEJvcmRlclR5cGUgfT4gPSBbeyB4LCB5LCB0eXBlOiAnbGVmdC10b3AnIH0sIHsgeDogeCArIHdpZHRoLCB5LCB0eXBlOiAncmlnaHQtdG9wJyB9LCB7IHg6IHggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgeTogeSwgdHlwZTogJ3RvcC1taWRkbGUnIH0sIHsgeCwgeTogeSArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMiksIHR5cGU6ICdsZWZ0LW1pZGRsZScgfSwgeyB4LCB5OiB5ICsgaGVpZ2h0LCB0eXBlOiAnbGVmdC1ib3R0b20nIH0sIHsgeDogd2lkdGgsIHk6IE1hdGguZmxvb3IoaGVpZ2h0IC8gMiksIHR5cGU6ICdyaWdodC1taWRkbGUnIH0sIHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0LCB0eXBlOiAncmlnaHQtYm90dG9tJyB9LCB7IHg6IHggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgeTogeSArIGhlaWdodCwgdHlwZTogJ2JvdHRvbS1taWRkbGUnIH1dO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCB7IHg6IHB4LCB5OiBweSB9ID0gcG9pbnQ7XG4gICAgICAgICAgICBpZiAoKChweCAtIHBvcy54KSAqIChweCAtIHBvcy54KSArIChweSAtIHBvcy55KSAqIChweSAtIHBvcy55KSkgPCByICogcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGJvcmRlclR5cGU6IHBvaW50LnR5cGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICog5pW05b2i56ym5ZCI6L+e57q/6KaB5rGCXG4gICAgKiBAcGFyYW0gcG9pbnRzIFxuICAgICogQHBhcmFtIHdpZHRoIFxuICAgICogQHBhcmFtIHN0cm9rZUNvbG9yIFxuICAgICovXG4gICAgc3RhdGljIHJlc2hhcnBQb2ludHMocG9pbnRzOiBBcnJheTxQb3NpdGlvbj4pOiBBcnJheTxQb3NpdGlvbj4ge1xuICAgICAgICBsZXQgcHJldlBvaW50OiBQb3NpdGlvbiA9IHBvaW50c1swXTtcbiAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICBhcnJheS5wdXNoKHByZXZQb2ludCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUG9pbnQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICAvL+S4jeWcqOWQjOS4gOawtOW5s+e6v1xuICAgICAgICAgICAgaWYgKGN1cnJQb2ludC55ICE9PSBwcmV2UG9pbnQueSAmJiBjdXJyUG9pbnQueCAhPT0gcHJldlBvaW50LngpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHsgeDogY3VyclBvaW50LngsIHk6IHByZXZQb2ludC55IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXJyYXkucHVzaChjdXJyUG9pbnQpO1xuICAgICAgICAgICAgcHJldlBvaW50ID0gY3VyclBvaW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0T2Zmc2V0WChub2RlOiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vZGUucGFyZW50RWxlbWVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3QgY3VyciA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgcmV0dXJuIGN1cnIgLSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHJhbmRvbUNvbG9yKCkge1xuICAgICAgICBsZXQgc3RyID0gXCIjXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICBzdHIgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreS4gOS4quaVsOWAvOaYr+WQpuWcqOWPpuS4gOS4quaVsOWAvOeahOWinuebiuWMuumXtOS4rVxuICAgICAqIEBwYXJhbSB2YWwgXG4gICAgICogQHBhcmFtIG9mZnNldCBcbiAgICAgKiBAcGFyYW0gY29tcGFyZVZhbHVlIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyBBcHByb3htYXRlVmFsdWVJblJhbmdlKHZhbDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlciwgY29tcGFyZVZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh2YWwgLSBvZmZzZXQpIDw9IGNvbXBhcmVWYWx1ZSAmJiAodmFsICsgb2Zmc2V0KSA+PSBjb21wYXJlVmFsdWU7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgZ2V0RW1wdHlWYWx1ZTxUPih2YWw6IFQsIGVtcHR5VmFsOiBUKTogVCB7XG4gICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZW1wdHlWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlubbpm4ZcbiAgICAgKiBAcGFyYW0gYXJyYXkgXG4gICAgICogQHBhcmFtIGRlbGV0ZUl0ZW1zIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVVbmlvblNldDxUPihhcnJheTogQXJyYXk8VD4sIGRlbGV0ZUl0ZW1zOiBBcnJheTxUPik6IEFycmF5PFQ+IHtcbiAgICAgICAgY29uc3QgYXJyYXlTZXQgPSBuZXcgU2V0KGFycmF5KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWxldGVJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRlbGV0ZUl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKGFycmF5U2V0LmhhcyhpdGVtKSkge1xuICAgICAgICAgICAgICAgIGFycmF5U2V0LmRlbGV0ZShpdGVtKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGFycmF5U2V0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbnVsbFRvU3RyaW5nKHZhbDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JtYXROb3coZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKCksIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlVGV4dCh0ZXh0OiBzdHJpbmcsIGRhdGE6IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlZyA9IC9cXHsoLio/KVxcfS9nO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGV4dDtcbiAgICAgICAgbGV0IG1hdGNoO1xuICAgICAgICB3aGlsZSAobWF0Y2ggPSByZWcuZXhlYyh0ZXh0KSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbWF0Y2hbMV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG1hdGNoWzBdLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvL+iOt+WPluWSjOW9k+WJjeaXpeacn+ebuOW3rueahOenkuaVsFxuICAgIHN0YXRpYyBnZXROb3dEaWZmU2Vjb25kcyhkYXRlOiBEYXRlIHwgc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgZGF0ZSA9IHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IG5vdy5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgLyAxMDAwO1xuICAgIH1cblxuICAgIC8v6aqM6K+B5b2T5YmN5a2X56ym5Liy5piv5ZCm5Li65pel5pyf5qC85byPXG4gICAgc3RhdGljIGlzRGF0ZShzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByZWcgPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC87XG4gICAgICAgIHJldHVybiByZWcudGVzdChzdHIpO1xuICAgIH1cblxuXG5cbiAgICBzdGF0aWMgY2xvbmVWYWx1ZSh2YWw6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgaXNDb25zdHJ1Y3RvcihmOmFueSk6Ym9vbGVhbiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgZigpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHZlcmlmeSBlcnIgaXMgdGhlIGV4cGVjdGVkIGVycm9yIGFuZCB0aGVuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQsIExlYWZFbGVtZW50LCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuXG4vKipcbiAqIOWFg+e0oOeXlei/uei3n+i4qlxuICovXG50eXBlIERlbHRhVHlwZSA9ICdpbnNlcnQnIHwgJ2RlbGV0ZScgfCAnZm9ybWF0JyB8ICdkZWxUZXh0JyB8ICdpbnNUZXh0JztcblxuLyoqXG4gKiDmj5LlhaXlhYPntKBcbiAqL1xuZXhwb3J0IHR5cGUgSW5zZXJ0T3BzRGVsdGEgPSB7XG4gICAgaW5zZXJ0OiBFbGVtZW50XG59XG5cblxuLyoqXG4gKiDliKDpmaTlhYPntKBcbiAqL1xuZXhwb3J0IHR5cGUgRGVsZXRlRWxlT3BzRGVsdGEgPSB7XG4gICAgZGVsZXRlOiBFbGVtZW50O1xufVxuLyoqXG4gKiDmlofmnKzovpPlhaVcbiAqL1xuZXhwb3J0IHR5cGUgSW5zZXJ0VGV4dE9wc0RlbHRhID0ge1xuICAgIGluc1RleHQ6IHtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgfVxuICAgIGNvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiDmlofmnKzliKDpmaRcbiAqL1xuZXhwb3J0IHR5cGUgRGVsZXRlVGV4dE9wc0RlbHRhID0ge1xuICAgIGRlbFRleHQ6IHtcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgfSxcbiAgICBjb250ZW50OiBzdHJpbmc7XG59XG4vKipcbiAqIOWxnuaAp+WPmOabtOiusOW9leWJjeWQjuWAvFxuICovXG5leHBvcnQgdHlwZSBkaWZmUHJvcFR5cGUgPSB7XG4gICAgW1Byb3BOYW1lOiBzdHJpbmddOiB7XG4gICAgICAgIG9sZFZhbHVlOiBhbnksXG4gICAgICAgIG5ld1ZhbHVlOiBhbnlcbiAgICB9XG59O1xuLyoqXG4gKiDorr7nva7lsZ7mgKdcbiAqL1xuZXhwb3J0IHR5cGUgRm9ybWF0T3BzRGVsdGEgPSB7XG4gICAgZm9ybWF0OiBkaWZmUHJvcFR5cGU7XG59XG5cblxudHlwZSBvcHNUeXBlcyA9IEluc2VydFRleHRPcHNEZWx0YSB8IEluc2VydE9wc0RlbHRhIHwgRGVsZXRlVGV4dE9wc0RlbHRhIHwgRm9ybWF0T3BzRGVsdGEgfCBEZWxldGVFbGVPcHNEZWx0YTtcbnR5cGUgb3BzTW9kZWw8VCA9IG9wc1R5cGVzPiA9IHsgaW5kZXg6IG51bWJlciwgcGFyZW50SW5kZXg6IG51bWJlcjsgcHJldkluZGV4OiBudW1iZXIsIGVsZTogRWxlbWVudCwgb3BzOiBUIH07XG5leHBvcnQgdHlwZSBvcHNUcmFja01vZGVsPFQgPSBvcHNUeXBlcz4gPSBPbWl0PG9wc01vZGVsPFQ+LCAnZWxlJz47XG5leHBvcnQgY29uc3QgZG9jT3BzTWFwOiBNYXA8RWxlbWVudCwgQXJyYXk8b3BzTW9kZWw+PiA9IG5ldyBNYXAoKTtcbmxldCB0cmFjZVRyYWNraW5nRmxhZzogYm9vbGVhbiA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUcmFjZVRyYWNraW5nRmxhZyhmbGFnOiBib29sZWFuKTogdm9pZCB7XG4gICAgdHJhY2VUcmFja2luZ0ZsYWcgPSBmbGFnO1xufVxuXG4vKipcbiAqIOaKkeWItuWPmOabtOeahOi/vei4quS/ruaUuVxuICog5Zyo5p+Q5Lqb5oOF5Ya15LiL5LiN6ZyA6KaB6L+b6KGM5L+u5pS555qE6Lef6Liq77yM5L6L5aaC77ya5Zyo5Yid5aeL5YyW5Yqg6L295paH5qGj5pe277yM5Li65LqG5o+Q6auY5pWI546H77yM5aKe5Yqg5bqV5bGC5byA5YWzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwcmVzc1RyYWNraW5nPFQ+KGNiOiAoKSA9PiBUKTogVCB7XG4gICAgY29uc3QgdG1wID0gdHJhY2VUcmFja2luZ0ZsYWc7XG4gICAgdHJhY2VUcmFja2luZ0ZsYWcgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2IoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJhY2VUcmFja2luZ0ZsYWcgPSB0bXA7XG4gICAgfVxufVxuXG5cbmZ1bmN0aW9uIGdldERvY0N0eChlbGU6IEVsZW1lbnQpOiB7IGRvYzogRWxlbWVudCwgb3B0aW9uczogVmlld09wdGlvbnMgfSB8IG51bGwge1xuICAgIGlmICghdHJhY2VUcmFja2luZ0ZsYWcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8v5b2T5YmN5YWD57Sg55qE5LiK57qn6L+Y5rKh5pyJ5re75Yqg5YiwZG9t5Lit77yM5q2k5pe25Y+q6ZyA6KaB5aSE55CG5LiK57qn5Y2z5Y+vXG4gICAgY29uc3QgZG9jID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KGVsZSwgKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ2RvYycpIGFzIGFueTtcbiAgICBpZiAoIWRvYykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGRvY1sndmlld09wdGlvbnMnXSBhcyBWaWV3T3B0aW9ucztcbiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuZW5hYmxlVHJhY2tIaXN0b3J5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBkb2MsXG4gICAgICAgIG9wdGlvbnM6IGRvY1sndmlld09wdGlvbnMnXVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRFbGUoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKGVsZS50eXBlID09PSAncHN5bScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gZ2V0RG9jQ3R4KGVsZSk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY29uc3Qgc2VyaWFsaXplT2JqID0gZ2V0RWxlU2VyaWFsaXplRnVuYyhlbGUsIG9wdGlvbnMpO1xuICAgIC8vIGlmICghc2VyaWFsaXplT2JqKSB7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgYXBwZW5kVG9PcHMob3B0aW9ucy5kb2MsIGVsZSwge1xuICAgICAgICBpbnNlcnQ6IGVsZS5jbG9uZSh0cnVlKVxuICAgIH0pXG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVsZShlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZWxlLnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXREb2NDdHgoZWxlKTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRUb09wcyhvcHRpb25zLmRvYywgZWxlLCB7XG4gICAgICAgIGRlbGV0ZTogZWxlLmNsb25lKHRydWUpLFxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGFwcGVuZFRvT3BzKGRvYzogRWxlbWVudCwgZWxlOiBFbGVtZW50LCBvcHM6IG9wc1R5cGVzKTogdm9pZCB7XG4gICAgbGV0IGFycmF5ID0gZG9jT3BzTWFwLmdldChkb2MpO1xuICAgIGlmICghYXJyYXkpIHtcbiAgICAgICAgZG9jT3BzTWFwLnNldChkb2MsIGFycmF5ID0gW10pXG4gICAgfVxuICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQoZWxlKTtcbiAgICBhcnJheS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChlbGUsIHRydWUpLFxuICAgICAgICBwYXJlbnRJbmRleDogRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGVsZS5wYXJlbnQsIHRydWUpLFxuICAgICAgICBwcmV2SW5kZXg6IHByZXZFbGUgPyBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocHJldkVsZSwgdHJ1ZSkgOiAtMSxcbiAgICAgICAgZWxlLFxuICAgICAgICBvcHNcbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5wdXRUZXh0KGVsZTogRWxlbWVudCwgc3RhcnRJbmRleDogbnVtYmVyLCBpbnB1dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldERvY0N0eChlbGUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRUb09wcyhvcHRpb25zLmRvYywgZWxlLCB7XG4gICAgICAgIGluc1RleHQ6IHtcbiAgICAgICAgICAgIGluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgbGVuZ3RoOiBpbnB1dC5sZW5ndGhcbiAgICAgICAgfSxcbiAgICAgICAgY29udGVudDogaW5wdXRcbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVGV4dChlbGU6IEVsZW1lbnQsIGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gZ2V0RG9jQ3R4KGVsZSk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRUb09wcyhvcHRpb25zLmRvYywgZWxlLCB7XG4gICAgICAgIGRlbFRleHQ6IHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbGVuZ3RoXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnRcbiAgICB9KVxufVxuXG4vKipcbiAqIOiusOW9leWFg+e0oOagvOW8j+WMllxuICogQHBhcmFtIGVsZSB8XG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFbGUoZWxlOiBFbGVtZW50LCBwcm9wczogb2JqZWN0KTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldERvY0N0eChlbGUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZUtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG4gICAgaWYgKCF1cGRhdGVLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGVuZFRvT3BzKG9wdGlvbnMuZG9jLCBlbGUsIHtcbiAgICAgICAgZm9ybWF0OiBnZXRFeGFjdERpZmZQcm9wcyhlbGUucHJvcHMsIHByb3BzKVxuICAgIH0pXG59XG5cbi8qKlxuICog6K6w5b2V5pu05paw5YWD57Sg5bGe5oCn77yM6YCa6L+H5Luj55CG6I635Y+WXG4gKiBAcGFyYW0gZWxlXG4gKiBAcGFyYW0gcFxuICogQHBhcmFtIG9sZFZhbHVlXG4gKiBAcGFyYW0gbmV3VmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ1VwZGF0ZUVsZVByb3BzKGVsZTogRWxlbWVudCwgcDogc3RyaW5nIHwgc3ltYm9sIHwgbnVtYmVyLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldERvY0N0eChlbGUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGVuZFRvT3BzKG9wdGlvbnMuZG9jLCBlbGUsIHtcbiAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICBbcF06IHtcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0RXhhY3REaWZmUHJvcHMob2xkUHJvcHM6IG9iamVjdCwgbmV3UHJvcHM6IG9iamVjdCk6IGRpZmZQcm9wVHlwZSB7XG4gICAgY29uc3Qgb2JqOiBkaWZmUHJvcFR5cGUgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhuZXdQcm9wcykuZm9yRWFjaChrZXkgPT4gb2JqW2tleV0gPSB7XG4gICAgICAgIG9sZFZhbHVlOiBDb21tb25VdGlsLmNsb25lVmFsdWUob2xkUHJvcHNba2V5XSksXG4gICAgICAgIG5ld1ZhbHVlOiBDb21tb25VdGlsLmNsb25lVmFsdWUobmV3UHJvcHNba2V5XSlcbiAgICB9KVxuICAgIHJldHVybiBvYmo7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGF0Y2goZG9jOiBFbGVtZW50KTogQXJyYXk8b3BzVHJhY2tNb2RlbD4ge1xuICAgIGNvbnN0IGluc2VydE9wc01hcDogTWFwPEVsZW1lbnQsIG9wc01vZGVsPiA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBmb3JtYXRPcHNNYXA6IE1hcDxFbGVtZW50LCBvcHNNb2RlbDxGb3JtYXRPcHNEZWx0YT4+ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHBhdGNoczogQXJyYXk8b3BzVHJhY2tNb2RlbD4gPSBbXTtcbiAgICBjb25zdCBvcHMgPSBkb2NPcHNNYXAuZ2V0KGRvYyk7XG4gICAgaWYgKCFvcHMgfHwgIW9wcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBkZWxPcHNNYXAgPSBnZXREZWxldGVFbGVPcHMob3BzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvcCA9IG9wc1tpXVxuICAgICAgICBjb25zdCBlbGUgPSBvcC5lbGU7XG4gICAgICAgIC8v5L+u5pS55qC35byPXG4gICAgICAgIGlmICgnZm9ybWF0JyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgIC8v5L+u5pS55o+S5YWl5oiW6ICF5Yig6Zmk55qE5LiN5YGa5aSE55CGXG4gICAgICAgICAgICBpZiAoaW5zZXJ0T3BzTWFwLmhhcyhlbGUpIHx8IGRlbE9wc01hcC5oYXMoZWxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lkIjlubbmk43kvZzlsZ7mgKdcbiAgICAgICAgICAgIGxldCBwcmV2Rm9ybWF0T3A6IG9wc01vZGVsPEZvcm1hdE9wc0RlbHRhPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICgocHJldkZvcm1hdE9wID0gZm9ybWF0T3BzTWFwLmdldChlbGUpKSkge1xuICAgICAgICAgICAgICAgIG1lcmdlRGlmZlByb3BzKHByZXZGb3JtYXRPcC5vcHMuZm9ybWF0LCBvcC5vcHMuZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1hdE9wc01hcC5zZXQoZWxlLCBvcCBhcyBvcHNNb2RlbDxGb3JtYXRPcHNEZWx0YT4pXG4gICAgICAgIH1cbiAgICAgICAgcGF0Y2hzLnB1c2goeyBpbmRleDogb3AuaW5kZXgsIHBhcmVudEluZGV4OiBvcC5wYXJlbnRJbmRleCwgcHJldkluZGV4OiBvcC5wcmV2SW5kZXgsIG9wczogb3Aub3BzIH0pO1xuICAgIH1cbiAgICAvL+a4heepulxuICAgIG9wcy5sZW5ndGggPSAwO1xuICAgIHJldHVybiBwYXRjaHM7XG59XG5cbi8qKlxuICog5riF6Zmk5Y+Y5pu055qE5pWw5o2uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclRyYWNlcyhkb2M6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICBkb2NPcHNNYXAuZGVsZXRlKGRvYyk7XG59XG5cbi8qKlxuICog6I635Y+W5Yig6Zmk5YWD57Sg55qE5pON5L2cXG4gKiDlnKjnlJ/miJDkv67mlLnnmoTmibnmk43kvZzml7bvvIzpnIDopoHlhYjojrflj5bliKDpmaTnmoTlhYPntKDvvIzlm6DkuLrlhYPntKDooqvliKDpmaTlkI7vvIzmiYDmnInnmoTlhbbku5bmk43kvZzpg73kuI3pnIDopoHooqvorrDlvZXkuoZcbiAqL1xuZnVuY3Rpb24gZ2V0RGVsZXRlRWxlT3BzKG9wczogQXJyYXk8b3BzTW9kZWw+KTogTWFwPEVsZW1lbnQsIG9wc01vZGVsPiB7XG4gICAgY29uc3QgZGVsT3BzTWFwOiBNYXA8RWxlbWVudCwgb3BzTW9kZWw+ID0gbmV3IE1hcCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzW2ldXG4gICAgICAgIGNvbnN0IGluZGV4ID0gb3AuaW5kZXg7XG4gICAgICAgIGNvbnN0IGVsZSA9IG9wLmVsZTtcbiAgICAgICAgLy/kv67mlLnnmoTlhYPntKDlkI7pnaLooqvliKDpmaTvvIzpgqPkuYjor6XlpITnkIbkvZzlup9cbiAgICAgICAgaWYgKCdkZWxldGUnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgZGVsT3BzTWFwLnNldChlbGUsIG9wKVxuICAgICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIGRlbE9wc01hcDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXJyYXlJdGVtPFQ+KGFycjogQXJyYXk8VD4sIGl0ZW06IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxuLyoqXG4gKiDlkIzkuIDmibnmrKHnmoTkv67mlLnvvIzkv67mlLnkuoblkIzkuIDlsZ7mgKfvvIzpnIDopoHlkIjlubblpJrkuKrlkIzkuIDlsZ7mgKfnmoTlpJrkuKrkv67mlLlcbiAqIOS4vuS+i++8mnRhYmxl55qEY29sc+WuveW6puS/ruaUuVxuICogQHBhcmFtIHByZXZGb3JtYXRcbiAqIEBwYXJhbSBjdXJyRm9ybWF0XG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGlmZlByb3BzKHByZXZGb3JtYXQ6IGRpZmZQcm9wVHlwZSwgY3VyckZvcm1hdDogZGlmZlByb3BUeXBlKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMoY3VyckZvcm1hdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoa2V5IGluIHByZXZGb3JtYXQpIHtcbiAgICAgICAgICAgIHByZXZGb3JtYXRba2V5XS5uZXdWYWx1ZSA9IGN1cnJGb3JtYXRba2V5XS5uZXdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXZGb3JtYXRba2V5XSA9IGN1cnJGb3JtYXRba2V5XTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cblxuIiwiLy/orqLpmIXogIUgU3Vic2NyaXB0aW9uXG4vL+WPkeW4g+iAhSjkuovku7bmupApIEV2ZW50U291cmNlXG5cbnR5cGUgRXZlbnRIYW5kbGVyPFQgPSB2b2lkPiA9IChkYXRhOiBUKSA9PiB2b2lkO1xuXG4vKipcbiAqIOiuoumYheiAhVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3Vic2NyaXB0aW9uPFQ9YW55PiB7XG4gICAgcHJvdGVjdGVkIGNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgYWJzdHJhY3QgaW52b2tlKGRhdGE6IFQpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgdW5zdWJzY3JpYmUoKTogdm9pZDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEV2ZW50U291cmNlQ29yZTxUPiB7XG4gICAgcHJvdGVjdGVkIGNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3ViczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgbmV4dChkYXRhPzogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnMuZm9yRWFjaCgoc3ViKSA9PiB7XG4gICAgICAgICAgICBzdWIuaW52b2tlKGRhdGEpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRTdWIoc3ViOiBTdWJzY3JpcHRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlU3ViKHN1YjogU3Vic2NyaXB0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdWJzLmluZGV4T2Yoc3ViKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3Vicy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5zdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vicy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgfVxuXG59XG5cbi8qKlxuICogRE9N5LqL5Lu25aSE55CGXG4gKi9cbmV4cG9ydCBjbGFzcyBET01FdmVudFNvdXJjZTxUIGV4dGVuZHMgRXZlbnQ+IGV4dGVuZHMgRXZlbnRTb3VyY2VDb3JlPFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZG9tOiBOb2RlLCBwdWJsaWMgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGNvbnN0IGNiOiBFdmVudExpc3RlbmVyID0gKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmV4dChlIGFzIFQpO1xuICAgICAgICB9O1xuICAgICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYik7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoZXZ0OlQpPT52b2lkKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgY29uc3Qgc3ViID0gbmV3IERPTVN1YnNjcmlwdGlvbihsaXN0ZW5lciwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWIoc3ViKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkU3ViKHN1Yik7XG4gICAgICAgIHJldHVybiAgc3ViO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERPTVN1YnNjcmlwdGlvbjxUPiBleHRlbmRzIFN1YnNjcmlwdGlvbjxUPiB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGxpc3RlbmVyOiAoZXZ0OlQpPT52b2lkLCBwdWJsaWMgY2FuY2VsOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaW52b2tlKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RlbmVyKGRhdGEpO1xuICAgIH1cblxuICAgIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBTdWJqZWN0PFQ+IGV4dGVuZHMgRXZlbnRTb3VyY2VDb3JlPFQ+e1xuICAgIHN1YnNjcmliZShsaXN0ZW5lcjooZGF0YTpUKT0+dm9pZCk6U3Vic2NyaXB0aW9ue1xuICAgICAgICBjb25zdCBzdWIgPSBuZXcgU3ViamVjdFN1YnNjcmlwdGlvbihsaXN0ZW5lciwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWIoc3ViKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkU3ViKHN1Yik7XG4gICAgICAgIHJldHVybiBzdWI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3ViamVjdFN1YnNjcmlwdGlvbiBleHRlbmRzIFN1YnNjcmlwdGlvbntcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbGlzdGVuZXI6KGRhdGE6YW55KT0+dm9pZCwgcHVibGljIGNhbmNlbDogKCkgPT4gdm9pZCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGludm9rZShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5saXN0ZW5lcihkYXRhKTtcbiAgICB9XG5cbiAgICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50PFQgZXh0ZW5kcyBFdmVudD4oZG9tOk5vZGUsdHlwZTpzdHJpbmcpOkRPTUV2ZW50U291cmNlPFQ+e1xuICAgIHJldHVybiBuZXcgRE9NRXZlbnRTb3VyY2U8VD4oZG9tLHR5cGUpO1xufSIsImltcG9ydCB7IEVsZW1lbnRFdmVudCwgRXZlbnRNYXAsIEV2ZW50VHlwZXMgfSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgd2F0Y2hDaGFuZ2VkIH0gZnJvbSBcIi4vbm90aWZ5XCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBDdXJzb3JUeXBlLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgKiBhcyBIaXN0b3J5IGZyb20gJy4vZWxlbWVudC10cmFjZS10cmFja2luZyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwiLi9ldmVudC1zdWJqZWN0XCI7XG5pbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcblxuZXhwb3J0IGNsYXNzIFJlY3Qge1xuICAgIHggPSAwO1xuICAgIHkgPSAwO1xuICAgIHdpZHRoID0gMDtcbiAgICBoZWlnaHQgPSAwO1xuICAgIG1heEhlaWdodDogbnVtYmVyID0gMDtcbiAgICBtYXhXaWR0aDogbnVtYmVyID0gMDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVQcm9wcyB7XG4gICAgdHlwZTogc3RyaW5nLFxuICAgIHByb3BzPzogYW55LFxuICAgIGNoaWxkcmVuPzogQXJyYXk8U2VyaWFsaXplUHJvcHM+O1xuICAgIGNvbXBsZXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiDliLfmlrDnsbvlnotcbiAqIOWIt+aWsOWkluingu+8jOS4jemcgOimgei/m+ihjOa1i+mHj++8jOebtOaOpei/m+WFpee7mOWItlxuICog5Yi35paw5YaF5a6577yM6ZyA6KaB6YeN5paw5rWL6YeP77yM5YaN57uY5Yi2XG4gKi9cbmV4cG9ydCB0eXBlIFJlZnJlc2hUeXBlID0gJ2FwcGVhcmFuY2UnIHwgJ2NvbnRlbnQnO1xuXG4vKipcbiAqIOS/ruaUueagh+W/l1xuICovXG5leHBvcnQgZW51bSBNb2RpZnlGbGFnIHtcbiAgICAvL+iiq+S/ruaUuVxuICAgIE1vZGlmeSA9IDAsXG4gICAgLy/ml6Dkv67mlLlcbiAgICBOb25lID0gMSxcbiAgICAvL+WtkOmhueiiq+S/ruaUuVxuICAgIFRyYWNrID0gMlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9uQ2hhbmdlRXZlbnRQcm9wcyB7XG4gICAgZGF0YTogYW55XG59XG5cbmV4cG9ydCB0eXBlIEVsZW1lbnRIYW5kbGVyPEUgZXh0ZW5kcyBFbGVtZW50RXZlbnQgPSBFbGVtZW50RXZlbnQ+ID0gKGU6IEUpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZWdpc3RlclR5cGVIYW5kbGVyUHJvcHM8VCBleHRlbmRzIEVsZW1lbnQ+IHtcbiAgICBlbGVtZW50VHlwZTogYW55LFxuICAgIGV2ZW50TmFtZTogRXZlbnRUeXBlcyxcbiAgICBoYW5kbGVyOiBFbGVtZW50SGFuZGxlcixcbiAgICB1c2VDYXB0dXJlOiBib29sZWFuLFxuICAgIGN0eDogRWxlbWVudEV2ZW50WydjdHgnXVxufVxuXG4vKipcbiAqIOexu+Wei+S6i+S7tuWkhOeQhlxuICovXG5leHBvcnQgY29uc3QgZWxlbWVudFR5cGVFdmVudEhhbmRsZXI6IEFycmF5PFJlZ2lzdGVyVHlwZUhhbmRsZXJQcm9wczxFbGVtZW50Pj4gPSBbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGludm9rZVR5cGVIYW5kbGVyKGVsZTogRWxlbWVudCwgZXZlbnROYW1lOiBFdmVudFR5cGVzLCBlOiBFbGVtZW50RXZlbnQsIHVzZUNhcHR1cmU6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IHByZWRpY2F0ZSA9IChlbGU6IEVsZW1lbnQsIHRoOiBSZWdpc3RlclR5cGVIYW5kbGVyUHJvcHM8RWxlbWVudD4pOiBib29sZWFuID0+IHtcbiAgICAgICAgaWYgKENvbW1vblV0aWwuaXNDb25zdHJ1Y3Rvcih0aC5lbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGUgaW5zdGFuY2VvZiB0aC5lbGVtZW50VHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aC5lbGVtZW50VHlwZShlKTtcblxuICAgICAgICB9XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHRoIG9mIGVsZW1lbnRUeXBlRXZlbnRIYW5kbGVyKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoZWxlLCB0aCkgJiYgdGguZXZlbnROYW1lID09PSBldmVudE5hbWUgJiYgdGgudXNlQ2FwdHVyZSA9PT0gdXNlQ2FwdHVyZSAmJiB0aC5jdHggPT09IGUuY3R4KSB7XG4gICAgICAgICAgICB0aC5oYW5kbGVyKGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIOWumuS5iee7hOS7tueahOaVsOaNru+8jOmFjee9rlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XG4gICAgbW9kaWZ5RmxhZzogTW9kaWZ5RmxhZyA9IE1vZGlmeUZsYWcuTW9kaWZ5O1xuICAgIGlzTW91c2VlbnRlciE6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZXZlbnRNYXA6IEV2ZW50TWFwIHwgbnVsbDtcbiAgICBwcml2YXRlIF9yZWZyZXNoRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByb3RlY3RlZCBfb25DaGFuZ2VFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSBvYnNlcnZlcnM6IFdlYWtNYXA8RWxlbWVudCwgQXJyYXk8U3Vic2NyaXB0aW9uPj4gPSBuZXcgV2Vha01hcCgpO1xuICAgIHBhaW50UmVuZGVyczogQXJyYXk8UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgIG1lYXN1cmVSZW5kZXIhOiBSZW5kZXJPYmplY3QgfCBudWxsO1xuICAgIGZvY3VzYWJsZSE6IGJvb2xlYW47XG4gICAgaXNGb2N1c2VkITogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiDkv67ppbDlhYPntKDkuI3og73lpI3liLbjgIHluo/liJfljJbjgIHliKDpmaQo6ZyA6KaB5omL5Yqo5Yig6ZmkKVxuICAgICAqL1xuICAgIGlzRGVjb3JhdGUhOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIOWPr+eCueWHu+aAp++8jOS+i+Wmgu+8mm51bGwtdGV4dCDljaDkvY3nrKblhYPntKDkuI3lhbflpIflj6/ngrnlh7vog73liptcbiAgICAgKiAyLue8lui+kemhteeciemhteiEmueahOiDveWKm1xuICAgICAqL1xuICAgIGRpc2FibGVDbGljayE6IGJvb2xlYW47XG4gICAgLy/mmK/lkKbooqvph4rmlL5cbiAgICBkaXNwb3NlZCE6IGJvb2xlYW47XG4gICAgLy/mmK/lkKbmtYvph4/lrozmr5VcbiAgICBsb2FkZWQhOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3BhcmVudCE6IEJyYW5jaEVsZW1lbnQgfCBudWxsO1xuICAgIGdldCBwYXJlbnQoKTogQnJhbmNoRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQgYXMgQnJhbmNoRWxlbWVudDtcbiAgICB9XG5cbiAgICBzZXQgcGFyZW50KHZhbDogQnJhbmNoRWxlbWVudCkge1xuICAgICAgICB0aGlzLl9wYXJlbnQgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJvcHMhOiBQO1xuICAgIHB1YmxpYyBnZXQgcHJvcHMoKTogUCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHByb3BzKHZhbHVlOiBQKSB7XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGhpcy5fcHJvcHMgPSB3YXRjaENoYW5nZWQodmFsdWUsICh0YXJnZXQsIHAsIG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VkKHAsIG9sZFZhbHVlLCBuZXdWYWx1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgLy90aGlzLl9wcm9wcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5Q2hhbmdlZChwOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgSGlzdG9yeS5sb2dVcGRhdGVFbGVQcm9wcyh0aGlzLCBwLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJylcbiAgICB9XG5cbiAgICAvL+WFg+e0oOaYr+WQpuemgeatouWkjeWItu+8jOS+i+WmguaJueazqOWFg+e0oFxuICAgIC8vZm9yYmlkQ29weTogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2V2ZW50TWFwID0gbmV3IEV2ZW50TWFwKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZUVudGVyJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHwgbnVsbDtcblxuICAgIGFic3RyYWN0IHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGw7XG5cbiAgICBhYnN0cmFjdCBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudDtcblxuICAgIGFic3RyYWN0IGdldENoaWxkTGVuZ3RoKCk6IG51bWJlcjtcblxuICAgIGFic3RyYWN0IGdldFNlbGZMZW5ndGgocHVyZTogYm9vbGVhbik6IG51bWJlcjtcblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50TWFwPy5jbGVhcih0aGlzKTtcbiAgICAgICAgdGhpcy5wYWludFJlbmRlcnMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fcGFyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZWFzdXJlUmVuZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSh0aGlzKTtcbiAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQ8VCBleHRlbmRzIEVsZW1lbnRFdmVudD4oZXZlbnQ6IEV2ZW50VHlwZXMsIGhhbmRsZTogKGV2dDogVCkgPT4gdm9pZCwgdXNlQ2FwdHVyZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudE1hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVudE1hcCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRNYXA/LmFkZCh0aGlzLCBldmVudCwgaGFuZGxlLCB1c2VDYXB0dXJlKTtcbiAgICB9XG5cbiAgICByZW1vdmVFdmVudChldmVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudE1hcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdldmVudE1hcCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ldmVudE1hcC5yZW1vdmUodGhpcywgZXZlbnRJZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRXZlbnRCeVR5cGUoZXZlbnRUeXBlOiBFdmVudFR5cGVzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRNYXApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlbnRNYXAgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXZlbnRNYXAucmVtb3ZlQnlUeXBlKHRoaXMsIGV2ZW50VHlwZSk7XG4gICAgfVxuXG4gICAgaW52b2tlRXZlbnQoZXZlbnQ6IEV2ZW50VHlwZXMsIGV2dDogRWxlbWVudEV2ZW50LCB1c2VyQ2FwdHVyZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZXZlbnRNYXApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZXZlbnRNYXAgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgLy/op6blj5Hnsbvlnovkuovku7ZcbiAgICAgICAgaW52b2tlVHlwZUhhbmRsZXIodGhpcywgZXZlbnQsIGV2dCwgdXNlckNhcHR1cmUpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudE1hcC5nZXQodGhpcywgZXZlbnQsIHVzZXJDYXB0dXJlKTtcbiAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goaXRlbSA9PiBpdGVtKGV2dCkpO1xuICAgIH1cblxuICAgIGJlZ2luTWVhc3VyZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWludFJlbmRlcnMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBlbmRNZWFzdXJlKCk6dm9pZHt9XG5cblxuICAgIGdldEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldENoaWxkSW5kZXgodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCByZWZyZXNoU3ViamVjdCgpOiBTdWJqZWN0PHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZnJlc2hFdmVudDtcbiAgICB9XG5cbiAgICBnZXQgb25DaGFuZ2VTdWJqZWN0KCk6IFN1YmplY3Q8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25DaGFuZ2VFdmVudDtcbiAgICB9XG5cbiAgICByZWZyZXNoVmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVmcmVzaEV2ZW50Lm5leHQoKTtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBwdWJPbkNoYW5nZShzZWxmQ2hhbmdlOiBwdWJDaGFuZ2VUeXBlKTogdm9pZFxuXG4gICAgdW5zdWJzY3JpYmUoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5vYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgc3Vicy5mb3JFYWNoKHN1YiA9PiB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkc3Vic2NyaWJlKGVsZW1lbnQ6IEVsZW1lbnQsIC4uLnN1YjogQXJyYXk8U3Vic2NyaXB0aW9uPik6IHZvaWQge1xuICAgICAgICBsZXQgc3VicyA9IHRoaXMub2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdWJzKSB7XG4gICAgICAgICAgICBzdWJzID0gW107XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVycy5zZXQoZWxlbWVudCwgc3Vicyk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vicy5wdXNoKC4uLnN1Yik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5b2T5YmN6IqC54K5XG4gICAgICovXG4gICAgcmVtb3ZlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8qKlxuICog5pyA5bCP6IqC54K55YWD57SgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMZWFmRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIEVsZW1lbnQ8UD4ge1xuICAgIGN1cnNvclR5cGU6IEN1cnNvclR5cGUgPSAndGV4dCc7XG5cbiAgICBnZXRDaGlsZExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZkxlbmd0aChwdXJlOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcHViT25DaGFuZ2Uoc2VsZkNoYW5nZTogcHViQ2hhbmdlVHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk5vbmUpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLlRyYWNrICYmIHNlbGZDaGFuZ2UgPT09ICd0cmFja2VyJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTW9kaWZ5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGZDaGFuZ2UgPT09ICd0cmFja2VyJykge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5UcmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5RmxhZyA9IE1vZGlmeUZsYWcuTW9kaWZ5O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlRXZlbnQubmV4dCgpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIOaeneW5suiKgueCue+8jOWMheWQq+iLpeW5suS4quaeneW5suaIluiAheWPtuWtkOiKgueCuVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJhbmNoRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIEVsZW1lbnQ8UD4ge1xuICAgIHByaXZhdGUgY2hpbHJlbjogQXJyYXk8RWxlbWVudD4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0eXBlKTtcbiAgICB9XG5cbiAgICBhZGRDaGlsZChjaGlsZDogRWxlbWVudCwgaW5kZXggPSAtMSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign5b2T5YmN5YWD57Sg5bey6KKr6YeK5pS+LOS4jeiDveWGjea3u+WKoOWtkOWFg+e0oCcsIHRoaXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+W9k+WJjeWFg+e0oOW3suiiq+mHiuaUvizkuI3og73lho3mt7vliqDlrZDlhYPntKAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcbiAgICAgICAgSGlzdG9yeS5pbnNlcnRFbGUoY2hpbGQpO1xuICAgICAgICBjb25zdCByZWZTdWIgPSBjaGlsZC5yZWZyZXNoU3ViamVjdC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFN1YmplY3QubmV4dChkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9uQ2hhbmdlU3ViID0gY2hpbGQub25DaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgndHJhY2tlcicpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRzdWJzY3JpYmUoY2hpbGQsIHJlZlN1Yiwgb25DaGFuZ2VTdWIpO1xuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlQ2hpbGQoY2hpbGQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoaWxyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5Li65p+l5om+5Yiw5b2T5YmN5YWD57SgJyk7XG4gICAgICAgIH1cbiAgICAgICAgSGlzdG9yeS5yZW1vdmVFbGUoY2hpbGQpO1xuICAgICAgICB0aGlzLmRpc3Bvc2VDaGlsZChjaGlsZCk7XG4gICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGlscmVuW2luZGV4XTtcbiAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5Li65p+l5om+5Yiw5b2T5YmN5YWD57SgJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNwb3NlQ2hpbGQoY2hpbGQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZShjaGlsZCk7XG4gICAgICAgIGlmIChjaGlsZC5wYXJlbnQgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICg8YW55PmNoaWxkKS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICB9XG5cbiAgICBjbGVhckl0ZW1zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNoaWxyZW5dO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRCeUluZGV4KGkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNoaWxyZW5dO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gaXRlbXNbaV07XG4gICAgICAgICAgICBjaGlsZC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4ubGVuZ3RoO1xuICAgIH1cblxuICAgIGZpbmQocHJlZGljYXRlOiAoaXRlbTogRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbik6IEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuLmZpbmQocHJlZGljYXRlKTtcbiAgICB9XG5cbiAgICBnZXRDaGlsZDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbltpbmRleF0gYXMgVDtcbiAgICB9XG5cbiAgICBnZXRDaGlsZEluZGV4KGNoaWxkOiBFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbi5pbmRleE9mKGNoaWxkKTtcbiAgICB9XG5cbiAgICBnZXRDaGlsZExlbmd0aCgpOiBudW1iZXIge1xuICAgICAgICAvL3JldHVybiB0aGlzLmNoaWxyZW4ucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgMSArIGN1cnIuZ2V0Q2hpbGRMZW5ndGgoKSwgMCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxyZW4ucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoY3VyciBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldiArIDEgKyBjdXJyLmdldENoaWxkTGVuZ3RoKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnIgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5nZXRDaGlsZExlbmd0aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKVxuICAgIH1cblxuICAgIGdldFNlbGZMZW5ndGgocHVyZTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxICsgdGhpcy5jaGlscmVuLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLmdldFNlbGZMZW5ndGgocHVyZSk7XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuXG4gICAgdHJlZUZpbHRlcihwcmVkaWNhdGU6IChpdGVtOiBFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUoaXRlbSwgaSkpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCguLi5pdGVtLnRyZWVGaWx0ZXIocHJlZGljYXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHRyZWVGaW5kKHByZWRpY2F0ZTogKGl0ZW06IEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKGl0ZW0sIGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRoID0gaXRlbS50cmVlRmluZChwcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJPbkNoYW5nZShzZWxmQ2hhbmdlOiBwdWJDaGFuZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuVHJhY2sgJiYgc2VsZkNoYW5nZSA9PT0gJ3RyYWNrZXInKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5Nb2RpZnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZkNoYW5nZSA9PT0gJ3RyYWNrZXInKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk5vbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGlmeUZsYWcgPSBNb2RpZnlGbGFnLlRyYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5Nb2RpZnk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldENoaWxkKGkpLnB1Yk9uQ2hhbmdlKCd0by1jaGlsZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb25DaGFuZ2VFdmVudC5uZXh0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBwdWJDaGFuZ2VUeXBlID0gJ3NlbGYnIHwgJ3RyYWNrZXInIHwgJ3RvLWNoaWxkJztcblxuLyoqXG4gKiDooYzlhoXnvJbnu4TlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZUdyb3VwRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIEJyYW5jaEVsZW1lbnQ8UD4ge1xufVxuXG4vKipcbiAqIOWdl+e6p+WFg+e0oO+8jOebruWJjeWPquaciVDlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrQ29udGVudEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBCcmFuY2hFbGVtZW50PFA+IHtcbn1cblxuLyoqXG4gKiDljIXlkKvlnZfnuqfmuLLmn5PlhYPntKDnmoTlrrnlmajlhYPntKAs5L6L5aaCYm9keeOAgXRhYmxlLWNlbGzjgIF0YWJsZeetiVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2tDb250YWluZXJFbGVtZW50PFAgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IGV4dGVuZHMgQnJhbmNoRWxlbWVudDxQPiB7XG4gICAgbm9GaWxsRW1wdHkhOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIHJlYWRFbGVtZW50UHJvcHM8VD4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBwcm9wczogVCB8IHVuZGVmaW5lZDtcbiAgICBjaGlsZHJlbjogYW55IHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbGVtZW50RmFjdG9yeTxUID0gbnVsbD4ge1xuICAgIG9wdGlvbnMhOiBWaWV3T3B0aW9ucztcblxuICAgIGFic3RyYWN0IG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgICBhYnN0cmFjdCBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8VD4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50O1xuXG4gICAgcmVhZENvbXBsZXRlZChlbGU6IEVsZW1lbnQsIGNoaWxkcmVuOiBBcnJheTxFbGVtZW50Pik6IHZvaWQge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgoaXRlbSA9PiBlbGUuYWRkQ2hpbGQoaXRlbSkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgIHRhcmdldDogRWxlbWVudFxuICAgIGlzRnVsbFNlbGVjdGVkOiBib29sZWFuLFxuICAgIHN0YXJ0T2Zmc2V0OiBudW1iZXIsXG4gICAgZW5kT2Zmc2V0OiBudW1iZXIsXG4gICAgc2VsZWN0ZWRDaGlsZHJlbjogQXJyYXk8U2VsZWN0aW9uQ29udGVudFJhbmdlPixcbn1cblxuLyoqXG4gKiDnvJbovpHmqKHlvI9cbiAqL1xuZXhwb3J0IGVudW0gRWRpdE1vZGUge1xuICAgIC8qKlxuICAgICAqIOiHqueUseaooeW8j++8jOiuvuiuoeaooeadv+aXtuS9v+eUqFxuICAgICAqL1xuICAgIEZyZWUgPSAwLFxuICAgIC8qKlxuICAgICAqIOS4peagvOaooeW8j++8jOWMu+eUn+S5puWGmeaooeW8j+aXtuS9v+eUqCzlj6rlj6/mm7TmlLnmlbDmja7lhYPlgLxcbiAgICAgKi9cbiAgICBTdHJpY3QgPSAxLFxuICAgIC8qKlxuICAgICAqIOafpeeci+aooeW8jyzku7vkvZXkv67mlLnmlofmoaPnmoTmk43kvZzpg73kuI3lhYHorrjvvIzkvYbmmK/lj6/pgInkuK3vvIzmnInmi5bok51cbiAgICAgKi9cbiAgICBWaWV3ID0gMixcbiAgICAvKipcbiAgICAgKiDnpoHnlKjmqKHlvI/vvIzlvZPliY3ljLrln5/kuI3lj6/ngrnlh7vvvIzkuI3lj6/pgInkuK3vvIzpobXohJrjgIHpobXnnInnvJbovpHml7bnmoTmjqfliLZcbiAgICAgKi9cbiAgICBEaXNhYmxlZCA9IDNcbn1cblxuLyoqXG4gKiDmlofmoaPmqKHlvI9cbiAqL1xuZXhwb3J0IGVudW0gRG9jTW9kZSB7XG4gICAgRGVzaWduID0gMCxcbiAgICAvKipcbiAgICAgKiDlrozlhajnvJbovpHmqKHlvI9cbiAgICAgKi9cbiAgICBFZGl0ID0gMSxcbiAgICAvKipcbiAgICAgKiDooajljZXnvJbovpHmqKHlvI9cbiAgICAgKi9cbiAgICBGb3JtRWRpdCA9IDIsXG4gICAgLyoqXG4gICAgICog6KeG5Zu+5qih5byP77yM5Y+q6IO95p+l55yLXG4gICAgICovXG4gICAgVmlldyA9IDNcbn1cblxuZXhwb3J0IGVudW0gQm9vbGVhbkVudW0ge1xuICAgIE51bGwsXG4gICAgVHJ1ZSxcbiAgICBGYWxzZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvY1VzZXIge1xuICAgIGlkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBQYWdlT3B0aW9ucyB7XG4gICAgcHJpdmF0ZSBfd2lkdGg6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXIgPSAwO1xuICAgIG9yaWVudDogT3JpZW50VHlwZSA9ICdwb3J0cmFpdCc7XG5cbiAgICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgb3JpZW50OiBPcmllbnRUeXBlID0gJ3BvcnRyYWl0Jykge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMub3JpZW50ID0gb3JpZW50O1xuICAgIH1cblxuICAgIGdldCB3aWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5vcmllbnQgPT09ICdsYW5kc2NhcGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0IHdpZHRoKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudCA9PT0gJ2xhbmRzY2FwZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHNldCBoZWlnaHQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIE9yaWVudFR5cGUgPSAnbGFuZHNjYXBlJyB8ICdwb3J0cmFpdCc7XG5leHBvcnQgdHlwZSBQYWdlTGF5b3V0TW9kZSA9ICdzaW5nbGVQYWdlJyB8ICdtdWx0aVBhZ2UnIHwgJ2ZpdC1wYWdlJztcblxuZXhwb3J0IGNsYXNzIFZpZXdPcHRpb25zIHtcbiAgICBjb3B5UmlnaHRJbmZvITogc3RyaW5nO1xuICAgIHdhdGVybWFyaz86IHN0cmluZztcbiAgICBkcmF3TGluZVJlY3RDb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgIGRyYXdDaGFyUmVjdENvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgZHJhd1N5bWJvbHNDb2xvciA9ICdyZ2IoMTI4LDEyOCwxMjgpJztcbiAgICBkZWZhdWx0Rm9udE5hbWUgPSAn5a6L5L2TJztcbiAgICBkZWZhdWx0Rm9udFNpemUgPSAxNDtcbiAgICBkZWZhdWx0Q29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICBzZWxlY3Rpb25PdmVybGF5c0NvbG9yID0gJ3JnYigxMzEsMTc1LDE1NSwwLjUpJztcbiAgICBkYXRhRWxlT3ZlcmxheXNDb2xvciA9ICdyZ2IoMTMxLDE3NSwxNTUsMC41KSc7XG4gICAgZGF0YUVsZVJlYWRPbmx5T3ZlcmxheUNvbG9yID0gJyNkOWQ5ZDknO1xuICAgIGRhdGFFbGVPdXRsaW5lQ29sb3IgPSAncmdiKDEzMSwxNzUsMTU1LDAuNyknO1xuICAgIHZpZXdCYWNrY29sb3IgPSAncmdiKDIzMCwyMzAsMjMwKSc7XG4gICAgcGFyYVN5bWJvbENvbG9yID0gJ3JnYigxMjgsMTI4LDEyOCknO1xuICAgIGRhdGFHcm91cENvbG9yID0gJ3JnYigwLDgwLDE3OSknO1xuICAgIC8v5paw5aKeLeeVmeeXleWdl+aWh+acrOminOiJslxuICAgIHRyYWNrSW5zQ29sb3IgPSAnI2ZmNGQ0Zic7XG4gICAgLy/liKDpmaQt55WZ55eV5Z2X5paH5pys6aKc6ImyXG4gICAgdHJhY2tEZWxDb2xvciA9ICcjMDAwJztcbiAgICBzaG93TGluZVJlY3QhOiBib29sZWFuO1xuICAgIHNob3dDaGFyUmVjdCE6IGJvb2xlYW47XG4gICAgc2hvd1BhcmFNYXJrITogYm9vbGVhbjtcbiAgICBzaG93VGFiQ2hhciE6IGJvb2xlYW47XG4gICAgc2hvd1NwYWNlQ2hhciE6IGJvb2xlYW47XG4gICAgc2hvd0xpbmVCcmVhayE6IGJvb2xlYW47XG4gICAgYm9keU1hcmdpblRvcCA9IDg7XG4gICAgZGV2TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNob3dEZWJ1ZyE6IGJvb2xlYW47XG4gICAgcmVzb3VyY2VNb2RlOiAnbGF6eScgfCAnaW1tZWRpYXRlJyA9ICdpbW1lZGlhdGUnO1xuICAgIHNlY3JldEJyb3dzZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8v5Lit5paH54mI5byP77yM5aSE55CG5Lit5paH5o2i6KGM77yb5YmN572u5qCH54K55ZKM5ZCO572u5qCH54K5XG4gICAgY2hpbmVzZUxheW91dDogYm9vbGVhbiA9IHRydWU7XG4gICAgLy/orrDlvZXlj5jmm7RcbiAgICBlbmFibGVUcmFja0hpc3Rvcnk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvL+iusOW9leWPmOabtOeahOasoeaVsFxuICAgIHRyYWNrSGlzdG9yeU1heExlbmd0aDogbnVtYmVyID0gNTAwO1xuICAgIC8v5pW06aG15qih5byP77yM5LiN5YiG6aG1XG4gICAgcHJpdmF0ZSBfZnVsbFBhZ2VWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gICAgZ2V0IGZ1bGxQYWdlVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxQYWdlVmlldztcbiAgICB9XG5cbiAgICBzZXQgZnVsbFBhZ2VWaWV3KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmZ1bGxQYWdlVmlldyA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mdWxsUGFnZVZpZXcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KCdmb3JjZScpO1xuICAgIH1cblxuICAgIC8v5q+r57Gz5ZKM5YOP57Sg55qE6L2s5o2i5q+UXG4gICAgbW1Ub1BpeGVsc1JhdGlvOiBudW1iZXIgPSAwO1xuICAgIGN1cnNvcjogQ3Vyc29yVHlwZSA9ICd0ZXh0JztcbiAgICAvL+W9k+WJjeaWh+aho+WBj+enu+mHj++8jOWPluWGs+S6jua7muWKqOadoeS9jee9rlxuICAgIHRyYW5zbGF0ZVkgPSAwO1xuICAgIC8v5paH5qGj5aSn5bCPXG4gICAgZG9jUGFnZVNldHRpbmdzOiBQYWdlT3B0aW9ucyA9IG5ldyBQYWdlT3B0aW9ucygwLCAwKTtcbiAgICAvL+inhuWbvuWkp+WwjyxjYW52YXNcbiAgICB2aWV3U2V0dGluZ3MhOiB7XG4gICAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICAgIGhlaWdodDogbnVtYmVyO1xuICAgIH07XG4gICAgcGFnZU51bUZvcm1hdDogc3RyaW5nID0gJ+esrHtpbmRleH3pobUv5YWxe2NvdW50femhtSc7XG4gICAgcGFnZU51bU9mZnNldDogbnVtYmVyID0gMDtcbiAgICAvL+mhteaOkueJiOaooeW8j++8muWNlemhteaooeW8j+OAgeWkmumhteaooeW8j+OAgemAguW6lOmhteWuveaooeW8j1xuICAgIHBhZ2VMYXlvdXRNb2RlOiBQYWdlTGF5b3V0TW9kZSA9ICdzaW5nbGVQYWdlJztcblxuICAgIC8v5YaF5a655Yy65a695bqm77yM5Y+X5a6h6ZiF56qX5Y+j5a695bqm5b2x5ZONXG4gICAgZ2V0IGNvbnRlbnRXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5zaG93UmV2aWV3V2luZG93KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NQYWdlU2V0dGluZ3Mud2lkdGggKyB0aGlzLnJldmlld1dpbmRvd1dpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRvY1BhZ2VTZXR0aW5ncy53aWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlhoXlrrnljLrln5/nmoTpq5jluqZcbiAgICAgKiDlkIzml7bpmZDlrppjYW52YXPnmoTmnIDlsI/lrr3luqZcbiAgICAgKi9cbiAgICBnZXQgQ29udGVudFdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMuZG9jUGFnZVNldHRpbmdzLndpZHRoO1xuICAgICAgICBpZiAodGhpcy5zaG93UmV2aWV3V2luZG93KSB7XG4gICAgICAgICAgICB3aWR0aCA9IHdpZHRoICsgdGhpcy5yZXZpZXdXaW5kb3dXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuXG4gICAgLy/kuKTkuKrpobXnmoTpl7Tot51cbiAgICBkb2NTcGFjZTogbnVtYmVyID0gMDtcbiAgICAvL+aYr+WQpuaYvuekuuWuoemYheeql+WPo1xuICAgIHByaXZhdGUgX3Nob3dSZXZpZXdXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZ2V0IHNob3dSZXZpZXdXaW5kb3coKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93UmV2aWV3V2luZG93O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2hvd1Jldmlld1dpbmRvdyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX3Nob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG93UmV2aWV3V2luZG93ID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIC8v5a6h6ZiF56qX5Y+j5a695bqmXG4gICAgcmV2aWV3V2luZG93V2lkdGg6IG51bWJlciA9IDIwMDtcbiAgICAvL+e8qeaUvlxuICAgIHByaXZhdGUgX3NjYWxlOiBudW1iZXIgPSAxO1xuICAgIGdldCBzY2FsZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NhbGU7XG4gICAgfVxuXG4gICAgc2V0IHNjYWxlKHZhbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3NjYWxlID0gdmFsO1xuICAgIH1cblxuICAgIGRvY01vZGU6IERvY01vZGUgPSBEb2NNb2RlLkRlc2lnbjtcbiAgICAvL+aYr+WQpuaYvuekuuWuoemYheeXlei/uVxuICAgIHByaXZhdGUgX3Nob3dUcmFja0NoYW5nZXM6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHB1YmxpYyBnZXQgc2hvd1RyYWNrQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dUcmFja0NoYW5nZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzaG93VHJhY2tDaGFuZ2VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93VHJhY2tDaGFuZ2VzID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dUcmFja0NoYW5nZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KCdmb3JjZScpO1xuICAgIH1cblxuICAgIC8v5Yy75Zix5omT5Y2w5qih5byP77yM5paH5a2X6KGM5qih5byPLOWwhuihqOagvOWkmuihjOWvueixoei9rOaNouS4uuWkmuS4quihqOagvOihjOWvueixoVxuICAgIHRleHRSb3dMaW5lTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGVkaXRVc2VyOiBEb2NVc2VyID0geyBpZDogJycsIG5hbWU6ICcnIH07XG4gICAgLy/nlZnnl5XljLrln5/nmoTnlJ/mlYjml7bpl7TmrrXvvIzlkIzkuIDnlKjmiLfnmoTnlZnnl5XlnZflnKjmraTml7bpl7TlpJbpnIDopoHnlJ/miJDmlrDnmoTnlZnnl5XlnZdcbiAgICB0cmFja0NoYW5nZVBlcmlvZDogbnVtYmVyID0gMTA7XG4gICAgb25DaGFuZ2U6IFN1YmplY3Q8J2RlbWFuZCcgfCAnZm9yY2UnPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIE1hcmdpblByb3BzIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0b3A6IG51bWJlciA9IDAsIHB1YmxpYyBib3R0b206IG51bWJlciA9IDAsIHB1YmxpYyBsZWZ0OiBudW1iZXIgPSAwLCBwdWJsaWMgcmlnaHQ6IG51bWJlciA9IDApIHtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBNYXJnaW5Qcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lTWFyZ2luID0gbmV3IE1hcmdpblByb3BzKHRoaXMudG9wLCB0aGlzLmJvdHRvbSwgdGhpcy5sZWZ0LCB0aGlzLnJpZ2h0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lTWFyZ2luO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhZGRpbmdQcm9wcyBleHRlbmRzIE1hcmdpblByb3BzIHtcbn1cblxuZXhwb3J0IGNsYXNzIEJvcmRlclByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgd2lkdGg6IG51bWJlciA9IDAsIHB1YmxpYyBjb2xvcjogc3RyaW5nID0gJ3RyYW5zcGFyZW50JywgcHVibGljIHN0eWxlOiBzdHJpbmcgPSAnc29saWQnKSB7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQm9yZGVyUHJvcHMge1xuICAgICAgICByZXR1cm4gbmV3IEJvcmRlclByb3BzKHRoaXMud2lkdGgsIHRoaXMuY29sb3IsIHRoaXMuc3R5bGUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElEaXNwb3NlIHtcbiAgICBhYnN0cmFjdCBkZXN0cm95KCk6IHZvaWQ7XG59XG5cblxuZXhwb3J0IHR5cGUgVGV4dEFsaWduID0gJ2NlbnRlcicgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2p1c3RpZnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xufVxuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG59XG5cblxuZXhwb3J0IHR5cGUgTnVsbGFibGVUeXBlPFQ+ID0ge1xuICAgIFtQcm9wTmFtZSBpbiBrZXlvZiBUXT86IFRbUHJvcE5hbWVdXG59O1xuXG5cbmV4cG9ydCB0eXBlIFJlcXVpcmVkVHlwZTxUPiA9IHtcbiAgICBbUHJvcE5hbWUgaW4ga2V5b2YgVF06IFRbUHJvcE5hbWVdXG59O1xuXG5leHBvcnQgdHlwZSBJbWdMb2FkU3RhdHVzID0gJ25vJyB8ICdsb2FkaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2Vycm9yJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2FuY2VsVG9rZW5GbiB7XG4gICAgY2FuY2VsPzogKCkgPT4gdm9pZDtcbiAgICBvbkZpbmlzaD86ICgpID0+IHZvaWQ7XG59XG5cblxudHlwZSBJVm9pZEZuID0gKCkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIG9uY2VUYXNrKGZuOiBJVm9pZEZuKTogSVZvaWRGbiB7XG4gICAgbGV0IHN0YXRlID0gZmFsc2U7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSB0cnVlO1xuICAgICAgICBmbigpO1xuICAgIH07XG59IiwiaW1wb3J0IHtOdWxsYWJsZVR5cGUsIE9yaWVudFR5cGUsIFBhZGRpbmdQcm9wcywgVGV4dEFsaWduLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtUcmFja1J1blR5cGVFbnVtfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcbmltcG9ydCB7Q29tbW9uVXRpbH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcblxuZXhwb3J0IHR5cGUgVGV4dFZlcnRBbGlnbiA9ICdzdXBlcnNjcmlwdCcgfCAnc3Vic2NyaXB0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIC8vIG9uUHJvcGVydHlDaGFuZ2VkU3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvLyBwcm9wZXJ0eUNoYW5nZWQocHJvcGVyeU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vICAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkU3ViamVjdC5uZXh0KHByb3BlcnlOYW1lKTtcbiAgICAvLyB9XG4gICAgYWJzdHJhY3QgZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55O1xuXG4gICAgcHJpdmF0ZSBfX2F0dGFjaGVkUHJvcGVydHkhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gICAgc2V0UHJvcGVydHk8VD4ocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fX2F0dGFjaGVkUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX19hdHRhY2hlZFByb3BlcnR5ID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fX2F0dGFjaGVkUHJvcGVydHlbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fX2F0dGFjaGVkUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5fX2F0dGFjaGVkUHJvcGVydHlbcHJvcGVydHlOYW1lXTtcbiAgICB9XG5cbiAgICBnZXRQcm9wZXJ0eTxUPihwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFQgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLl9fYXR0YWNoZWRQcm9wZXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX19hdHRhY2hlZFByb3BlcnR5W3Byb3BlcnR5TmFtZV0gYXMgVDtcbiAgICB9XG5cbiAgICBjbG9uZUF0dGFjaGVkUHJvcGVydHkoZGVzdDogSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX19hdHRhY2hlZFByb3BlcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fX2F0dGFjaGVkUHJvcGVydHkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGRlc3Quc2V0UHJvcGVydHkoa2V5LCBDb21tb25VdGlsLmNsb25lVmFsdWUodGhpcy5fX2F0dGFjaGVkUHJvcGVydHlba2V5XSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXh0UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBjb2xvciE6IHN0cmluZztcbiAgICBmb250TmFtZSE6IHN0cmluZztcbiAgICBmb250U2l6ZSE6IG51bWJlcjtcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyB8ICdib2xkJyA9ICdub3JtYWwnO1xuICAgIGZvbnRTdHlsZTogJ25vcm1hbCcgfCAnaXRhbGljJyA9ICdub3JtYWwnO1xuICAgIC8vdGV4dERlY29yYXRpb246ICdub25lJyB8ICd1bmRlcmxpbmUnIHwgJ292ZXJsaW5lJyB8ICdsaW5lLXRocm91Z2gnID0gJ25vbmUnO1xuICAgIHVuZGVybGluZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIG92ZXJsaW5lOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGluZXRocm91Z2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBiYWNrZ3JvdW5kITogc3RyaW5nO1xuICAgIGxldHRlclNwYWNlITogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog5LiK5qCH5oiW6ICF5LiL5qCHXG4gICAgICovXG4gICAgdmVydEFsaWduITogVGV4dFZlcnRBbGlnbjtcblxuICAgIC8qKlxuICAgICAqIOWtl+espui+ueahhlxuICAgICAqL1xuICAgIGJvcmRlciE6IGJvb2xlYW47XG5cbiAgICBjbGVhckNhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9fY2FjaGVGb250ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjbG9uZShzb3VyY2U6IFRleHRQcm9wcyB8IG51bGwpOiBUZXh0UHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IHNvdXJjZSA/PyBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIHRoaXMuc2V0UHJvcHNWYWx1ZSh0aGlzLCBjbG9uZSk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzZXRQcm9wc1ZhbHVlKHNvdXJjZTogVGV4dFByb3BzLCB0YXJnZXQ6IFRleHRQcm9wcyk6IHZvaWQge1xuICAgICAgICB0YXJnZXQuY29sb3IgPSBzb3VyY2UuY29sb3I7XG4gICAgICAgIHRhcmdldC5mb250TmFtZSA9IHNvdXJjZS5mb250TmFtZTtcbiAgICAgICAgdGFyZ2V0LmZvbnRTaXplID0gc291cmNlLmZvbnRTaXplO1xuICAgICAgICB0YXJnZXQuZm9udFdlaWdodCA9IHNvdXJjZS5mb250V2VpZ2h0O1xuICAgICAgICB0YXJnZXQuZm9udFN0eWxlID0gc291cmNlLmZvbnRTdHlsZTtcbiAgICAgICAgdGFyZ2V0LnVuZGVybGluZSA9IHNvdXJjZS51bmRlcmxpbmU7XG4gICAgICAgIHRhcmdldC5vdmVybGluZSA9IHNvdXJjZS5vdmVybGluZTtcbiAgICAgICAgdGFyZ2V0LmxpbmV0aHJvdWdoID0gc291cmNlLmxpbmV0aHJvdWdoO1xuICAgICAgICB0YXJnZXQuYmFja2dyb3VuZCA9IHNvdXJjZS5iYWNrZ3JvdW5kO1xuICAgICAgICB0YXJnZXQubGV0dGVyU3BhY2UgPSBzb3VyY2UubGV0dGVyU3BhY2U7XG4gICAgICAgIHRhcmdldC52ZXJ0QWxpZ24gPSBzb3VyY2UudmVydEFsaWduO1xuICAgICAgICB0YXJnZXQuYm9yZGVyID0gc291cmNlLmJvcmRlcjtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFRleHRQcm9wcz4gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuY29sb3IgJiYgdGhpcy5jb2xvciAhPT0gdmlld09wdGlvbnMuZGVmYXVsdENvbG9yKSB7XG4gICAgICAgICAgICBwcm9wc1tcImNvbG9yXCJdID0gdGhpcy5jb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb250TmFtZSAmJiB0aGlzLmZvbnROYW1lICE9PSB2aWV3T3B0aW9ucy5kZWZhdWx0Rm9udE5hbWUpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZm9udE5hbWVcIl0gPSB0aGlzLmZvbnROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnRTaXplICE9PSB2aWV3T3B0aW9ucy5kZWZhdWx0Rm9udFNpemUpIHtcbiAgICAgICAgICAgIHByb3BzW1wiZm9udFNpemVcIl0gPSB0aGlzLmZvbnRTaXplO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnRXZWlnaHQgJiYgdGhpcy5mb250V2VpZ2h0ICE9PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgICBwcm9wc1tcImZvbnRXZWlnaHRcIl0gPSB0aGlzLmZvbnRXZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICBwcm9wc1tcInVuZGVybGluZVwiXSA9IHRoaXMudW5kZXJsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm92ZXJsaW5lKSB7XG4gICAgICAgICAgICBwcm9wc1tcIm92ZXJsaW5lXCJdID0gdGhpcy5vdmVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saW5ldGhyb3VnaCkge1xuICAgICAgICAgICAgcHJvcHNbXCJsaW5ldGhyb3VnaFwiXSA9IHRoaXMubGluZXRocm91Z2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmFja2dyb3VuZCkge1xuICAgICAgICAgICAgcHJvcHNbXCJiYWNrZ3JvdW5kXCJdID0gdGhpcy5iYWNrZ3JvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxldHRlclNwYWNlKSB7XG4gICAgICAgICAgICBwcm9wc1tcImxldHRlclNwYWNlXCJdID0gdGhpcy5sZXR0ZXJTcGFjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb250U3R5bGUgJiYgdGhpcy5mb250U3R5bGUgIT09ICdub3JtYWwnKSB7XG4gICAgICAgICAgICBwcm9wc1tcImZvbnRTdHlsZVwiXSA9IHRoaXMuZm9udFN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZlcnRBbGlnbikge1xuICAgICAgICAgICAgcHJvcHNbXCJ2ZXJ0QWxpZ25cIl0gPSB0aGlzLnZlcnRBbGlnbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ib3JkZXIpIHtcbiAgICAgICAgICAgIHByb3BzW1wiYm9yZGVyXCJdID0gdGhpcy5ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX19jYWNoZUZvbnQhOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgZ2V0Rm9udCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fX2NhY2hlRm9udCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19jYWNoZUZvbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZm9udFN0ciA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9udFN0eWxlICYmIHRoaXMuZm9udFN0eWxlICE9PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgICAgIGZvbnRTdHIgKz0gdGhpcy5mb250U3R5bGUgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5mb250V2VpZ2h0ICYmIHRoaXMuZm9udFdlaWdodCAhPT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgICAgICBmb250U3RyICs9IHRoaXMuZm9udFdlaWdodCArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5b2T5YmN5a2Y5Zyo5LiK5qCH5oiW6ICF5LiL5qCH77yM5aSn5bCP5Li6My81XG4gICAgICAgICAgICBmb250U3RyICs9ICh0aGlzLnZlcnRBbGlnbiA/IHRoaXMuZm9udFNpemUgKiAzIC8gNSA6IHRoaXMuZm9udFNpemUpICsgJ3B4ICc7XG4gICAgICAgICAgICBmb250U3RyICs9IGZvbnRNYXBGdW5jLmdldEZvbnRNYXAodGhpcy5mb250TmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9fY2FjaGVGb250ID0gZm9udFN0cjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fY2FjaGVGb250O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXF1YWxzKHByb3BzOiBUZXh0UHJvcHMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFja2dyb3VuZCA9PT0gcHJvcHMuYmFja2dyb3VuZFxuICAgICAgICAgICAgJiYgdGhpcy5jb2xvciA9PT0gcHJvcHMuY29sb3JcbiAgICAgICAgICAgICYmIHRoaXMuZm9udE5hbWUgPT09IHByb3BzLmZvbnROYW1lXG4gICAgICAgICAgICAmJiB0aGlzLmZvbnRTaXplID09PSBwcm9wcy5mb250U2l6ZVxuICAgICAgICAgICAgJiYgdGhpcy5mb250V2VpZ2h0ID09PSBwcm9wcy5mb250V2VpZ2h0XG4gICAgICAgICAgICAmJiB0aGlzLmxldHRlclNwYWNlID09PSBwcm9wcy5sZXR0ZXJTcGFjZVxuICAgICAgICAgICAgJiYgdGhpcy51bmRlcmxpbmUgPT09IHByb3BzLnVuZGVybGluZVxuICAgICAgICAgICAgJiYgdGhpcy5vdmVybGluZSA9PT0gcHJvcHMub3ZlcmxpbmVcbiAgICAgICAgICAgICYmIHRoaXMubGluZXRocm91Z2ggPT09IHByb3BzLmxpbmV0aHJvdWdoXG4gICAgICAgICAgICAmJiB0aGlzLmZvbnRTdHlsZSA9PT0gcHJvcHMuZm9udFN0eWxlXG4gICAgICAgICAgICAmJiB0aGlzLnZlcnRBbGlnbiA9PT0gcHJvcHMudmVydEFsaWduXG4gICAgICAgICAgICAmJiB0aGlzLmJvcmRlciA9PT0gcHJvcHMuYm9yZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFncmFwaFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgLy/mrrXokL3pu5jorqTnmoTmlofmnKzlsZ7mgKdcbiAgICAvL3RleHRQcm9wcyE6IFRleHRQcm9wcztcbiAgICBpbmRlbnQgPSAwO1xuICAgIGhhbmdpbmcgPSAwO1xuICAgIGxpbmVIZWlnaHQgPSAxLjM7XG4gICAgdGV4dEFsaWduOiBUZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgbnVtYmVyVHlwZSA9IC0xO1xuICAgIHBhZ2VCcmVhayA9IGZhbHNlO1xuXG4gICAgY2xvbmUoZGVzdDogUGFyYWdyYXBoUHJvcHMgfCBudWxsID0gbnVsbCk6IFBhcmFncmFwaFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBQYXJhZ3JhcGhQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5pbmRlbnQgPSB0aGlzLmluZGVudDtcbiAgICAgICAgY2xvbmUubnVtYmVyVHlwZSA9IHRoaXMubnVtYmVyVHlwZTtcbiAgICAgICAgY2xvbmUubGluZUhlaWdodCA9IHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgY2xvbmUudGV4dEFsaWduID0gdGhpcy50ZXh0QWxpZ247XG4gICAgICAgIC8vY2xvbmUudGV4dFByb3BzID0gdGhpcy50ZXh0UHJvcHMuY2xvbmUobmV3IFRleHRQcm9wcygpKTtcbiAgICAgICAgLy/lvLrliLbmjaLpobXlsZ7mgKfkuI3lj6/lpI3liLZcbiAgICAgICAgLy9jbG9uZS5wYWdlQnJlYWs9dGhpcy5wYWdlQnJlYWs7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFBhcmFncmFwaFByb3BzPiA9IHt9O1xuICAgICAgICBpZiAodGhpcy5pbmRlbnQpIHtcbiAgICAgICAgICAgIHByb3BzW1wiaW5kZW50XCJdID0gdGhpcy5pbmRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFuZ2luZykge1xuICAgICAgICAgICAgcHJvcHNbXCJoYW5naW5nXCJdID0gdGhpcy5oYW5naW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpbmVIZWlnaHQgJiYgdGhpcy5saW5lSGVpZ2h0ICE9PSAxLjMpIHtcbiAgICAgICAgICAgIHByb3BzW1wibGluZUhlaWdodFwiXSA9IHRoaXMubGluZUhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50ZXh0QWxpZ24gJiYgdGhpcy50ZXh0QWxpZ24gIT09IFwibGVmdFwiKSB7XG4gICAgICAgICAgICBwcm9wc1tcInRleHRBbGlnblwiXSA9IHRoaXMudGV4dEFsaWduO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm51bWJlclR5cGUgIT09IC0xKSB7XG4gICAgICAgICAgICBwcm9wc1tcIm51bWJlclR5cGVcIl0gPSB0aGlzLm51bWJlclR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFnZUJyZWFrKSB7XG4gICAgICAgICAgICBwcm9wc1tcInBhZ2VCcmVha1wiXSA9IHRoaXMucGFnZUJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgd2lkdGghOiBudW1iZXI7XG4gICAgaGVpZ2h0ITogbnVtYmVyO1xuICAgIHBhZGRpbmchOiBQYWRkaW5nUHJvcHM7XG4gICAgaGVhZGVyTGluZSA9IDEyO1xuICAgIGZvb3RlckxpbmUgPSAxMjtcbiAgICBvcmllbnQ6IE9yaWVudFR5cGUgPSAncG9ydHJhaXQnXG4gICAgY3JlYXRlVXNlcklkITogc3RyaW5nO1xuICAgIGNyZWF0ZVVzZXJOYW1lITogc3RyaW5nO1xuICAgIGNyZWF0ZURhdGUhOiBzdHJpbmc7XG4gICAgc2NyaXB0cyE6IHN0cmluZztcblxuICAgIGNsb25lKGRlc3Q6IERvY3VtZW50UHJvcHMpOiBEb2N1bWVudFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBEb2N1bWVudFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgY2xvbmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIGNsb25lLnBhZGRpbmcgPSB0aGlzLnBhZGRpbmcuY2xvbmUoKTtcbiAgICAgICAgY2xvbmUuaGVhZGVyTGluZSA9IHRoaXMuaGVhZGVyTGluZTtcbiAgICAgICAgY2xvbmUuZm9vdGVyTGluZSA9IHRoaXMuZm9vdGVyTGluZTtcbiAgICAgICAgY2xvbmUuc2NyaXB0cyA9IHRoaXMuc2NyaXB0cztcbiAgICAgICAgY2xvbmUuY3JlYXRlVXNlcklkID0gdGhpcy5jcmVhdGVVc2VySWQ7XG4gICAgICAgIGNsb25lLmNyZWF0ZVVzZXJOYW1lID0gdGhpcy5jcmVhdGVVc2VyTmFtZTtcbiAgICAgICAgY2xvbmUuY3JlYXRlRGF0ZSA9IHRoaXMuY3JlYXRlRGF0ZTtcbiAgICAgICAgY2xvbmUub3JpZW50ID0gdGhpcy5vcmllbnQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcygpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERvY3VtZW50UHJvcHM+ID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgICAgICAgcGFkZGluZzogdGhpcy5wYWRkaW5nLFxuICAgICAgICAgICAgaGVhZGVyTGluZTogdGhpcy5oZWFkZXJMaW5lLFxuICAgICAgICAgICAgZm9vdGVyTGluZTogdGhpcy5mb290ZXJMaW5lLFxuICAgICAgICAgICAgY3JlYXRlRGF0ZTogdGhpcy5jcmVhdGVEYXRlLFxuICAgICAgICAgICAgY3JlYXRlVXNlck5hbWU6IHRoaXMuY3JlYXRlVXNlck5hbWUsXG4gICAgICAgICAgICBjcmVhdGVVc2VySWQ6IHRoaXMuY3JlYXRlVXNlcklkXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnNjcmlwdHMpIHtcbiAgICAgICAgICAgIHByb3BzWydzY3JpcHRzJ10gPSB0aGlzLnNjcmlwdHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3JpZW50ICYmIHRoaXMub3JpZW50ICE9PSAncG9ydHJhaXQnKSB7XG4gICAgICAgICAgICBwcm9wc1snb3JpZW50J10gPSB0aGlzLm9yaWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIHNpemUhOiBudW1iZXI7XG4gICAgaXNDaGVja2VkITogYm9vbGVhbjtcbiAgICAvL+eUqOS6juWkjemAieahhuWIhue7hFxuICAgIGdyb3VwTmFtZSE6IHN0cmluZyB8IG51bGw7XG5cbiAgICBjbG9uZShkZXN0OiBDaGVja0JveFByb3BzKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgQ2hlY2tCb3hQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5zaXplID0gdGhpcy5zaXplO1xuICAgICAgICBjbG9uZS5pc0NoZWNrZWQgPSB0aGlzLmlzQ2hlY2tlZDtcbiAgICAgICAgY2xvbmUuZ3JvdXBOYW1lID0gdGhpcy5ncm91cE5hbWU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgIGlzQ2hlY2tlZDogdGhpcy5pc0NoZWNrZWQsXG4gICAgICAgICAgICBncm91cE5hbWU6IHRoaXMuZ3JvdXBOYW1lLFxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkaW9Cb3hQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuXG4gICAgc2l6ZSE6IG51bWJlcjtcbiAgICBpc0NoZWNrZWQhOiBib29sZWFuO1xuXG4gICAgY2xvbmUoZGVzdDogUmFkaW9Cb3hQcm9wcykge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFJhZGlvQm94UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUuc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgY2xvbmUuaXNDaGVja2VkID0gdGhpcy5pc0NoZWNrZWQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgIGlzQ2hlY2VkOiB0aGlzLmlzQ2hlY2tlZFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlUm93UHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBtaW5IZWlnaHQhOiBudW1iZXI7XG4gICAgaGVhZGVyUm93ITogYm9vbGVhbjtcblxuICAgIGNsb25lKGRlc3Q6IFRhYmxlUm93UHJvcHMpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBUYWJsZVJvd1Byb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLm1pbkhlaWdodCA9IHRoaXMubWluSGVpZ2h0O1xuICAgICAgICBjbG9uZS5oZWFkZXJSb3cgPSB0aGlzLmhlYWRlclJvdztcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8VGFibGVSb3dQcm9wcz4gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMubWluSGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgcHJvcHNbXCJtaW5IZWlnaHRcIl0gPSB0aGlzLm1pbkhlaWdodDtcbiAgICAgICAgICAgIHByb3BzW1wiaGVhZGVyUm93XCJdID0gdGhpcy5oZWFkZXJSb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyUm93KSB7XG4gICAgICAgICAgICBwcm9wc1snaGVhZGVyUm93J10gPSB0aGlzLmhlYWRlclJvdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBUYWJsZUFsaWdubWVudCA9ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInO1xuXG5leHBvcnQgY2xhc3MgVGFibGVQcm9wcyBleHRlbmRzIElOb3RpZnlQcm9wZXJ0eUNoYW5nZWQge1xuICAgIGlkITogc3RyaW5nO1xuICAgIC8vYXV0byDmiJbogIXlhbfkvZPnmoTlgLxcbiAgICB3aWR0aCE6IG51bWJlciB8IHN0cmluZztcbiAgICBjb2xzITogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPjtcbiAgICBhbGlnbm1lbnQhOiBUYWJsZUFsaWdubWVudDtcbiAgICBib3JkZXI6ICdhbGwnIHwgJ25vbmUnID0gJ2FsbCc7XG4gICAgYWxsb3dCcmVha1JvdyE6IGJvb2xlYW47XG5cbiAgICBjbG9uZShkZXN0OiBUYWJsZVByb3BzKTogVGFibGVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgVGFibGVQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5pZCA9IHRoaXMuaWQ7XG4gICAgICAgIGNsb25lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgY2xvbmUuY29scyA9IFsuLi50aGlzLmNvbHNdO1xuICAgICAgICBjbG9uZS5hbGlnbm1lbnQgPSB0aGlzLmFsaWdubWVudDtcbiAgICAgICAgY2xvbmUuYm9yZGVyID0gdGhpcy5ib3JkZXI7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBjb2xzOiB0aGlzLmNvbHMsXG4gICAgICAgICAgICBhbGlnbm1lbnQ6IHRoaXMuYWxpZ25tZW50LFxuICAgICAgICAgICAgYm9yZGVyOiB0aGlzLmJvcmRlclxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgQ2VsbE1lcmdlVHlwZSA9ICdjb2wtbWVyZ2UnIHwgJ3Jvdy1tZXJnZSc7XG5leHBvcnQgdHlwZSBWTWVyZ2VUeXBlID0gJ3Jlc3RhcnQnIHwgJ2NvbnRpbnVlJztcbmV4cG9ydCB0eXBlIEhNZXJnZVR5cGUgPSAncmVzdGFydCcgfCAnY29udGludWUnO1xuZXhwb3J0IHR5cGUgVmVydGljYWxBbGlnbiA9ICd0b3AnIHwgJ21pZGRsZScgfCAnYm90dG9tJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG5cbiAgICB2TWVyZ2UhOiBWTWVyZ2VUeXBlIHwgbnVsbDtcbiAgICBoTWVyZ2UhOiBITWVyZ2VUeXBlIHwgbnVsbDtcbiAgICB2QWxpZ24hOiBWZXJ0aWNhbEFsaWduIHwgbnVsbDtcbiAgICBiYWNrZ3JvdW5kQ29sb3IhOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICog5a+56KeS57q/XG4gICAgICovXG4gICAgZGlhZ29uYWwhOiAnbWFpbicgfCAnc3ViJyB8IG51bGw7XG5cbiAgICBjbG9uZShkZXN0OiBUYWJsZUNlbGxQcm9wcyk6IFRhYmxlQ2VsbFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBUYWJsZUNlbGxQcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS52TWVyZ2UgPSB0aGlzLnZNZXJnZTtcbiAgICAgICAgY2xvbmUuaE1lcmdlID0gdGhpcy5oTWVyZ2U7XG4gICAgICAgIGNsb25lLnZBbGlnbiA9IHRoaXMudkFsaWduO1xuICAgICAgICBjbG9uZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgY2xvbmUuZGlhZ29uYWwgPSB0aGlzLmRpYWdvbmFsO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9uczogVmlld09wdGlvbnMpOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFRhYmxlQ2VsbFByb3BzPiA9IHt9O1xuICAgICAgICBpZiAodGhpcy52TWVyZ2UpIHtcbiAgICAgICAgICAgIHByb3BzWyd2TWVyZ2UnXSA9IHRoaXMudk1lcmdlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhNZXJnZSkge1xuICAgICAgICAgICAgcHJvcHNbJ2hNZXJnZSddID0gdGhpcy5oTWVyZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudkFsaWduICYmIHRoaXMudkFsaWduICE9PSAndG9wJykge1xuICAgICAgICAgICAgcHJvcHNbJ3ZBbGlnbiddID0gdGhpcy52QWxpZ247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICBwcm9wc1snYmFja2dyb3VuZENvbG9yJ10gPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaWFnb25hbCkge1xuICAgICAgICAgICAgcHJvcHNbJ2RpYWdvbmFsJ10gPSB0aGlzLmRpYWdvbmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQaWN0dXJlUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICB0aXRsZSE6IHN0cmluZztcbiAgICB3aWR0aCE6IG51bWJlcjtcbiAgICBoZWlnaHQhOiBudW1iZXI7XG4gICAgc3JjITogc3RyaW5nO1xuICAgIGJvcmRlciE6ICdhbGwnIHwgJ25vbmUnO1xuXG4gICAgY2xvbmUoZGVzdDogUGljdHVyZVByb3BzKTogUGljdHVyZVByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBQaWN0dXJlUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBjbG9uZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgY2xvbmUuc3JjID0gdGhpcy5zcmM7XG4gICAgICAgIGNsb25lLmJvcmRlciA9IHRoaXMuYm9yZGVyO1xuICAgICAgICBjbG9uZS50aXRsZSA9IHRoaXMudGl0bGU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxQaWN0dXJlUHJvcHM+ID0ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgICAgICAgc3JjOiB0aGlzLnNyYyxcbiAgICAgICAgICAgIGJvcmRlcjogdGhpcy5ib3JkZXIsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnRpdGxlKSB7XG4gICAgICAgICAgICBwcm9wc1sndGl0bGUnXSA9IHRoaXMudGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFEZWNvcmF0ZVByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgY29udGVudCE6IHN0cmluZztcbiAgICBzaXplITogbnVtYmVyO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YURlY29yYXRlUHJvcHMpOiBEYXRhRGVjb3JhdGVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YURlY29yYXRlUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVBdHRhY2hlZFByb3BlcnR5KGNsb25lKTtcbiAgICAgICAgY2xvbmUuY29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICAgICAgY2xvbmUuc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBEYXRhRWxlVHlwZXMgPSAndGV4dCcgfCAnZHJvcGxpc3QnIHwgJ2RhdGUnIHwgJ2NoZWNrJyB8ICdpbWcnO1xuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlQmFzZVByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgbmFtZSE6IHN0cmluZztcbiAgICBmaWVsZE5hbWUhOiBzdHJpbmc7XG4gICAgY2FwdGlvbiE6IHN0cmluZztcbiAgICByZXF1aXJlZCE6IGJvb2xlYW47XG4gICAgcHJpbnRhYmxlITogYm9vbGVhbjtcbiAgICBzZWNyZXRCcm93c2UhOiBib29sZWFuO1xuICAgIGVkaXRhYmxlITogYm9vbGVhbjtcbiAgICBkZWxldGVhYmxlITogYm9vbGVhbjtcbiAgICBtaW5MZW5ndGghOiBudW1iZXI7XG4gICAgdHlwZSE6IERhdGFFbGVUeXBlcztcbiAgICB1bmRlcmxpbmUhOiBib29sZWFuO1xuXG4gICAgY2xvbmVCYXNlUHJvcHMoZGVzdFByb3BzOiBEYXRhRWxlQmFzZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShkZXN0UHJvcHMpO1xuICAgICAgICB0aGlzLnNldFByb3BWYWx1ZSh0aGlzLCBkZXN0UHJvcHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UHJvcFZhbHVlKHNvdXJjZTogRGF0YUVsZUJhc2VQcm9wcywgdGFyZ2V0OiBEYXRhRWxlQmFzZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHRhcmdldC5pZCA9IHNvdXJjZS5pZDtcbiAgICAgICAgdGFyZ2V0Lm5hbWUgPSBzb3VyY2UubmFtZTtcbiAgICAgICAgdGFyZ2V0LmNhcHRpb24gPSBzb3VyY2UuY2FwdGlvbjtcbiAgICAgICAgdGFyZ2V0LmZpZWxkTmFtZSA9IHNvdXJjZS5maWVsZE5hbWU7XG4gICAgICAgIHRhcmdldC5yZXF1aXJlZCA9IHNvdXJjZS5yZXF1aXJlZDtcbiAgICAgICAgdGFyZ2V0LmVkaXRhYmxlID0gc291cmNlLmVkaXRhYmxlO1xuICAgICAgICB0YXJnZXQuZGVsZXRlYWJsZSA9IHNvdXJjZS5kZWxldGVhYmxlO1xuICAgICAgICB0YXJnZXQuc2VjcmV0QnJvd3NlID0gc291cmNlLnNlY3JldEJyb3dzZTtcbiAgICAgICAgdGFyZ2V0LnByaW50YWJsZSA9IHNvdXJjZS5wcmludGFibGU7XG4gICAgICAgIHRhcmdldC5taW5MZW5ndGggPSBzb3VyY2UubWluTGVuZ3RoO1xuICAgICAgICB0YXJnZXQudHlwZSA9IHNvdXJjZS50eXBlO1xuICAgICAgICB0YXJnZXQudW5kZXJsaW5lID0gc291cmNlLnVuZGVybGluZTtcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZUJhc2VQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFByb3BWYWx1ZShwcm9wcywgdGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0QmFzZVByb3BzKHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUJhc2VQcm9wcz4sIG9wdGlvbnM6IFZpZXdPcHRpb25zKTogTnVsbGFibGVUeXBlPERhdGFFbGVCYXNlUHJvcHM+IHtcbiAgICAgICAgcHJvcHNbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIHByb3BzW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgcHJvcHNbXCJmaWVsZE5hbWVcIl0gPSB0aGlzLmZpZWxkTmFtZTtcbiAgICAgICAgcHJvcHNbXCJ0eXBlXCJdID0gdGhpcy50eXBlO1xuICAgICAgICBpZiAodGhpcy5jYXB0aW9uKSB7XG4gICAgICAgICAgICBwcm9wc1tcImNhcHRpb25cIl0gPSB0aGlzLmNhcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHByb3BzW1wicmVxdWlyZWRcIl0gPSB0aGlzLnJlcXVpcmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnByaW50YWJsZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJwcmludGFibGVcIl0gPSB0aGlzLnByaW50YWJsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWNyZXRCcm93c2UpIHtcbiAgICAgICAgICAgIHByb3BzW1wic2VjcmV0QnJvd3NlXCJdID0gdGhpcy5zZWNyZXRCcm93c2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICBwcm9wc1snZWRpdGFibGUnXSA9IHRoaXMuZWRpdGFibGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVsZXRlYWJsZSkge1xuICAgICAgICAgICAgcHJvcHNbXCJkZWxldGVhYmxlXCJdID0gdGhpcy5kZWxldGVhYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcHJvcHNbXCJtaW5MZW5ndGhcIl0gPSB0aGlzLm1pbkxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51bmRlcmxpbmUpIHtcbiAgICAgICAgICAgIHByb3BzW1widW5kZXJsaW5lXCJdID0gdGhpcy51bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZUJhc2VUZXh0UHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICd0ZXh0JztcbiAgICB9XG5cbiAgICB2YWx1ZVRleHRQcm9wcyE6IFRleHRQcm9wcztcbiAgICBudWxsVGV4dCE6IHN0cmluZztcbiAgICBudWxsVGV4dFByb3BzITogVGV4dFByb3BzO1xuICAgIGRhdGFUeXBlOiAndGV4dCcgfCAnaW50JyB8ICdmbG9hdCcgfCAnZW1haWwnIHwgJ2RhdGUnIHwgJ3Bob25lJyB8ICd6aXBjb2RlJyA9ICd0ZXh0JztcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVCYXNlVGV4dFByb3BzIHwgbnVsbCA9IG51bGwpOiBEYXRhRWxlQmFzZVRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZUJhc2VUZXh0UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmVCYXNlUHJvcHMoY2xvbmUpO1xuICAgICAgICBjbG9uZS52YWx1ZVRleHRQcm9wcyA9IHRoaXMudmFsdWVUZXh0UHJvcHMuY2xvbmUobnVsbCk7XG4gICAgICAgIGNsb25lLm51bGxUZXh0ID0gdGhpcy5udWxsVGV4dDtcbiAgICAgICAgY2xvbmUubnVsbFRleHRQcm9wcyA9IHRoaXMubnVsbFRleHRQcm9wcy5jbG9uZShudWxsKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlQmFzZVRleHRQcm9wcz4gPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZVRleHRQcm9wczogdGhpcy52YWx1ZVRleHRQcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKSxcbiAgICAgICAgICAgIG51bGxUZXh0OiB0aGlzLm51bGxUZXh0LFxuICAgICAgICAgICAgbnVsbFRleHRQcm9wczogdGhpcy5udWxsVGV4dFByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmRhdGFUeXBlICYmIHRoaXMuZGF0YVR5cGUgIT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgcHJvcHNbJ2RhdGFUeXBlJ10gPSB0aGlzLmRhdGFUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIGdldEJhc2VQcm9wcyhwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVCYXNlVGV4dFByb3BzPiwgb3B0aW9uczogVmlld09wdGlvbnMpOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUJhc2VUZXh0UHJvcHM+IHtcbiAgICAgICAgc3VwZXIuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKTtcbiAgICAgICAgcHJvcHNbJ3ZhbHVlVGV4dFByb3BzJ10gPSB0aGlzLnZhbHVlVGV4dFByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpO1xuICAgICAgICBwcm9wc1snbnVsbFRleHRQcm9wcyddID0gdGhpcy5udWxsVGV4dFByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpO1xuICAgICAgICBwcm9wc1snbnVsbFRleHQnXSA9IHRoaXMubnVsbFRleHQ7XG4gICAgICAgIHByb3BzWydkYXRhVHlwZSddID0gdGhpcy5kYXRhVHlwZTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMudmFsdWVUZXh0UHJvcHMgPSBwcm9wcy52YWx1ZVRleHRQcm9wcztcbiAgICAgICAgdGhpcy5udWxsVGV4dCA9IHByb3BzLm51bGxUZXh0O1xuICAgICAgICB0aGlzLm51bGxUZXh0UHJvcHMgPSBwcm9wcy5udWxsVGV4dFByb3BzO1xuICAgICAgICB0aGlzLmRhdGFUeXBlID0gcHJvcHMuZGF0YVR5cGU7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFFbGVMaXN0T3B0aW9uIHtcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZUxpc3RQcm9wcyBleHRlbmRzIERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICdkcm9wbGlzdCc7XG4gICAgfVxuXG4gICAgb3B0aW9uczogQXJyYXk8RGF0YUVsZUxpc3RPcHRpb24+ID0gW107XG4gICAgZHJvcERvd25TdHlsZSE6ICdEcm9wRG93bkxpc3QnIHwgJ0Ryb3BEb3duJztcbiAgICAvKipcbiAgICAgKiDmmK/lkKblhYHorrjlpJrpgIlcbiAgICAgKi9cbiAgICBtdWx0aVNlbGVjdCE6IGJvb2xlYW47XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlTGlzdFByb3BzIHwgbnVsbCk6IERhdGFFbGVMaXN0UHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVMaXN0UHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmUoY2xvbmUpO1xuICAgICAgICBjbG9uZS5vcHRpb25zID0gWy4uLnRoaXMub3B0aW9uc107XG4gICAgICAgIGNsb25lLmRyb3BEb3duU3R5bGUgPSB0aGlzLmRyb3BEb3duU3R5bGU7XG4gICAgICAgIGNsb25lLm11bHRpU2VsZWN0ID0gdGhpcy5tdWx0aVNlbGVjdDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlTGlzdFByb3BzPiA9IHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFsuLi50aGlzLm9wdGlvbnNdLFxuICAgICAgICAgICAgbXVsdGlTZWxlY3Q6IHRoaXMubXVsdGlTZWxlY3QsXG4gICAgICAgICAgICBkcm9wRG93blN0eWxlOiB0aGlzLmRyb3BEb3duU3R5bGUsXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZUxpc3RQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHByb3BzLm9wdGlvbnM7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3QgPSBwcm9wcy5tdWx0aVNlbGVjdDtcbiAgICAgICAgdGhpcy5kcm9wRG93blN0eWxlID0gcHJvcHMuZHJvcERvd25TdHlsZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tQ29udGVudFByb3BzIGV4dGVuZHMgSU5vdGlmeVByb3BlcnR5Q2hhbmdlZCB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgY3JlYXRlSWQhOiBzdHJpbmc7XG4gICAgY3JlYXRlTmFtZSE6IHN0cmluZztcbiAgICBjcmVhdGVEYXRlITogRGF0ZTtcblxuICAgIGNsb25lKGRlc3Q6IENvbW1Db250ZW50UHJvcHMpOiBDb21tQ29udGVudFByb3BzIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkZXN0ID8/IG5ldyBDb21tQ29udGVudFByb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQXR0YWNoZWRQcm9wZXJ0eShjbG9uZSk7XG4gICAgICAgIGNsb25lLmlkID0gdGhpcy5pZDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWRcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tUHJvcHMgZXh0ZW5kcyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICBtYXJrVHlwZSE6IFwic3RhcnRcIiB8IFwiZW5kXCI7XG5cbiAgICBjbG9uZShkZXN0OiBDb21tUHJvcHMpOiBDb21tUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IENvbW1Qcm9wcygpO1xuICAgICAgICBzdXBlci5jbG9uZUF0dGFjaGVkUHJvcGVydHkoY2xvbmUpO1xuICAgICAgICBjbG9uZS5pZCA9IHRoaXMuaWQ7XG4gICAgICAgIGNsb25lLm1hcmtUeXBlID0gdGhpcy5tYXJrVHlwZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBtYXJrVHlwZTogdGhpcy5tYXJrVHlwZVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZUNoZWNrUHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICdjaGVjayc7XG4gICAgfVxuXG4gICAgc2l6ZSE6IG51bWJlcjtcbiAgICBjaGVja2VkITogYm9vbGVhbjtcbiAgICBjaGVja2VkVmFsdWU6IHN0cmluZyA9ICcnO1xuICAgIGdyb3VwTmFtZSE6IHN0cmluZztcbiAgICBtdWx0aVNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZUNoZWNrUHJvcHMgfCBudWxsKTogRGF0YUVsZUNoZWNrUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVDaGVja1Byb3BzKCk7XG4gICAgICAgIHN1cGVyLmNsb25lQmFzZVByb3BzKGNsb25lKTtcbiAgICAgICAgY2xvbmUuY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcbiAgICAgICAgY2xvbmUuc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgY2xvbmUuZ3JvdXBOYW1lID0gdGhpcy5ncm91cE5hbWU7XG4gICAgICAgIGNsb25lLm11bHRpU2VsZWN0ID0gdGhpcy5tdWx0aVNlbGVjdDtcbiAgICAgICAgY2xvbmUuY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZUNoZWNrUHJvcHM+ID0ge1xuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5jaGVja2VkLFxuICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICAgICAgZ3JvdXBOYW1lOiB0aGlzLmdyb3VwTmFtZSxcbiAgICAgICAgICAgIG11bHRpU2VsZWN0OiB0aGlzLm11bHRpU2VsZWN0LFxuICAgICAgICAgICAgY2hlY2tlZFZhbHVlOiB0aGlzLmNoZWNrZWRWYWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlQ2hlY2tQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIHRoaXMuZ3JvdXBOYW1lID0gcHJvcHMuZ3JvdXBOYW1lO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0ID0gcHJvcHMubXVsdGlTZWxlY3Q7XG4gICAgICAgIHRoaXMuY2hlY2tlZFZhbHVlID0gcHJvcHMuY2hlY2tlZFZhbHVlO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZUltYWdlUHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc3VwZXIudHlwZSA9ICdpbWcnO1xuICAgIH1cblxuICAgIHdpZHRoITogbnVtYmVyO1xuICAgIGhlaWdodCE6IG51bWJlcjtcbiAgICBzcmMhOiBzdHJpbmc7XG4gICAgYm9yZGVyITogJ2FsbCcgfCAnbm9uZSc7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlSW1hZ2VQcm9wcyB8IG51bGwpOiBEYXRhRWxlSW1hZ2VQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZUltYWdlUHJvcHMoKTtcbiAgICAgICAgdGhpcy5jbG9uZUJhc2VQcm9wcyhjbG9uZSk7XG4gICAgICAgIGNsb25lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgY2xvbmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIGNsb25lLnNyYyA9IHRoaXMuc3JjO1xuICAgICAgICBjbG9uZS5ib3JkZXIgPSB0aGlzLmJvcmRlcjtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogYW55IHtcbiAgICAgICAgY29uc3QgcHJvcHM6IE51bGxhYmxlVHlwZTxEYXRhRWxlSW1hZ2VQcm9wcz4gPSB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICBzcmM6IHRoaXMuc3JjLFxuICAgICAgICAgICAgYm9yZGVyOiB0aGlzLmJvcmRlclxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucylcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHVwZGF0ZVByb3BzKHByb3BzOiBEYXRhRWxlSW1hZ2VQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMud2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgICAgIHRoaXMuc3JjID0gcHJvcHMuc3JjO1xuICAgICAgICB0aGlzLmJvcmRlciA9IHByb3BzLmJvcmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVEYXRlUHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVRleHRQcm9wcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHN1cGVyLnR5cGUgPSAnZGF0ZSc7XG4gICAgfVxuXG4gICAgbWluVmFsdWU/OiBEYXRlO1xuICAgIG1heFZhbHVlPzogRGF0ZTtcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlRGF0ZVByb3BzIHwgbnVsbCk6IERhdGFFbGVEYXRlUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IERhdGFFbGVEYXRlUHJvcHMoKTtcbiAgICAgICAgc3VwZXIuY2xvbmUoY2xvbmUpO1xuICAgICAgICBjbG9uZS5taW5WYWx1ZSA9IHRoaXMubWluVmFsdWU7XG4gICAgICAgIGNsb25lLm1heFZhbHVlID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgICAgY2xvbmUuZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZURhdGVQcm9wcz4gPSB7XG4gICAgICAgICAgICBtaW5WYWx1ZTogdGhpcy5taW5WYWx1ZSxcbiAgICAgICAgICAgIG1heFZhbHVlOiB0aGlzLm1heFZhbHVlLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLmZvcm1hdFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdldEJhc2VQcm9wcyhwcm9wcywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9wcyhwcm9wczogRGF0YUVsZURhdGVQcm9wcyk6IHZvaWQge1xuICAgICAgICBzdXBlci51cGRhdGVQcm9wcyhwcm9wcyk7XG4gICAgICAgIHRoaXMubWluVmFsdWUgPSBwcm9wcy5taW5WYWx1ZTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IHByb3BzLm1heFZhbHVlO1xuICAgICAgICB0aGlzLmZvcm1hdCA9IHByb3BzLmZvcm1hdDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUNvbmRpdGlvbiB7XG4gICAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBtYXhMZW5ndGg6IG51bWJlciA9IC0xO1xuICAgIGRhdGFUeXBlOiAnc3RyaW5nJyB8ICdkYXRlJyB8ICd0aW1lJyB8ICdudW1iZXInIHwgJ2Zsb2F0JyA9ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZU1IUHJvcHMgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICAvL+WInea9ruW5tOm+hFxuICAgIGFnZSE6IHN0cmluZztcbiAgICAvL+ihjOe7j+acn+WkqeaVsFxuICAgIGRheXMhOiBzdHJpbmc7XG4gICAgLy/mnIjnu4/lkajmnJ/lpKnmlbBcbiAgICBjeWNsZXMhOiBzdHJpbmc7XG4gICAgLy/mnKvmrKHmnIjnu4/ml7bpl7RcbiAgICBsYXN0RGF0ZSE6IHN0cmluZztcbiAgICAvL+mXree7j+W5tOm+hFxuICAgIGNsb3NlQWdlITogc3RyaW5nO1xuICAgIGtpbmQhOiBzdHJpbmc7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlTUhQcm9wcyB8IG51bGwpOiBEYXRhRWxlTUhQcm9wcyB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gZGVzdCA/PyBuZXcgRGF0YUVsZU1IUHJvcHMoKTtcbiAgICAgICAgdGhpcy5jbG9uZUJhc2VQcm9wcyhjbG9uZSk7XG4gICAgICAgIGNsb25lLmFnZSA9IHRoaXMuYWdlO1xuICAgICAgICBjbG9uZS5kYXlzID0gdGhpcy5kYXlzO1xuICAgICAgICBjbG9uZS5jeWNsZXMgPSB0aGlzLmN5Y2xlcztcbiAgICAgICAgY2xvbmUubGFzdERhdGUgPSB0aGlzLmxhc3REYXRlO1xuICAgICAgICBjbG9uZS5jbG9zZUFnZSA9IHRoaXMuY2xvc2VBZ2U7XG4gICAgICAgIGNsb25lLmtpbmQgPSB0aGlzLmtpbmQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zOiBWaWV3T3B0aW9ucykge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPERhdGFFbGVNSFByb3BzPiA9IHtcbiAgICAgICAgICAgIGFnZTogdGhpcy5hZ2UsXG4gICAgICAgICAgICBkYXlzOiB0aGlzLmRheXMsXG4gICAgICAgICAgICBjeWNsZXM6IHRoaXMuY3ljbGVzLFxuICAgICAgICAgICAgbGFzdERhdGU6IHRoaXMubGFzdERhdGUsXG4gICAgICAgICAgICBjbG9zZUFnZTogdGhpcy5jbG9zZUFnZSxcbiAgICAgICAgICAgIGtpbmQ6IHRoaXMua2luZFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0QmFzZVByb3BzKHByb3BzLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgVHJhY2tSdW5Qcm9wcyB7XG4gICAgdXNlcklkITogc3RyaW5nO1xuICAgIHVzZXJOYW1lITogc3RyaW5nO1xuICAgIGRhdGUhOiBzdHJpbmc7XG4gICAgaWQhOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHlwZTogVHJhY2tSdW5UeXBlRW51bSkge1xuICAgIH1cblxuICAgIGNsb25lKGRlc3Q6IFRyYWNrUnVuUHJvcHMgfCBudWxsKSB7XG4gICAgICAgIGRlc3QgPSBkZXN0ID8/IG5ldyBUcmFja1J1blByb3BzKHRoaXMudHlwZSk7XG4gICAgICAgIGRlc3QudXNlcklkID0gdGhpcy51c2VySWQ7XG4gICAgICAgIGRlc3QudXNlck5hbWUgPSB0aGlzLnVzZXJOYW1lO1xuICAgICAgICBkZXN0LmRhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIGRlc3QuaWQgPSB0aGlzLmlkO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKCkge1xuICAgICAgICBjb25zdCBwcm9wczogTnVsbGFibGVUeXBlPFRyYWNrUnVuUHJvcHM+ID0ge1xuICAgICAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCxcbiAgICAgICAgICAgIHVzZXJOYW1lOiB0aGlzLnVzZXJOYW1lLFxuICAgICAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxufVxuXG5cbmNsYXNzIEZvbnRNYXBTdHJ1Y3Qge1xuICAgIGZvbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGxlbmd0aDogbnVtYmVyID0gMDtcblxuICAgIHJlZ2lzdGVyRm9udE1hcChuYW1lOiBzdHJpbmcsIGtleU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvbnRNYXAuc2V0KG5hbWUsIGtleU5hbWUpO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuZm9udE1hcC5zaXplO1xuICAgIH1cblxuICAgIGdldEZvbnRNYXAobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb250TWFwLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMuZm9udE1hcC5nZXQobmFtZSkgYXMgc3RyaW5nO1xuICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBmb250TWFwRnVuYyA9IG5ldyBGb250TWFwU3RydWN0KCk7XG5cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlUHJvcHMge1xuICAgIGlkITogc3RyaW5nO1xuICAgIHRpdGxlITogc3RyaW5nO1xuICAgIG1zZyE6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50R3JvdXBQcm9wcyB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgbmFtZSE6IHN0cmluZztcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVtZW50R3JvdXBQcm9wcyB8IG51bGwpIHtcbiAgICAgICAgZGVzdCA9IGRlc3QgPz8gbmV3IERhdGFFbGVtZW50R3JvdXBQcm9wcygpO1xuICAgICAgICBkZXN0LmlkID0gdGhpcy5pZDtcbiAgICAgICAgZGVzdC5uYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMge1xuICAgIHR5cGU6ICdlbmExMycgfCAnY29kZTEyOCcgfCAnY29kZTM5JyB8ICdxcmNvZGUnID0gJ2NvZGUxMjgnO1xuICAgIHRleHQ6IHN0cmluZyA9ICcnO1xuICAgIHdpZHRoOiBudW1iZXIgPSAwO1xuICAgIGhlaWdodDogbnVtYmVyID0gMDtcblxuICAgIGNsb25lKGRlc3Q6IERhdGFFbGVtZW50QmFyY29kZVByb3BzIHwgbnVsbCkge1xuICAgICAgICBkZXN0ID0gZGVzdCA/PyBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMoKTtcbiAgICAgICAgZGVzdC50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICBkZXN0LnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIGRlc3Qud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICBkZXN0LmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIH1cblxuICAgIGdldFNlcmlhbGl6ZVByb3BzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb2R5UGFydFByb3BzIHtcbiAgICBwYXJ0SWQhOiBzdHJpbmc7XG59IiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBQb3NpdGlvbixcbiAgICBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7QmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0NvbW1lbnRSYW5nZVN0YXR1c30gZnJvbSBcIi4vY29tbWVudC1jb250ZW50LWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIENvbW1zQ29udGFpbmVyRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdjb21tLWxpc3QnKTtcbiAgICAgICAgdGhpcy5ub0ZpbGxFbXB0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC5tYXhXaWR0aCA9IG9wdGlvbnMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gcmVuZGVyLnJlY3QubWF4V2lkdGg7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7fVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ29tbXNDb250YWluZXJFbGVtZW50KCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB7XG4gICAgLy/mibnms6jlhoXlrrnmmK/lkKblt7Lnu4/ph43nu4Qs5Y+q6KaB6YeN5paw57uY5Yi255qE5pe25YCZ57uE5ZCI5LiA5qyh5Y2z5Y+vXG4gICAgaXNNZWFzdXJlQ29tbSE6IGJvb2xlYW47XG4gICAgc2VsZWN0ZWRTZXQhOiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPjtcbiAgICBjb21tZW50UmFuZ2VTdGF0dXM6IEFycmF5PENvbW1lbnRSYW5nZVN0YXR1cz4gPSBbXTtcblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWN0LmhlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QoZS5wb3NpdGlvbi54LCBlLnBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJ2JsYWNrJywgMC41KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBDb21tZW50c0ZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImNvbW0tbGlzdFwiO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRzRWxlID0gbmV3IENvbW1zQ29udGFpbmVyRWxlbWVudCgpO1xuICAgICAgICByZXR1cm4gY29tbWVudHNFbGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0lubGluZUdyb3VwSW5wdXRFbGVtZW50LCB2YWxpZGF0ZUlubGluZUlucHV0UmVuZGVyT2JqfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRGVjb3JhdGVFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8YW55PiB7XG4gICAgLy9wcm9wczogRGF0YURlY29yYXRlUHJvcHM7XG4gICAgY29uc3RydWN0b3IocHVibGljIGRhdGFFbGU6IElubGluZUdyb3VwSW5wdXRFbGVtZW50LCBwdWJsaWMgaXNQcmVmaXg6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZGVjJyk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0dvdEN1cnNvcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtzZWxlY3Rpb25TdGF0ZX0gPSBldnQuY3R4O1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlLmNvbGxhcHNlZCAmJiB0aGlzLnBhcmVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnBhcmVudCBhcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcyA9PT0gZ3JvdXAuZW5kRGVjb3JhdGUgJiYgc2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShncm91cC5zdGFydERlY29yYXRlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBEYXRhRGVjb3JhdGVSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRGF0YURlY29yYXRlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICAvL3JlbmRlci5yZWN0LndpZHRoID0gdGhpcy5kUHJvcHMuc2l6ZSAvIDI7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gNjtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gMTQ7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNsb25lKCk6IERhdGFEZWNvcmF0ZUVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRGVjb3JhdGVFbGVtZW50KHRoaXMuZGF0YUVsZSwgdGhpcy5pc1ByZWZpeCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICAvL2Nsb25lLnJlbmRlckN0eCA9IHRoaXMucmVuZGVyQ3R4O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRGVjb3JhdGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJEZWNvclJlY3QoZS5yZW5kZXIsIGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJlbmRlckRlY29yUmVjdChjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBpZiAoY3R4LmRyYXdNb2RlID09PSAncHJpbnQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUVsZVJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlckJ5UHJlZGljYXRlKHRoaXMsIGl0ZW0gPT4gdmFsaWRhdGVJbmxpbmVJbnB1dFJlbmRlck9iaihpdGVtKSk7XG4gICAgICAgIGlmICghZGF0YUVsZVJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFFbGVSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXJQb3MoZGF0YUVsZVJlbmRlciwgdGhpcywgcG9zaXRpb24pO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIERhdGFEZWNvcmF0ZUVsZW1lbnQ7XG4gICAgICAgIGxldCB7eCwgeSwgaGVpZ2h0LCB3aWR0aH0gPSBkYXRhRWxlUmVuZGVyUG9zO1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSAyO1xuICAgICAgICBjb25zdCBwYWludENvbG9yID0gJyMwMDUwYjMnO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQudHJhbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LnBhcmVudC50eXBlID09PSAnZGF0YS1ncm91cCcpIHtcbiAgICAgICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnNoYWRvd0JsdXIgPSA1O1xuICAgICAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguc2hhZG93Q29sb3IgPSAnYmxhY2snO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICB4ICs9IDI7XG4gICAgICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7eDogeCArIGxpbmVXaWR0aCwgeX0sIHt4OiB4LCB5fSwge1xuICAgICAgICAgICAgICAgICAgICB4OiB4LFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgaGVpZ2h0XG4gICAgICAgICAgICAgICAgfSwge3g6IHggKyBsaW5lV2lkdGgsIHk6IHkgKyBoZWlnaHR9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHggPSB4ICsgd2lkdGggLSAyO1xuICAgICAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbe3g6IHggLSBsaW5lV2lkdGgsIHl9LCB7eDogeCwgeX0sIHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIGhlaWdodFxuICAgICAgICAgICAgICAgIH0sIHt4OiB4IC0gbGluZVdpZHRoLCB5OiB5ICsgaGVpZ2h0fV0sIDEsIHBhaW50Q29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRGVjb3JhdGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQgeyBEb2NNb2RlLCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgSW5saW5lR3JvdXBFbGVtZW50LCBMZWFmRWxlbWVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgR290Q3Vyc29yRXZlbnQsIEtleWJvcmFkRWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlQmFzZVByb3BzLCBUZXh0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRGF0YURlY29yYXRlRWxlbWVudCB9IGZyb20gXCIuL2RhdGEtZGVjb3JhdGUtaW1wbFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5cbi8qKlxuICog5omA5pyJ55qE5pWw5o2u5YWD57un5om/5LiK6L+w5Lik5Liq5oq96LGh57G7XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRWxlbWVudExlYWY8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBMZWFmRWxlbWVudDxQPiB7XG4gICAgYWJzdHJhY3Qgc2V0VmFsdWUodmFsOiBhbnkpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgZ2V0VmFsdWUoKTogYW55O1xufVxuXG4vKipcbiAqIOWPr+S+m+i+k+WFpeeahOWGheiBlOWdl1xuICog5L2/55So5Zy65pmv77ya5pWw5o2u5YWD77yM5pWw5o2u57uEXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIElubGluZUdyb3VwRWxlbWVudDxQPiB7XG4gICAgc3RhcnREZWNvcmF0ZSE6IERhdGFEZWNvcmF0ZUVsZW1lbnQ7XG4gICAgZW5kRGVjb3JhdGUhOiBEYXRhRGVjb3JhdGVFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHR5cGUpO1xuICAgICAgICAvL+ihjOWGheWdl+S4jeWFgeiuuOaNouihjFxuICAgICAgICB0aGlzLmFkZEV2ZW50PEtleWJvcmFkRWxlbWVudEV2ZW50PignRWxlbWVudEtleURvd24nLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvblN0YXRlLCBzb3VyY2VFdmVudCwgc291cmNlIH0gPSBldnQ7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgaWYgKElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlRXZlbnQuc2hpZnRLZXkgJiYgc291cmNlRXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLnJlbW92ZU51bGxUZXh0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc291cmNlRXZlbnQuc2hpZnRLZXkgJiYgc291cmNlRXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuXG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0dvdEN1cnNvcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gZXZ0LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgaWYgKElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdMb3N0Q3Vyc29yJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsbERlY29yYXRlKCk7XG4gICAgfVxuXG4gICAgZmlsbERlY29yYXRlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnREZWNvcmF0ZSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydERlY29yYXRlLCBlbmREZWNvcmF0ZSB9ID0gdGhpcy5jcmVhdGVEYXRhRGVjb3JhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQoc3RhcnREZWNvcmF0ZSwgMCk7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKGVuZERlY29yYXRlLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREZWNvcmF0ZSA9IHN0YXJ0RGVjb3JhdGU7XG4gICAgICAgICAgICB0aGlzLmVuZERlY29yYXRlID0gZW5kRGVjb3JhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVEYXRhRGVjb3JhdGUoKTogeyBzdGFydERlY29yYXRlOiBEYXRhRGVjb3JhdGVFbGVtZW50LCBlbmREZWNvcmF0ZTogRGF0YURlY29yYXRlRWxlbWVudCB9IHtcbiAgICAgICAgY29uc3Qgc3RhcnREZWNvcmF0ZSA9IG5ldyBEYXRhRGVjb3JhdGVFbGVtZW50KHRoaXMsIHRydWUpO1xuICAgICAgICBjb25zdCBlbmREZWNvcmF0ZSA9IG5ldyBEYXRhRGVjb3JhdGVFbGVtZW50KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0RGVjb3JhdGUsXG4gICAgICAgICAgICBlbmREZWNvcmF0ZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNsb25lU2VsZjxUIGV4dGVuZHMgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ+KGRhdGE6IGJvb2xlYW4sIGNvbnN0cjogbmV3ICgpID0+IFQpOiBUIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgY29uc3RyKCk7XG4gICAgICAgICg8KHByb3A6IFApID0+IFA+dGhpcy5wcm9wc1snY2xvbmUnXSkoY2xvbmUucHJvcHMpO1xuICAgICAgICAvL2Nsb25lRnVuYy5hcHBseSh0aGlzLCBjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9PSB0aGlzLnN0YXJ0RGVjb3JhdGUgJiYgY2hpbGQgIT09IHRoaXMuZW5kRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGRUb0xhc3QoY2hpbGQuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgYmVnaW5NZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGxEZWNvcmF0ZSgpO1xuICAgICAgICBzdXBlci5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBhZGRDaGlsZChjaGlsZDogRWxlbWVudDxhbnk+LCBpbmRleDogbnVtYmVyID0gLTEpOiB2b2lkIHtcbiAgICAgICAgaW5kZXggPSBpbmRleCA9PT0gLTEgPyB0aGlzLmxlbmd0aCAtIDEgOiBpbmRleDtcbiAgICAgICAgaW5kZXggPSBpbmRleCA+IHRoaXMubGVuZ3RoID8gdGhpcy5sZW5ndGggOiBpbmRleDtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIHRoaXMuc3RhcnREZWNvcmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQ/LmFkZENoaWxkKGNoaWxkLCB0aGlzLmdldEluZGV4KCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5sZW5ndGggJiYgdGhpcy5lbmREZWNvcmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQ/LmFkZENoaWxkKGNoaWxkLCB0aGlzLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5hZGRDaGlsZChjaGlsZCwgaW5kZXgpO1xuICAgIH1cblxuICAgIGNsZWFySW5uZXJJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlSXRlbXMgPSB0aGlzLmdldElubmVySXRlbXMoKTtcbiAgICAgICAgcmVtb3ZlSXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMucmVtb3ZlQ2hpbGQoaXRlbSkpO1xuICAgIH1cblxuICAgIGdldElubmVySXRlbXMoKTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gdGhpcy5zdGFydERlY29yYXRlICYmIGNoaWxkICE9PSB0aGlzLmVuZERlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi/veWKoOWIsOWGheWuueWdl+acq+WwvlxuICAgICAqIOiwg+eUqGFkZENoaWxkXG4gICAgICogQHBhcmFtIGNoaWxkXG4gICAgICovXG4gICAgYWRkQ2hpbGRUb0xhc3QoY2hpbGQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuYWRkQ2hpbGQoY2hpbGQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6L+95Yqg5Yiw5YaF5a655Z2X5byA5aeL5L2N572uXG4gICAgICovXG4gICAgYWRkQ2hpbGRUb0ZpcnN0KGNoaWxkOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmFkZENoaWxkKGNoaWxkLCAxKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRWxlbWVudElubGluZUdyb3VwPFAgZXh0ZW5kcyBEYXRhRWxlQmFzZVByb3BzID0gRGF0YUVsZUJhc2VQcm9wcyAmIHsgdmFsdWVUZXh0UHJvcHM6IFRleHRQcm9wcyB9PiBleHRlbmRzIElubGluZUdyb3VwSW5wdXRFbGVtZW50PFA+IHtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIodHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZW1vdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8R290Q3Vyc29yRXZlbnQ+KCdHb3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uR290Q3Vyc29yRXZlbnQoZXZ0KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkdvdEN1cnNvckV2ZW50KGV2dDogR290Q3Vyc29yRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzb3VyY2UsIHNlbGVjdGlvblN0YXRlIH0gPSBldnQ7XG4gICAgICAgIGlmIChldnQuY3R4LnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIC8v5b2T5YmN5pWw5o2u5YWD5LiN5Y+v57yW6L6RXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUuZWRpdGFibGUgJiYgIXRoaXMucHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wgPT09IHRoaXMuc3RhcnREZWNvcmF0ZSAmJiBzdGFydE9mZnNldCA9PT0gMCB8fCBzdGFydENvbnRyb2wgPT09IHRoaXMuZW5kRGVjb3JhdGUgJiYgc3RhcnRPZmZzZXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uU3RhdGUucmFuZ2U/LmNsb25lKCk7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLmVkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlID09PSB0aGlzLmVuZERlY29yYXRlICYmIHNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0ID09PSAwICYmIHRoaXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZSh0aGlzLnN0YXJ0RGVjb3JhdGUsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWJzdHJhY3Qgc2V0VmFsdWUodmFsOiBhbnkpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgZ2V0VmFsdWUoKTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog6aqM6K+B5pWw5o2u5YWD55qE5YC85piv5ZCm5ZCI5rOVXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5yZXF1aXJlZCAmJiB0aGlzLnByb3BzLmVkaXRhYmxlICYmICF0aGlzLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAn6K+l5a2X5q615LiN6IO95Li656m6JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRWxlbWVudFJlbmRlck9iamVjdDxUIGV4dGVuZHMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCA9IERhdGFFbGVtZW50SW5saW5lR3JvdXA+IGV4dGVuZHMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q8VD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgcG9zaXRpb24sIGRvY0N0eDogeyB2aWV3T3B0aW9ucyB9IH0gPSBlO1xuICAgICAgICAvL+aVsOaNruWFg+S4jeaJk+WNsFxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5wcm9wcy5wcmludGFibGUgJiYgcmVuZGVyLmRyYXdNb2RlID09PSAncHJpbnQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgLy/nu5jliLbmlbDmja7lhYPljLrln5/lupXoibJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuaXNNb3VzZWVudGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUNvbG9yID0gdGhpcy5lbGVtZW50LnByb3BzLmVkaXRhYmxlID8gdmlld09wdGlvbnMuZGF0YUVsZU92ZXJsYXlzQ29sb3IgOiB2aWV3T3B0aW9ucy5kYXRhRWxlUmVhZE9ubHlPdmVybGF5Q29sb3I7XG4gICAgICAgICAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55IC0gMiwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0ICsgNCwgb3ZlcmxheUNvbG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMuc2VjcmV0QnJvd3NlICYmIHZpZXdPcHRpb25zLnNlY3JldEJyb3dzZSkge1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5jdHguZmlsdGVyID0gXCJibHVyKDEwcHgpXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IHBvc2l0aW9uLnkgKyAyICsgdGhpcy5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogcG9zaXRpb24ueCwgeSB9LCB7IHg6IHBvc2l0aW9uLnggKyB0aGlzLnJlY3Qud2lkdGgsIHkgfV0sIDEsICcjNTk1OTU5JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB9KVxuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZURhdGFFbGUgPSAoZWxlOiBFbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIGVsZSBpbnN0YW5jZW9mIERhdGFFbGVtZW50TGVhZiB8fCBlbGUgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRGF0YUVsZVJlbmRlck9iaiA9IChyZW5kZXJPYmo6IFJlbmRlck9iamVjdCkgPT4ge1xuICAgIGlmIChyZW5kZXJPYmouZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVEYXRhRWxlKHJlbmRlck9iai5lbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlSW5saW5lSW5wdXRSZW5kZXJPYmogPSAocmVuZGVyT2JqOiBSZW5kZXJPYmplY3QpID0+IHtcbiAgICBpZiAocmVuZGVyT2JqLmVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlck9iai5lbGVtZW50IGluc3RhbmNlb2YgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICog5piv5ZCm5Zyo5pWw5o2u5YWD5YaF6YOoXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIG9mZnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNJblNpZGVEYXRhRWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXRoRWxlID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KGNvbnRyb2wsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDtcbiAgICBpZiAobWF0aEVsZSkge1xuICAgICAgICBpZiAoKGNvbnRyb2wgPT09IG1hdGhFbGUuc3RhcnREZWNvcmF0ZSAmJiBvZmZzZXQgPT09IDApIHx8IChjb250cm9sID09PSBtYXRoRWxlLmVuZERlY29yYXRlICYmIG9mZnNldCA9PT0gMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cbi8qKlxuICog5piv5ZCm5Zyo5YaF6IGU5Z2X5YaF6YOoXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIG9mZnNldFxuICovXG5leHBvcnQgZnVuY3Rpb24gSXNJblNpZGVJbmxpbmVHcm91cElucHV0RWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXRoRWxlID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KGNvbnRyb2wsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpIGFzIElubGluZUdyb3VwSW5wdXRFbGVtZW50O1xuICAgIGlmIChtYXRoRWxlKSB7XG4gICAgICAgIGlmICgoY29udHJvbCA9PT0gbWF0aEVsZS5zdGFydERlY29yYXRlICYmIG9mZnNldCA9PT0gMCkgfHwgKGNvbnRyb2wgPT09IG1hdGhFbGUuZW5kRGVjb3JhdGUgJiYgb2Zmc2V0ID09PSAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFFbGVtZW50QmFzZUZhY3Rvcnk8VCA9IG51bGw+IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VD4ge1xuICAgIHJlYWRDb21wbGV0ZWQoZWxlOiBFbGVtZW50LCBjaGlsZHJlbjogQXJyYXk8RWxlbWVudD4pIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4gZWxlLmFkZENoaWxkVG9MYXN0KGl0ZW0pKVxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIERvY01vZGUsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBNYXJnaW5Qcm9wcyxcbiAgICBQYWRkaW5nUHJvcHMsIFBvc2l0aW9uLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgUmVjdCxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50UHJvcHMsIFRleHRQcm9wcyB9IGZyb20gJy4uLy4uL2VsZW1lbnQtcHJvcHMnO1xuaW1wb3J0IHsgSVJlbmRlckNvbnRleHRDb250cmFjdCwgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keUVsZW1lbnQgfSBmcm9tIFwiLi9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEhlYWRlckVsZW1lbnQgfSBmcm9tIFwiLi9kb2MtaGVhZGVyLWltcGxcIjtcbmltcG9ydCB7IEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJFbGVtZW50IH0gZnJvbSBcIi4vZG9jLWZvb3Rlci1pbXBsXCI7XG5pbXBvcnQgeyBDb250ZXh0TWVudUVsZW1lbnRFdmVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgZG9jdW1lbnRQcmludCB9IGZyb20gXCIuLi8uLi9kb2N1bWVudC1wcmludFwiO1xuaW1wb3J0IHsgQ29tbXNDb250YWluZXJFbGVtZW50IH0gZnJvbSBcIi4uL2NvbW1lbnRzL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi11dGlsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuLi8uLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50RWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxEb2N1bWVudFByb3BzPiB7XG4gICAgLy9wcm9wczogRG9jdW1lbnRQcm9wcztcbiAgICB2aWV3T3B0aW9ucyE6IFZpZXdPcHRpb25zO1xuICAgIGJvZHlFbGVtZW50ITogRG9jdW1lbnRCb2R5RWxlbWVudDtcbiAgICBoZWFkZXJFbGVtZW50ITogRG9jdW1lbnRIZWFkZXJFbGVtZW50O1xuICAgIGZvb3RlckVsZW1lbnQhOiBEb2N1bWVudEZvb3RlckVsZW1lbnQ7XG4gICAgY29tbWVudHNDb250YWluZXJFbGVtZW50ITogQ29tbXNDb250YWluZXJFbGVtZW50O1xuICAgIGhlYWRlckVkaXRTdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkb2MnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEb2N1bWVudFByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zKTogRG9jdW1lbnRSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBkb2NQaXhlbHNXaWR0aCwgaGVpZ2h0OiBkb2NQaXhlbHNIZWlnaHQgfSA9IHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzO1xuICAgICAgICBjb25zdCBkb2NSZW5kZXJPYmplY3QgPSBuZXcgRG9jdW1lbnRSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5yZWN0LndpZHRoID0gZG9jUGl4ZWxzV2lkdGg7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5yZWN0Lm1heFdpZHRoID0gZG9jUGl4ZWxzV2lkdGg7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5yZWN0Lm1heEhlaWdodCA9IGRvY1BpeGVsc0hlaWdodDtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0ID0gZG9jUGl4ZWxzSGVpZ2h0O1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QuZWxlbWVudCA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gPSB0aGlzLnByb3BzLnBhZGRpbmc7XG4gICAgICAgIGxldCB7IGhlYWRlckxpbmU6IGhlYWRMaW5lLCBmb290ZXJMaW5lOiBmb290TGluZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgeyBtbVRvUGl4ZWxzUmF0aW8gfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIGhlYWRMaW5lID0gaGVhZExpbmUgKiBtbVRvUGl4ZWxzUmF0aW87XG4gICAgICAgIGZvb3RMaW5lID0gZm9vdExpbmUgKiBtbVRvUGl4ZWxzUmF0aW87XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5wYWRkaW5nLnRvcCA9IE1hdGguZmxvb3IodG9wICogbW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnBhZGRpbmcuYm90dG9tID0gTWF0aC5mbG9vcihib3R0b20gKiBtbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucGFkZGluZy5sZWZ0ID0gTWF0aC5mbG9vcihsZWZ0ICogbW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnBhZGRpbmcucmlnaHQgPSBNYXRoLmZsb29yKHJpZ2h0ICogbW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LmhlYWRlckxpbmUgPSBoZWFkTGluZTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LmZvb3RlckxpbmUgPSBmb290TGluZTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0Lm1hcmdpbi50b3AgPSBvcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QubWFyZ2luLmJvdHRvbSA9IG9wdGlvbnMuZG9jU3BhY2U7XG4gICAgICAgIHJldHVybiBkb2NSZW5kZXJPYmplY3Q7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkb2MnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IERvY3VtZW50RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDpobXovrnot51cbiAgICAgKiBAcGFyYW0gbWFyZ2luUHJvcHNcbiAgICAgKi9cbiAgICB1cGRhdGVNYXJnaW4obWFyZ2luUHJvcHM6IFBhcnRpYWw8TWFyZ2luUHJvcHM+LCB1bml0OiAnbW0nIHwgJ2NtJyA9ICdjbScpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSA9IG1hcmdpblByb3BzIGFzIE1hcmdpblByb3BzO1xuICAgICAgICBjb25zdCBwYWRkaWcgPSB0aGlzLnByb3BzLnBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHJhdGlvID0gdW5pdCA9PT0gJ2NtJyA/IDEwIDogMTtcbiAgICAgICAgcGFkZGlnLnRvcCA9IHRvcCAqIHJhdGlvO1xuICAgICAgICBwYWRkaWcuYm90dG9tID0gYm90dG9tICogcmF0aW87XG4gICAgICAgIHBhZGRpZy5sZWZ0ID0gbGVmdCAqIHJhdGlvO1xuICAgICAgICBwYWRkaWcucmlnaHQgPSByaWdodCAqIHJhdGlvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+aNouW8gOWQr+mhteeciemhteiEmue8lui+keWKn+iDvVxuICAgICAqL1xuICAgIHN3aXRjaFBhZ2VIZWFkZXJFZGl0b3Ioc3M6IFNlbGVjdGlvblN0YXRlLCBlbGU6IEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgIT09IERvY01vZGUuRGVzaWduKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmhlYWRlckVkaXRTdGF0ZSAmJiAoIWVsZSB8fCAoZWxlID09PSB0aGlzLmhlYWRlckVsZW1lbnQgfHwgZWxlID09PSB0aGlzLmZvb3RlckVsZW1lbnQpKSkge1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFbGVtZW50LmRpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb290ZXJFbGVtZW50LmRpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFZGl0U3RhdGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGVhZGVyRWRpdFN0YXRlICYmICghZWxlIHx8IGVsZSA9PT0gdGhpcy5ib2R5RWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRWxlbWVudC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mb290ZXJFbGVtZW50LmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJvZHlFbGVtZW50LmRpc2FibGVDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oZWFkZXJFZGl0U3RhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzcy5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICBjb25zdHJ1Y3RvcihlbGU6IEVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlKTtcbiAgICB9XG5cbiAgICBoZWFkZXJMaW5lITogbnVtYmVyO1xuICAgIGZvb3RlckxpbmUhOiBudW1iZXI7XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIHBvc2l0aW9uLCBkb2NDdHg6IHsgdmlld09wdGlvbnMgfSB9ID0gZTtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogZG9jV2lkdGgsIGhlaWdodDogZG9jSGVpZ2h0IH0gPSB2aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3M7XG4gICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgZG9jV2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICd3aGl0ZScsIDUsICdibGFjaycpO1xuICAgICAgICBlLnJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LmN0eC5maWxsU3R5bGUgPSBlLmRvY0N0eC52aWV3T3B0aW9ucy5kZWZhdWx0Q29sb3I7XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHJhd0NvcHlSaWdodCh2aWV3T3B0aW9ucywgcmVuZGVyLCBwb3NpdGlvbik7XG4gICAgICAgIHRoaXMuZHJhd0RvY1BhZ2VOdW0ocmVuZGVyLCB2aWV3T3B0aW9ucywgcG9zaXRpb24pO1xuICAgICAgICAvL+e7mOWItuaWh+aho+i+uei3nee6v1xuICAgICAgICB0aGlzLmRyYXdNYXJnaW5MaW5lKHBvc2l0aW9uLCByZW5kZXIsIGRvY1dpZHRoLCBkb2NIZWlnaHQpO1xuICAgICAgICB0aGlzLmRyYXdXYXRlcm1hcmsocmVuZGVyLCB2aWV3T3B0aW9ucywgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItueJiOadg+S/oeaBr1xuICAgICAqL1xuICAgIHByaXZhdGUgZHJhd0NvcHlSaWdodCh2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlcjogSVJlbmRlckNvbnRleHRDb250cmFjdCwgcG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHRleHRQID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UC5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICB0ZXh0UC5mb250TmFtZSA9ICfmpbfkvZMnO1xuICAgICAgICB0ZXh0UC5mb250U2l6ZSA9IDEyO1xuICAgICAgICBpZiAodmlld09wdGlvbnMuY29weVJpZ2h0SW5mbykge1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHZpZXdPcHRpb25zLmNvcHlSaWdodEluZm8sIHRleHRQLCBwb3NpdGlvbi54ICsgNSwgcG9zaXRpb24ueSArIDUsIDEwMCwgMTIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57uY5Yi25paH5qGj6L656Led57q/XG4gICAgICovXG4gICAgcHJpdmF0ZSBkcmF3TWFyZ2luTGluZShwb3NpdGlvbjogUG9zaXRpb24sIHJlbmRlcjogSVJlbmRlckNvbnRleHRDb250cmFjdCwgZG9jV2lkdGg6IG51bWJlciwgZG9jSGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IHRoaXMucGFkZGluZztcbiAgICAgICAgbGV0IHBhZGRpbmdQb3MgPSB7IHg6IHBhZGRpbmcubGVmdCArIHBvc2l0aW9uLngsIHk6IHBhZGRpbmcudG9wICsgcG9zaXRpb24ueSB9O1xuICAgICAgICBjb25zdCBkcmF3TGluZVdpZHRoID0gMC41O1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSAyMDtcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwYWRkaW5nUG9zLnggLSBsaW5lV2lkdGgsIHk6IHBhZGRpbmdQb3MueSB9LCBwYWRkaW5nUG9zLCB7XG4gICAgICAgICAgICB4OiBwYWRkaW5nUG9zLngsXG4gICAgICAgICAgICB5OiBwYWRkaW5nUG9zLnkgLSBsaW5lV2lkdGhcbiAgICAgICAgfV0sIGRyYXdMaW5lV2lkdGgpO1xuICAgICAgICBwYWRkaW5nUG9zID0geyB4OiBkb2NXaWR0aCAtIHBhZGRpbmcucmlnaHQgKyBwb3NpdGlvbi54LCB5OiBwYWRkaW5nLnRvcCArIHBvc2l0aW9uLnkgfTtcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwYWRkaW5nUG9zLnggKyBsaW5lV2lkdGgsIHk6IHBhZGRpbmdQb3MueSB9LCBwYWRkaW5nUG9zLCB7XG4gICAgICAgICAgICB4OiBwYWRkaW5nUG9zLngsXG4gICAgICAgICAgICB5OiBwYWRkaW5nUG9zLnkgLSBsaW5lV2lkdGhcbiAgICAgICAgfV0sIGRyYXdMaW5lV2lkdGgpO1xuICAgICAgICBwYWRkaW5nUG9zID0geyB4OiBwYWRkaW5nLmxlZnQgKyBwb3NpdGlvbi54LCB5OiBkb2NIZWlnaHQgLSB0aGlzLnBhZGRpbmcuYm90dG9tICsgcG9zaXRpb24ueSB9O1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHBhZGRpbmdQb3MueCAtIGxpbmVXaWR0aCwgeTogcGFkZGluZ1Bvcy55IH0sIHBhZGRpbmdQb3MsIHtcbiAgICAgICAgICAgIHg6IHBhZGRpbmdQb3MueCxcbiAgICAgICAgICAgIHk6IHBhZGRpbmdQb3MueSArIGxpbmVXaWR0aFxuICAgICAgICB9XSwgZHJhd0xpbmVXaWR0aCk7XG4gICAgICAgIHBhZGRpbmdQb3MgPSB7IHg6IGRvY1dpZHRoIC0gcGFkZGluZy5sZWZ0ICsgcG9zaXRpb24ueCwgeTogZG9jSGVpZ2h0IC0gdGhpcy5wYWRkaW5nLmJvdHRvbSArIHBvc2l0aW9uLnkgfTtcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwYWRkaW5nUG9zLnggKyBsaW5lV2lkdGgsIHk6IHBhZGRpbmdQb3MueSB9LCBwYWRkaW5nUG9zLCB7XG4gICAgICAgICAgICB4OiBwYWRkaW5nUG9zLngsXG4gICAgICAgICAgICB5OiBwYWRkaW5nUG9zLnkgKyBsaW5lV2lkdGhcbiAgICAgICAgfV0sIGRyYXdMaW5lV2lkdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItuawtOWNsFxuICAgICAqIEBwYXJhbSBjdHhcbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGRyYXdXYXRlcm1hcmsoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSk6IHZvaWQge1xuICAgICAgICBpZiAodmlld09wdGlvbnMud2F0ZXJtYXJrKSB7XG4gICAgICAgICAgICBjb25zdCB3YXRlcm1hcmsgPSB2aWV3T3B0aW9ucy53YXRlcm1hcms7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHgudHJhbnNsYXRlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICBjb25zdCBkZWdyZWVzID0gTWF0aC5hdGFuKGhlaWdodCAvIHdpZHRoKSAqIDE4MCAvIE1hdGguUElcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHgucm90YXRlKGRlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICAgICAgICBjb25zdCBkID0gTWF0aC5zcXJ0KHdpZHRoICogd2lkdGggKyBoZWlnaHQgKiBoZWlnaHQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5qW35L2TJztcbiAgICAgICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IDYwO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHdhdGVybWFyaywgdGV4dFByb3BzKS53aWR0aFxuICAgICAgICAgICAgY29uc3QgeCA9IGQgLyAyIC0gdGV4dFdpZHRoIC8gMjtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZm9udCA9IHRleHRQcm9wcy5nZXRGb250KClcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5jdHguZmlsbFRleHQod2F0ZXJtYXJrLCB4LCAzMCk7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItuaWh+aho+mhteeggVxuICAgICAqL1xuICAgIGRyYXdEb2NQYWdlTnVtKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnZVdpZHRoID0gdmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoO1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLmdldEluZGV4KCkgKyAxICsgdmlld09wdGlvbnMucGFnZU51bU9mZnNldDtcbiAgICAgICAgY29uc3Qgc3RyID0gQ29tbW9uVXRpbC5wYXJzZVRleHQodmlld09wdGlvbnMucGFnZU51bUZvcm1hdCwgeyBpbmRleDogcGFnZUluZGV4LCBjb3VudDogdGhpcy5wYXJlbnQubGVuZ3RoIH0pO1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQcm9wcy5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5Lu/5a6LJztcbiAgICAgICAgdGV4dFByb3BzLmZvbnRTaXplID0gMTQ7XG4gICAgICAgIHRleHRQcm9wcy5mb250U3R5bGUgPSAnaXRhbGljJztcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChzdHIsIHRleHRQcm9wcyk7XG4gICAgICAgIGNvbnN0IGFsaWduQ2VudGVyWCA9IHBvc2l0aW9uLnggKyBNYXRoLmNlaWwocGFnZVdpZHRoIC8gMikgLSBNYXRoLmNlaWwoc2l6ZS53aWR0aCAvIDIpXG4gICAgICAgIGNvbnN0IHBhaW50WSA9IHBvc2l0aW9uLnkgKyB0aGlzLnJlY3QuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQgLSA1O1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQoc3RyLCB0ZXh0UHJvcHMsIGFsaWduQ2VudGVyWCwgcGFpbnRZLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRG9jdW1lbnRSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZVJlbmRlci5oZWFkZXJMaW5lID0gdGhpcy5oZWFkZXJMaW5lO1xuICAgICAgICBjbG9uZVJlbmRlci5mb290ZXJMaW5lID0gdGhpcy5mb290ZXJMaW5lO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERvY3VtZW50UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdkb2MnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxEb2N1bWVudFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBuZXcgRG9jdW1lbnRFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEb2N1bWVudFByb3BzO1xuICAgICAgICBjb25zdCBkb2NQcm9wcyA9IGRvY3VtZW50RWxlbWVudC5wcm9wcztcbiAgICAgICAgZG9jUHJvcHMud2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICAgICAgZG9jUHJvcHMuaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgICAgICBkb2NQcm9wcy5wYWRkaW5nID0gbmV3IFBhZGRpbmdQcm9wcyhwcm9wcy5wYWRkaW5nLnRvcCwgcHJvcHMucGFkZGluZy5ib3R0b20sIHByb3BzLnBhZGRpbmcubGVmdCwgcHJvcHMucGFkZGluZy5yaWdodCk7XG4gICAgICAgIGRvY1Byb3BzLmhlYWRlckxpbmUgPSBwcm9wcy5oZWFkZXJMaW5lID8/IDEyO1xuICAgICAgICBkb2NQcm9wcy5mb290ZXJMaW5lID0gcHJvcHMuZm9vdGVyTGluZSA/PyAxMjtcbiAgICAgICAgZG9jUHJvcHMuc2NyaXB0cyA9IHByb3BzLnNjcmlwdHM7XG4gICAgICAgIGRvY1Byb3BzLmNyZWF0ZVVzZXJJZCA9IHByb3BzLmNyZWF0ZVVzZXJJZDtcbiAgICAgICAgZG9jUHJvcHMuY3JlYXRlVXNlck5hbWUgPSBwcm9wcy5jcmVhdGVVc2VyTmFtZTtcbiAgICAgICAgZG9jUHJvcHMuY3JlYXRlRGF0ZSA9IHByb3BzLmNyZWF0ZURhdGU7XG4gICAgICAgIGRvY1Byb3BzLm9yaWVudCA9IHByb3BzLm9yaWVudCA/PyAncG9ydHJhaXQnO1xuICAgICAgICByZXR1cm4gZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtCbG9ja0NvbnRhaW5lckVsZW1lbnQsIEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBSZWN0LCBTZXJpYWxpemVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge01vdXNlRWxlbWVudEV2ZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RG9jdW1lbnRFbGVtZW50fSBmcm9tIFwiLi9kb2MtaW1wbFwiO1xuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50IHtcbiAgICAvL+W9k+WJjeWMuuWfn+WGheaYr+WQpueVmeeXlVxuICAgIHRyYWNrQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdib2R5Jyk7XG4gICAgICAgIC8vdGhpcy5lZGl0TW9kZSA9IEVkaXRNb2RlLkZyZWU7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnREYmxDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3dpdGNoRWRpdE1vZGUoZXZ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9keScsXG4gICAgICAgICAgICBwcm9wczoge31cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaEVkaXRNb2RlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZSh0aGlzLCBEb2N1bWVudEVsZW1lbnQpO1xuICAgICAgICBpZiAoZG9jRWxlbWVudCkge1xuICAgICAgICAgICAgZG9jRWxlbWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKGV2dC5zZWxlY3Rpb25TdGF0ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEb2N1bWVudEJvZHlFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnRCb2R5RWxlbWVudCgpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keVJlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgcmVuZGVyLnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5kaXNhYmxlQ2xpY2sgJiYgcmVuZGVyLmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9uZShjbG9uZURhdGEgPSB0cnVlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgaWYgKGNsb25lRGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keUZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnYm9keSc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBEb2N1bWVudEJvZHlFbGVtZW50KCk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxufVxuXG4iLCJpbXBvcnQge0Jsb2NrQ29udGFpbmVyRWxlbWVudCwgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIFJlY3QsIFNlcmlhbGl6ZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7TW91c2VFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0Jsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEb2N1bWVudEVsZW1lbnR9IGZyb20gXCIuL2RvYy1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEZvb3RlckVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZm9vdGVyJyk7XG4gICAgICAgIC8vdGhpcy5lZGl0TW9kZSA9IEVkaXRNb2RlLkRpc2FibGVkO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnREYmxDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoRWRpdE1vZGUoZXZ0KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEb2N1bWVudEZvb3RlckVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzd2l0Y2hFZGl0TW9kZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0VsZW1lbnQgPSB0aGlzLnBhcmVudCBhcyBEb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGRvY0VsZW1lbnQuc3dpdGNoUGFnZUhlYWRlckVkaXRvcihldnQuc2VsZWN0aW9uU3RhdGUsIHRoaXMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0ID0gbmV3IERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcmVuZGVyT2JqZWN0O1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZm9vdGVyJyxcbiAgICAgICAgICAgIHByb3BzOiB7fVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIHJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIC8v5Yik5pat6aG155yJ5piv5ZCm5Li66L6T5YWl5YaF5a65XG4gICAgICAgICAgICBjb25zdCBpc0Zvb3RlckVtcHR5ID0gRWxlbWVudFV0aWwuY2hlY2tFbXB0eUNvbnRlbnQodGhpcyk7XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRpc2FibGVDbGljayAmJiByZW5kZXIuZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgICAgIGlmIChpc0Zvb3RlckVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zZXRHbG9iYWxBbHBoYSgwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMC41KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Rm9vdGVyRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdmb290ZXInO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgRG9jdW1lbnRGb290ZXJFbGVtZW50KCk7XG4gICAgICAgIC8vZWxlbWVudC5yZW5kZXJDdHggPSByZW5kZXJDdHg7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEJsb2NrQ29udGFpbmVyRWxlbWVudCwgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIFNlcmlhbGl6ZVByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBNb3VzZUVsZW1lbnRFdmVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50IH0gZnJvbSBcIi4vZG9jLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50SGVhZGVyRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdoZWFkZXInKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudERibENsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hFZGl0TW9kZShldnQpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgLy90aGlzLmVkaXRNb2RlID0gRWRpdE1vZGUuRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50SGVhZGVyRWxlbWVudCgpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHN3aXRjaEVkaXRNb2RlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRWxlbWVudCA9IHRoaXMucGFyZW50IGFzIERvY3VtZW50RWxlbWVudDtcbiAgICAgICAgZG9jRWxlbWVudC5zd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKGV2dC5zZWxlY3Rpb25TdGF0ZSwgdGhpcyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdCA9IG5ldyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2hlYWRlcicsXG4gICAgICAgICAgICBwcm9wczoge31cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIHBvc2l0aW9uIH0gPSBlO1xuICAgICAgICByZW5kZXIudHJhbigoKSA9PiB7XG4gICAgICAgICAgICAvL+WIpOaWremhteecieaYr+WQpuS4uui+k+WFpeWGheWuuVxuICAgICAgICAgICAgY29uc3QgaXNIZWFkZXJFbXB0eSA9IEVsZW1lbnRVdGlsLmNoZWNrRW1wdHlDb250ZW50KHRoaXMpO1xuICAgICAgICAgICAgLy/lrZjlnKjovpPlhaXlhoXlrrnml7bvvIznu5jliLbpobXnnIkt6aG15L2T5YiG5Ymy57q/XG4gICAgICAgICAgICBpZiAoIWlzSGVhZGVyRW1wdHkgfHwgIXRoaXMuZWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJMaW5lWSA9IHRoaXMucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdIb3JpTGluZShwb3NpdGlvbi54LCBwb3NpdGlvbi55ICsgaGVhZGVyTGluZVksIHRoaXMucmVjdC53aWR0aCwgJ2JsYWNrJywgMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuZGlzYWJsZUNsaWNrICYmIHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSGVhZGVyRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zZXRHbG9iYWxBbHBoYSgwLjcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRIZWFkZXJGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2hlYWRlcic7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBEb2N1bWVudEhlYWRlckVsZW1lbnQoKTtcbiAgICAgICAgLy9lbGVtZW50LnJlbmRlckN0eCA9IHJlbmRlckN0eDtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRlbnRFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIEVsZW1lbnQsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnMsXG4gICAgcmVhZEVsZW1lbnRQcm9wc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IENvbnRleHRNZW51RWxlbWVudEV2ZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1xuICAgIEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLFxuICAgIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LFxuICAgIFJlbmRlck9iamVjdFxufSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0ICogYXMgSGlzdG9yeSBmcm9tICcuLi8uLi9lbGVtZW50LXRyYWNlLXRyYWNraW5nJ1xuXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGVudEVsZW1lbnQ8UGFyYWdyYXBoUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBQYXJhZ3JhcGhQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3AnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBQYXJhZ3JhcGhQcm9wcygpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdCYWNrc3BhY2VLZXknLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZ0LnNlbGVjdGlvblN0YXRlLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBGaXJzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAocEZpcnN0TGVhZkVsZW1lbnQgPT09IGV2dC5zb3VyY2UgJiYgZXZ0LnNvdXJjZU9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5udW1iZXJUeXBlID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubnVtYmVyVHlwZSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluZGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbmRlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7moLflvI9cbiAgICAgKiBAcGFyYW0gZm9ybWF0XG4gICAgICovXG4gICAgc2V0Rm9ybWF0KGZvcm1hdDogUGFydGlhbDxQYXJhZ3JhcGhQcm9wcz4pOiB2b2lkIHtcbiAgICAgICAgSGlzdG9yeS5mb3JtYXRFbGUodGhpcywgZm9ybWF0KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybWF0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb3BzW2tleV0gPSBmb3JtYXRba2V5XTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUGFyYWdyYXBoUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IG5ldyBQYXJhZ3JhcGhSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJldHVybiBwYXJhUmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAncCcsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQoKTogUGFyYWdyYXBoRWxlbWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoUmVuZGVyT2JqZWN0IGV4dGVuZHMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgdGhpcy5kcmF3UHJvamVjdE51bWJlcihlLnJlbmRlciwgZS5kb2NDdHgudmlld09wdGlvbnMpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog57uY5Yi26aG555uu56ym5Y+3XG4gICAgICovXG4gICAgZHJhd1Byb2plY3ROdW1iZXIoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFFbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGlmIChwYXJhRWxlbWVudC5wcm9wcy5udW1iZXJUeXBlID49IDApIHtcbiAgICAgICAgICAgIGlmIChwYXJhRWxlbWVudC5wYWludFJlbmRlcnMuaW5kZXhPZih0aGlzKSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdExpbmUgPSB0aGlzLmdldENoaWxkKDApIGFzIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKCFmaXJzdExpbmUpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5saW5lID0gZmlyc3RMaW5lLmdldENoaWxkKDApO1xuICAgICAgICAgICAgaWYgKCFmaXJzdElubGluZSkge1xuICAgICAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RJbmxpbmVQYWludFBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZmlyc3RJbmxpbmUsIHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IC12aWV3T3B0aW9ucy50cmFuc2xhdGVZXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlclN5bWJvbFkgPSBmaXJzdElubGluZVBhaW50UG9zLnkgKyBNYXRoLmNlaWwoZmlyc3RJbmxpbmUucmVjdC5oZWlnaHQgLyAyKTtcbiAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHN0ciwgdGV4dFByb3BzLCBmaXJzdElubGluZVBhaW50UG9zLnggLSBwYXJhRWxlbWVudC5wYXJhUHJvcHMuaW5kZW50LCBudW1iZXJTeW1ib2xZLCAxNCwgMTQpO1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxDaXJjdWxhcihmaXJzdElubGluZVBhaW50UG9zLnggLSBwYXJhRWxlbWVudC5wcm9wcy5pbmRlbnQgKyAyLCBudW1iZXJTeW1ib2xZLCA0KVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBQYXJhZ3JhcGhSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxuICAgIGNyZWF0ZUxpbmVSZWN0KCk6IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgbGluZVJlY3QgPSBuZXcgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgbGluZVJlY3QucmVjdC5tYXhXaWR0aCA9IHRoaXMucmVjdC5tYXhXaWR0aDtcbiAgICAgICAgcmV0dXJuIGxpbmVSZWN0O1xuICAgIH1cblxuXG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8UGFyYWdyYXBoUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdwJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8UGFyYWdyYXBoUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHBhcmFFbGVtZW50ID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy5pbmRlbnQgPSBwcm9wcz8uaW5kZW50ID8/IDA7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLmhhbmdpbmcgPSBwcm9wcz8uaGFuZ2luZyA/PyAwO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy50ZXh0QWxpZ24gPSBwcm9wcz8udGV4dEFsaWduID8/ICdsZWZ0JztcbiAgICAgICAgcGFyYUVsZW1lbnQucHJvcHMubnVtYmVyVHlwZSA9IHByb3BzPy5udW1iZXJUeXBlID8/IC0xO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy5saW5lSGVpZ2h0ID0gcHJvcHM/LmxpbmVIZWlnaHQgPz8gMS4zO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy5wYWdlQnJlYWsgPSBwcm9wcz8ucGFnZUJyZWFrID8/IGZhbHNlO1xuICAgICAgICByZXR1cm4gcGFyYUVsZW1lbnQ7XG4gICAgfVxufVxuXG4vKipcbiAqIOauteiQveihjOahhlxuICovXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QgZXh0ZW5kcyBCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN0IHtcblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBFbGVtZW50LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgSVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBUZXh0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuXG5leHBvcnQgY2xhc3MgUFN5bWJvbEVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudCB7XG4gICAgdGV4dFByb3BzOiBUZXh0UHJvcHM7XG4gICAgZGVmYXVsdEhlaWdodCA9IDE0O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdwc3ltJyk7XG4gICAgICAgIHRoaXMudGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0aGlzLnRleHRQcm9wcy5mb250U2l6ZSA9IHRoaXMuZGVmYXVsdEhlaWdodDtcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMuZm9udE5hbWUgPSAn5a6L5L2TJztcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMuY29sb3IgPSAnIzhjOGM4Yyc7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IExlYWZSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBuZXcgUFN5bWJvbFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgc3ltYm9sLnJlY3QuaGVpZ2h0ID0gdGhpcy5kZWZhdWx0SGVpZ2h0O1xuICAgICAgICBzeW1ib2wucmVjdC53aWR0aCA9IDc7XG4gICAgICAgIHJldHVybiBzeW1ib2w7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQU3ltYm9sRWxlbWVudCgpO1xuICAgICAgICBjbG9uZS5kZWZhdWx0SGVpZ2h0ID0gdGhpcy5kZWZhdWx0SGVpZ2h0O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0U2VsZkxlbmd0aChwdXJlOiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHB1cmUgPyAwIDogMTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQU3ltYm9sUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxQU3ltYm9sRWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgcG9zaXRpb24gfSA9IGU7XG4gICAgICAgIGlmIChyZW5kZXIuZHJhd01vZGUgPT09ICdwcmludCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd1RleHQoJ+KkticsIHRoaXMuZWxlbWVudC50ZXh0UHJvcHMsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIDIwLCB0aGlzLnJlY3QuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvL+e7mOWItuauteiQveespuWPt1xuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBQU3ltYm9sUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG59XG5cbiIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgUGFkZGluZ1Byb3BzLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1RhYmxlQ2VsbFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lubGluZU11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtUYWJsZUVsZW1lbnR9IGZyb20gXCIuL3RhYmxlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbEVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8VGFibGVDZWxsUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBUYWJsZUNlbGxQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3RiYycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRhYmxlQ2VsbFByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIGJlZ2luTWVhc3VyZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuYmVnaW5NZWFzdXJlKCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gIXRoaXMuaXNOb3RCZU1lcmdlZENlbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkuI3ooqvlkIjlubbljZXlhYPmoLznmoTljZXlhYPmoLxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGlzTm90QmVNZXJnZWRDZWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5oTWVyZ2UgIT09ICdjb250aW51ZScgJiYgdGhpcy5wcm9wcy52TWVyZ2UgIT09ICdjb250aW51ZSc7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuaXNOb3RCZU1lcmdlZENlbGwoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2NlbGxXaWR0aCwgY2VsbE9mZnNldH0gPSB0aGlzLmdldENlbGxXaWR0aCgpO1xuICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gbmV3IFRhYmxlQ2VsbFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgY2VsbFJlbmRlci5yZWN0LndpZHRoID0gY2VsbFdpZHRoO1xuICAgICAgICBjZWxsUmVuZGVyLnJlY3QubWF4V2lkdGggPSBjZWxsV2lkdGg7XG4gICAgICAgIGNlbGxSZW5kZXIucGFkZGluZyA9IG5ldyBQYWRkaW5nUHJvcHMoMCwgMCwgNSwgNSk7XG4gICAgICAgIGNlbGxSZW5kZXIucmVjdC54ID0gY2VsbE9mZnNldDtcbiAgICAgICAgcmV0dXJuIGNlbGxSZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3RiYycsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFdpZHRoKCk6IHsgY2VsbFdpZHRoOiBudW1iZXIsIGNlbGxPZmZzZXQ6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFibGUgPSByb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gcm93LmdldENoaWxkSW5kZXgodGhpcyk7XG4gICAgICAgIGxldCBjZWxsV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgoY2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgY2VsbE9mZnNldCA9IHRhYmxlLmdldENlbGxPZmZzZXRYKGNlbGxJbmRleCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2VsbEluZGV4ICsgMTsgaSA8IHRhYmxlLmdldENvbHNDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChuZXh0Q2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbFdpZHRoICs9IHRhYmxlLmdldENlbGxXaWR0aChpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtjZWxsV2lkdGgsIGNlbGxPZmZzZXR9O1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVDZWxsKCk6IFRhYmxlQ2VsbEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0YyA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgIHJldHVybiB0YztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbFJlbmRlck9iamVjdCBleHRlbmRzIElubGluZU11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgcmVuZGVyLnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmNsaXAocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHtoTWVyZ2UsIHZNZXJnZSwgYmFja2dyb3VuZENvbG9yLCBkaWFnb25hbH0gPSAoPFRhYmxlQ2VsbEVsZW1lbnQ+dGhpcy5lbGVtZW50KS5wcm9wcztcbiAgICAgICAgICAgIGlmIChoTWVyZ2UgPT09ICdjb250aW51ZScgfHwgdk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDApO1xuICAgICAgICAgICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuc2V0R2xvYmFsQWxwaGEoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yICYmIHRoaXMucmVjdC53aWR0aCAmJiB0aGlzLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgYmFja2dyb3VuZENvbG9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRpYWdvbmFsICYmIHRoaXMucmVjdC53aWR0aCAmJiB0aGlzLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGRpYWdvbmFsU3RhcnRYID0gZGlhZ29uYWwgPT09ICdtYWluJyA/IHBvc2l0aW9uLnggOiBwb3NpdGlvbi54ICsgdGhpcy5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIGxldCBkaWFnb25hbFN0YXJ0WSA9IHBvc2l0aW9uLnk7XG4gICAgICAgICAgICAgICAgbGV0IGRpYWdvbmFsRW5kWCA9IGRpYWdvbmFsID09PSAnbWFpbicgPyBwb3NpdGlvbi54ICsgdGhpcy5yZWN0LndpZHRoIDogcG9zaXRpb24ueDtcbiAgICAgICAgICAgICAgICBsZXQgZGlhZ29uYWxFbmRZID0gcG9zaXRpb24ueSArIHRoaXMucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7eDogZGlhZ29uYWxTdGFydFgsIHk6IGRpYWdvbmFsU3RhcnRZfSwge1xuICAgICAgICAgICAgICAgICAgICB4OiBkaWFnb25hbEVuZFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRpYWdvbmFsRW5kWVxuICAgICAgICAgICAgICAgIH1dKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVGFibGVDZWxsUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucGFkZGluZyA9IHRoaXMucGFkZGluZz8uY2xvbmUoKTtcbiAgICAgICAgY2xvbmVSZW5kZXIubWFyZ2luID0gdGhpcy5tYXJnaW4/LmNsb25lKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFRhYmxlQ2VsbFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAndGJjJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8VGFibGVDZWxsUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRjID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgICAgICB0Yy5wcm9wcy52TWVyZ2UgPSBwcm9wcz8udk1lcmdlID8/IG51bGw7XG4gICAgICAgIHRjLnByb3BzLmhNZXJnZSA9IHByb3BzPy5oTWVyZ2UgPz8gbnVsbDtcbiAgICAgICAgdGMucHJvcHMudkFsaWduID0gcHJvcHM/LnZBbGlnbiA/PyBudWxsO1xuICAgICAgICB0Yy5wcm9wcy5iYWNrZ3JvdW5kQ29sb3IgPSBwcm9wcz8uYmFja2dyb3VuZENvbG9yID8/IG51bGw7XG4gICAgICAgIHRjLnByb3BzLmRpYWdvbmFsID0gcHJvcHM/LmRpYWdvbmFsID8/IG51bGw7XG4gICAgICAgIC8vdGMucmVuZGVyQ3R4ID0gcmVuZGVyQ3R4O1xuICAgICAgICByZXR1cm4gdGM7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIE1vZGlmeUZsYWcsXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7VGFibGVSb3dQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7VGFibGVDZWxsRWxlbWVudH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVJvd0VsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8VGFibGVSb3dQcm9wcz4ge1xuICAgIC8vcHJvcHM6IFRhYmxlUm93UHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd0cicpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRhYmxlUm93UHJvcHMoKTtcbiAgICAgICAgLy/lnKjlt67lvILmm7TmlrDkuK3vvIznlLHkuo7ooYzlhoXljZXlhYPmoLzlrZjlnKjlkIjlubbooYznmoTmg4XlhrXvvIzpnIDopoHlsIblvZPliY3ooYzlhoXlrZjlnKjlkIjlubbnmoTljZXlhYPmoLzvvIzlsIblhbbkv67mlLnmoIflv5fmlLnkuLrkv67mlLlcbiAgICAgICAgY29uc3QgY2hhbmdlU3ViID0gdGhpcy5vbkNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuVHJhY2spIHtcbiAgICAgICAgICAgICAgICAvL3RoaXMuY2hlY2tSb3dNb2RpZnlTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3RvLWNoaWxkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZHN1YnNjcmliZSh0aGlzLCBjaGFuZ2VTdWIpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxlUm93UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAndHInLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzPy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRhYmxlUm93RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlUm93KGNvbHM6IG51bWJlcik6IFRhYmxlUm93RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRyID0gbmV3IFRhYmxlUm93RWxlbWVudCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHM7IGkrKykge1xuICAgICAgICAgICAgdHIuYWRkQ2hpbGQoVGFibGVDZWxsRWxlbWVudC5jcmVhdGVDZWxsKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVJvd1JlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0PFRhYmxlUm93RWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgIH1cblxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVGFibGVSb3dSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlUm93RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFRhYmxlUm93UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICd0cic7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPFRhYmxlUm93UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBUYWJsZVJvd1Byb3BzO1xuICAgICAgICBjb25zdCB0ciA9IG5ldyBUYWJsZVJvd0VsZW1lbnQoKTtcbiAgICAgICAgdHIucHJvcHMubWluSGVpZ2h0ID0gcHJvcHM/Lm1pbkhlaWdodCA/PyAtMTtcbiAgICAgICAgdHIucHJvcHMuaGVhZGVyUm93ID0gcHJvcHM/LmhlYWRlclJvdztcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFBhcmFncmFwaEVsZW1lbnQgfSBmcm9tIFwiLi4vcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCB9IGZyb20gXCIuL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSBcIi4vdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVSb3dFbGVtZW50IH0gZnJvbSBcIi4vdGFibGUtcm93LWltcGxcIjtcblxuXG5leHBvcnQgY2xhc3MgVGFibGVVdGlsIHtcblxuICAgIHN0YXRpYyBjYW5EZWxldGVUYWJsZShzczogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wgfSA9IHNzO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuICEhdGI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qCh6aqM5b2T5YmN6YCJ5Yy65piv5ZCm5Y+v5Lul5omn6KGM5ZCI5bm25Y2V5YWD5qC85pON5L2cXG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgY2FuTWVyZ2VDZWxscyhzczogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgZW5kQ29udHJvbCwgY29sbGFwc2VkLCBzZWxlY3RlZFJhbmdlIH0gPSBzcztcbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGFydENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQgJiYgZW5kQ2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRiUmVnaW9uID0gdGhpcy5nZXRUYWJsZVJlY3RTZWxlY3RlZFJlZ2lvbih0YkVsZW1lbnQsIHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UgJiYgc2VsZWN0ZWRSYW5nZS50YXJnZXQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzOiBBcnJheTxUYWJsZUNlbGxFbGVtZW50PiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4uZXZlcnkoaXRlbSA9PiBpdGVtLnNlbGVjdGVkQ2hpbGRyZW4uZXZlcnkoY2VsbCA9PiBzZWxlY3RlZENlbGxzLnB1c2goY2VsbC50YXJnZXQgYXMgVGFibGVDZWxsRWxlbWVudCkpKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRiUmVnaW9uLnN0YXJ0Um93OyBpIDw9IHRiUmVnaW9uLmVuZFJvdzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGJFbGVtZW50LmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4oaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gdGJSZWdpb24uc3RhcnRDb2w7IGogPD0gdGJSZWdpb24uZW5kQ29sOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJDZWxsLmlzTm90QmVNZXJnZWRDZWxsKCkgJiYgc2VsZWN0ZWRDZWxscy5pbmRleE9mKGN1cnJDZWxsKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaoquWQkeWQiOW5tuW9k+WJjeWNleWFg+agvOWQiOW5tue7k+adn+e0ouW8leS9jee9rlxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRITWVyZ2VFbmRJbmRleCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKHJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGxldCBpbmRleCA9IGNvbEluZGV4O1xuICAgICAgICBmb3IgKGxldCBpID0gY29sSW5kZXggKyAxOyBpIDwgdGIuZ2V0Q29sc0NvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaoquWQkeWQiOW5tuW9k+WJjeWNleWFg+agvOWQiOW5tuW8gOWni+e0ouW8leS9jee9rlxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRITWVyZ2VTdGFydEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gY29sSW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOS4u+WQiOW5tuWNleWFg+agvCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue6teWQkeWQiOW5tuW9k+WJjeWNleWFg+agvOWQiOW5tue7k+adn+e0ouW8leS9jee9rlxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleCBpXG4gICAgICovXG4gICAgc3RhdGljIGdldFZNZXJnZUVuZEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnurXlkJHlkIjlubblvZPliY3ljZXlhYPmoLzlkIjlubblvIDlp4vntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXggaVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRWTWVyZ2VTdGFydEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBjdXJyUm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOS4u+WQiOW5tuWNleWFg+agvCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQiOW5tuWNleWFg+agvFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIG1lcmdlQ2VsbHMoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydENvbnRyb2wsIGVuZENvbnRyb2wsIGNvbGxhcHNlZCB9ID0gc3M7XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50IHx8IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdGJFbGVtZW50ID0gYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50ID8gYW5jZXN0b3JDb21tb25Db250cm9sIDogYW5jZXN0b3JDb21tb25Db250cm9sLnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZW5kQ29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50ICYmIGVuZENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAvL3RoaXMuY29tYmluZUNlbGxDb250ZW50KHRiRWxlbWVudCwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVDZWxscyh0YkVsZW1lbnQsIHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoZWNrUm93QmVNZXJnZWQoc3MpO1xuICAgICAgICAgICAgc3MuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOWQiOW5tuWNleWFg+agvOWQjumcgOimgeagoemqjFxuICAgICAqIDEu5aaC5p6c5p+Q5Liq6KGM55qE5omA5pyJ5Y2V5YWD5qC86YO95LiN5pivbm9ybWFs77yM5YiZ6ZyA6KaB5Yig6Zmk5b2T5YmN6KGMXG4gICAgICogMi7lpoLmnpzmn5DkuKrliJfnmoTmiYDmnInnmoTljZXlhYPmoLzpg73kuI3mmK9ub3JtYWzvvIzliJnpnIDopoHliKDpmaTlvZPliY3liJdcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBjaGVja1Jvd0JlTWVyZ2VkKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghdGIpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHNDb3VudCA9IHRiLmdldENvbHNDb3VudCgpO1xuICAgICAgICBjb25zdCBmdWxsTWVyZ2VSb3dzOiBBcnJheTxUYWJsZVJvd0VsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHNDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICghY2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lvZPliY3ooYzmiYDmnInnmoTljZXlhYPmoLzpg73ooqvlkIjlubbvvIzpnIDopoHliKDpmaRcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gY29sc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgZnVsbE1lcmdlUm93cy5wdXNoKHJvdylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdWxsTWVyZ2VSb3dzLmZvckVhY2gocm93ID0+IHRoaXMucmVtb3ZlUm93KHJvdykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOihjFxuICAgICAqIEBwYXJhbSByb3dcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZW1vdmVSb3cocm93OiBUYWJsZVJvd0VsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgdGIgPSByb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaSk7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRWTWVyZ2VFbmRJbmRleCh0Yiwgcm93SW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2VFbmRJbmRleCA+IHJvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRSb3cgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KHJvd0luZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaSkucHJvcHMudk1lcmdlID0gdk1lcmdlRW5kSW5kZXggLSByb3dJbmRleCA+IDIgPyAncmVzdGFydCcgOiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCB2TWVyZ2VFbmRJbmRleCA9IHRoaXMuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIHJvd0luZGV4LCBpKTtcbiAgICAgICAgICAgICAgICAvLyBpZiAodk1lcmdlRW5kSW5kZXggPiByb3dJbmRleCkge1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBuZXh0Um93ID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50Pihyb3dJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIC8vICAgICBuZXh0Um93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpLmNlbGxQcm9wcy52TWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBjb25zdCB2TWVyZ2VTdGFydEluZGV4ID0gdGhpcy5nZXRWTWVyZ2VTdGFydEluZGV4KHRiLCByb3dJbmRleCwgaSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgdk1lcmdlRW5kSW5kZXggPSB0aGlzLmdldFZNZXJnZUVuZEluZGV4KHRiLCByb3dJbmRleCwgaSk7XG4gICAgICAgICAgICAgICAgLy/lvZPliY3ljZXlhYPmoLzlpITkuo7lkIjlubbooYznmoTmnIDlkI7kuIDooYzvvIzlubbkuJTlkIjlubbnmoTooYzmlbDkuLoy6KGMXG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZUVuZEluZGV4ID09PSByb3dJbmRleCAmJiB2TWVyZ2VFbmRJbmRleCAtIHZNZXJnZVN0YXJ0SW5kZXggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvdmVDZWxsID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50Pih2TWVyZ2VTdGFydEluZGV4KS5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihpKVxuICAgICAgICAgICAgICAgICAgICBhYm92ZUNlbGwucHJvcHMudk1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGIucmVtb3ZlQ2hpbGQocm93KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTliJdcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZW1vdmVDb2wodGI6IFRhYmxlRWxlbWVudCwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGkpO1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50Pihjb2xJbmRleCk7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChoTWVyZ2VFbmRJbmRleCA+IGNvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRDZWxsID0gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGNvbEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDZWxsLnByb3BzLmhNZXJnZSA9IGhNZXJnZUVuZEluZGV4IC0gY29sSW5kZXggPiAyID8gJ3Jlc3RhcnQnIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaE1lcmdlU3RhcnRJbmRleCA9IHRoaXMuZ2V0SE1lcmdlU3RhcnRJbmRleCh0YiwgaSwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIC8v5b2T5YmN5Y2V5YWD5qC85aSE5LqO5ZCI5bm26KGM55qE5pyA5ZCO5LiA6KGM77yM5bm25LiU5ZCI5bm255qE6KGM5pWw5Li6MuihjFxuICAgICAgICAgICAgICAgIGlmIChoTWVyZ2VFbmRJbmRleCA9PT0gY29sSW5kZXggJiYgaE1lcmdlRW5kSW5kZXggLSBoTWVyZ2VTdGFydEluZGV4ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlclZNZXJnZUNlbGwgPSB0Yi5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGhNZXJnZVN0YXJ0SW5kZXgpLmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpXG4gICAgICAgICAgICAgICAgICAgIG1hc3RlclZNZXJnZUNlbGwucHJvcHMuaE1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cucmVtb3ZlQ2hpbGQoY2VsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGIucmVtb3ZlQ29sKGNvbEluZGV4KTtcbiAgICAgICAgaWYgKHRiLnByb3BzLmNvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0Yi5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOWFieagh+aJgOWcqOeahOW9k+WJjeihjFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVDdXJyUm93KHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXNzLnN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyUm93ID0gc3RhcnRDZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRiID0gY3VyclJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICB0aGlzLnJlbW92ZVJvdyhjdXJyUm93KTtcbiAgICAgICAgaWYgKHRiLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlhYnmoIfmiYDlnKjnmoTlvZPliY3liJdcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlQ3VyckNvbChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHRiID0gY3VyclJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb2wodGIsIHN0YXJ0Q2VsbC5nZXRJbmRleCgpKTtcbiAgICAgICAgICAgIHNzLmNsZWFyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgZW5kQ29udHJvbCB9ID0gc3M7XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGFydENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQgJiYgZW5kQ2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgICAgICBsZXQgZW5kQ29sSW5kZXggPSBlbmRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHN0YXJ0Q29sSW5kZXggPD0gZW5kQ29sSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb2wodGJFbGVtZW50LCBlbmRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZENvbEluZGV4LS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGJFbGVtZW50LnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3MuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkIjlubbljZXlhYPmoLxcbiAgICAgKi9cbiAgICBzdGF0aWMgY29tYmluZUNlbGxzKHRiRWxlbWVudDogVGFibGVFbGVtZW50LCBzdGFydENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQsIGVuZENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGJSZWdpb24gPSB0aGlzLmdldFRhYmxlUmVjdFNlbGVjdGVkUmVnaW9uKHRiRWxlbWVudCwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgY29uc3QgY2VsbENvbnRlbnRzOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gdGJSZWdpb24uc3RhcnRSb3c7IGkgPD0gdGJSZWdpb24uZW5kUm93OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0YkVsZW1lbnQuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50PihpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSB0YlJlZ2lvbi5zdGFydENvbDsgaiA8PSB0YlJlZ2lvbi5lbmRDb2w7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJDZWxsID0gY3VyclJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihqKTtcbiAgICAgICAgICAgICAgICBjdXJyQ2VsbC5wcm9wcy52TWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGN1cnJDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IHRiUmVnaW9uLnN0YXJ0Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJDZWxsLnByb3BzLnZNZXJnZSA9IGkgPT09IHRiUmVnaW9uLnN0YXJ0Um93ID8gJ3Jlc3RhcnQnIDogJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgY3VyckNlbGwucHJvcHMuaE1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VyckNlbGwgIT09IHN0YXJ0Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsQ29udGVudHMucHVzaCguLi5FbGVtZW50VXRpbC5nZXRDaGlsZHJlbkVsZW1lbnRzKGN1cnJDZWxsKSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJDZWxsLmNsZWFySXRlbXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lpoLmnpzlkIjlubbnmoTljZXlhYPmoLzpg73mmK/nqbrmrrXokL3vvIzliJnkuI3lkIjlubblhoXlrrlcbiAgICAgICAgaWYgKCFjZWxsQ29udGVudHMuZXZlcnkoKGl0ZW0pID0+IChpdGVtIGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCAmJiBpdGVtLmxlbmd0aCA9PT0gMSkpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxDb250ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHN0YXJ0Q2VsbC5hZGRDaGlsZChjZWxsQ29udGVudHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgY2FuU3BsaXRDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBlbmRDb250cm9sLCBjb2xsYXBzZWQgfSA9IHNzO1xuICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50IHx8IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdGJFbGVtZW50ID0gYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50ID8gYW5jZXN0b3JDb21tb25Db250cm9sIDogYW5jZXN0b3JDb21tb25Db250cm9sLnBhcmVudDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbmRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChzdGFydENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQgJiYgZW5kQ2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGFydENlbGwgPT09IGVuZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Q2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0JyB8fCBzdGFydENlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIXN0YXJ0Q2VsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnRDZWxsIGlzIG51bGwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgaE1lcmdlLCB2TWVyZ2UgfSA9IHN0YXJ0Q2VsbD8ucHJvcHM7XG4gICAgICAgICAgICByZXR1cm4gaE1lcmdlID09PSAncmVzdGFydCcgfHwgdk1lcmdlID09PSAncmVzdGFydCcgfHwgIWhNZXJnZSB8fCAhdk1lcmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWwhuWQiOW5tueahOWNleWFg+agvOWQiOW5tui/mOWOn1xuICAgICAqIEBwYXJhbSBzc1xuICAgICAqL1xuICAgIHN0YXRpYyByZXN0b3JlQ2VsbChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgZW5kQ29udHJvbCwgY29sbGFwc2VkIH0gPSBzcztcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmIChzdGFydENlbGwpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZUNlbGxNZXJnZShzdGFydENlbGwpO1xuICAgICAgICAgICAgc3MucmVzZXRSYW5nZShzdGFydENlbGwsIDApO1xuICAgICAgICAgICAgc3RhcnRDZWxsLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZXN0b3JlQ2VsbE1lcmdlKGNlbGw6IFRhYmxlQ2VsbEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB2TWVyZ2UsIGhNZXJnZSB9ID0gY2VsbC5wcm9wcztcbiAgICAgICAgY29uc3Qgcm93ID0gY2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCB0YiA9IHJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHJvdy5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjb2xJbmRleCA9IGNlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgaWYgKHZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggKyAxOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09IFwiY29udGludWVcIikge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gXCJyZXN0YXJ0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZUNlbGxNZXJnZShjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb2xJbmRleCArIDE7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy5oTWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09IFwicmVzdGFydFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVDZWxsTWVyZ2UoY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2VsbC5wcm9wcy5oTWVyZ2UgPSBudWxsO1xuICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9IG51bGw7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRWTWVyZ2VSb3dzKHRiOiBUYWJsZUVsZW1lbnQsIG1hc3RlclJvd0luZGV4OiBudW1iZXIsIG1hc3RlckNvbEluZGV4OiBudW1iZXIpOiBBcnJheTxUYWJsZVJvd0VsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PFRhYmxlUm93RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IG1hc3RlclJvd0luZGV4ICsgMTsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSA8VGFibGVSb3dFbGVtZW50PnRiLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChtYXN0ZXJDb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gocm93KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBpbnNlcnRDb2woc3M6IFNlbGVjdGlvblN0YXRlLCBpbnNlcnRDb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCB0YiA9IHN0YXJ0Um93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJDb2xJbmRleCA9IHN0YXJ0Q2VsbC5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjb2xzQ291bnQgPSB0Yi5nZXRDb2xzQ291bnQoKTtcbiAgICAgICAgaW5zZXJ0Q29sSW5kZXggPSBpbnNlcnRDb2xJbmRleCA8IDAgPyAwIDogaW5zZXJ0Q29sSW5kZXg7XG4gICAgICAgIGluc2VydENvbEluZGV4ID0gaW5zZXJ0Q29sSW5kZXggPiBjb2xzQ291bnQgPyBjb2xzQ291bnQgOiBpbnNlcnRDb2xJbmRleDtcbiAgICAgICAgLy/mj5LlhaXliJfpnIDopoHlsIbkuYvliY3liJfliIblibJcbiAgICAgICAgY29uc3QgaW5zZXJ0Q29sV2lkdGggPSBpbnNlcnRDb2xJbmRleCA9PT0gY29sc0NvdW50ID8gdGIuZ2V0Q2VsbFdpZHRoKGNvbHNDb3VudCAtIDEpIDogdGIuZ2V0Q2VsbFdpZHRoKGluc2VydENvbEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3Q29sV2lkdGggPSBNYXRoLmZsb29yKGluc2VydENvbFdpZHRoIC8gMik7XG4gICAgICAgIGlmIChuZXdDb2xXaWR0aCA8IDIwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+aPkuWFpeWIl+eahOacgOWwj+WuveW6puS4jeiDveWwj+S6jjIwLOW9k+WJjeS4ujonICsgbmV3Q29sV2lkdGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50PihpKVxuICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgICAgICBpZiAoaW5zZXJ0Q29sSW5kZXggPT09IDAgfHwgaW5zZXJ0Q29sSW5kZXggPT09IGNvbHNDb3VudCkge1xuICAgICAgICAgICAgICAgIHJvdy5hZGRDaGlsZChuZXdDZWxsLCBpbnNlcnRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSByb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaW5zZXJ0Q29sSW5kZXgpO1xuICAgICAgICAgICAgaWYgKGZvY3VzQ2VsbCkge1xuICAgICAgICAgICAgICAgIGlmIChmb2N1c0NlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8v6I635Y+W5ZCI5bm26KGM55qE5pyA5ZCO55qE6KGM57Si5byVXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhNZXJnZUVuZENvbEluZGV4ID0gdGhpcy5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgY3VyckNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhNZXJnZUVuZENvbEluZGV4ID4gaW5zZXJ0Q29sSW5kZXggfHwgKGhNZXJnZUVuZENvbEluZGV4ID09PSBpbnNlcnRDb2xJbmRleCAmJiBjdXJyQ29sSW5kZXggPCBpbnNlcnRDb2xJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9jdXNDZWxsLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnICYmIGN1cnJDb2xJbmRleCA+IGluc2VydENvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cuYWRkQ2hpbGQobmV3Q2VsbCwgaW5zZXJ0Q29sSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGIuc2V0Q2VsbFdpZHRoKGluc2VydENvbEluZGV4ID09PSBjb2xzQ291bnQgPyBpbnNlcnRDb2xJbmRleCAtIDEgOiBpbnNlcnRDb2xJbmRleCwgaW5zZXJ0Q29sV2lkdGggLSBuZXdDb2xXaWR0aCk7XG4gICAgICAgIHRiLmluc2VydENvbChpbnNlcnRDb2xJbmRleCwgbmV3Q29sV2lkdGgpO1xuICAgICAgICB0Yi5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0Yi5yZWZyZXNoVmlldygpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnNlcnRSb3coc3M6IFNlbGVjdGlvblN0YXRlLCBpbnNlcnRSb3dJbmRleDogbnVtYmVyKTogVGFibGVSb3dFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gc3RhcnRDZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRiID0gc3RhcnRSb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY3VyclJvd0luZGV4ID0gc3RhcnRSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgaW5zZXJ0Um93SW5kZXggPSBpbnNlcnRSb3dJbmRleCA8IDAgPyAwIDogaW5zZXJ0Um93SW5kZXg7XG4gICAgICAgIGluc2VydFJvd0luZGV4ID0gaW5zZXJ0Um93SW5kZXggPiB0Yi5sZW5ndGggPyB0Yi5sZW5ndGggOiBpbnNlcnRSb3dJbmRleDtcbiAgICAgICAgY29uc3QgbmV3Um93ID0gVGFibGVSb3dFbGVtZW50LmNyZWF0ZVJvdyh0Yi5nZXRDb2xzQ291bnQoKSk7XG4gICAgICAgIC8v5paw6KGM5o+S5Zyo56ys5LiA6KGM5oiW6ICF5pyA5ZCO5LiA6KGMXG4gICAgICAgIGlmIChpbnNlcnRSb3dJbmRleCA9PT0gMCB8fCBpbnNlcnRSb3dJbmRleCA9PT0gdGIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0Yi5hZGRDaGlsZChuZXdSb3csIGluc2VydFJvd0luZGV4KTtcbiAgICAgICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlc3RSb3cgPSB0Yi5nZXRDaGlsZChpbnNlcnRSb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3RSb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RDZWxsID0gZGVzdFJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IG5ld1Jvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgLy/lpoLmnpzlvZPliY3ljZXlhYPmoLzmmK/mma7pgJrljZXlhYPmoLzmiJbogIXlkIjlubbliJfnmoTmnIDlkI7kuIDkuKrljZXlhYPmoLzvvIzliJnkuI3lgZrlpITnkIZcbiAgICAgICAgICAgIGlmIChkZXN0Q2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAvL+iOt+WPluWQiOW5tuWIl+eahOacgOWQjueahOihjOe0ouW8lVxuICAgICAgICAgICAgICAgIGNvbnN0IHZNZXJnZUVuZFJvd0luZGV4ID0gdGhpcy5nZXRWTWVyZ2VFbmRJbmRleCh0YiwgaW5zZXJ0Um93SW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2VFbmRSb3dJbmRleCA+IGluc2VydFJvd0luZGV4IHx8ICh2TWVyZ2VFbmRSb3dJbmRleCA9PT0gaW5zZXJ0Um93SW5kZXggJiYgY3VyclJvd0luZGV4IDwgaW5zZXJ0Um93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgLy9uZXdDZWxsLmNlbGxQcm9wcy5oTWVyZ2UgPSBkZXN0Q2VsbC5jZWxsUHJvcHMuaE1lcmdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzdENlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcgJiYgY3VyclJvd0luZGV4ID4gaW5zZXJ0Um93SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvL+WcqOS4iuaWueaWsOWinuihjO+8jOebruagh+ihjOWNleWFg+agvOWxnuS6juWQiOW5tueahOi1t+eCuVxuICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAvL25ld0NlbGwuY2VsbFByb3BzLmhNZXJnZSA9IGRlc3RDZWxsLmNlbGxQcm9wcy5oTWVyZ2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICB0Yi5hZGRDaGlsZChuZXdSb3csIGluc2VydFJvd0luZGV4KTtcbiAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjkuIvmlrnmj5LlhaXooYxcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5zZXJ0Um93QmVsb3coc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCBjdXJyUm93SW5kZXggPSBzdGFydFJvdy5nZXRJbmRleCgpO1xuICAgICAgICB0aGlzLmluc2VydFJvdyhzcywgY3VyclJvd0luZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5LiK5pa55o+S5YWl6KGMXG4gICAgICovXG4gICAgc3RhdGljIGluc2VydFJvd0Fib3ZlKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgY3VyclJvd0luZGV4ID0gc3RhcnRSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRSb3coc3MsIGN1cnJSb3dJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5Y+z5L6n5o+S5YWl5YiXXG4gICAgICovXG4gICAgc3RhdGljIGluc2VydENvbFRvUmlnaHQoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyQ29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRDb2woc3MsIGN1cnJDb2xJbmRleCArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOW3puS+p+aPkuWFpeWIl1xuICAgICAqL1xuICAgIHN0YXRpYyBpbnNlcnRDb2xUb0xlZnQoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyQ29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRDb2woc3MsIGN1cnJDb2xJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Lez6L2s5Yiw5LiL5LiA5Liq5Y2V5YWD5qC85LitXG4gICAgICogQHBhcmFtIHNzXG4gICAgICovXG4gICAgc3RhdGljIG1vdmVOZXh0Q2VsbChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gc3RhcnRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBuZXh0Q2VsbCA9IHRoaXMuZ2V0TmV4dENlbGwoc3MpO1xuICAgICAgICBpZiAobmV4dENlbGwpIHtcbiAgICAgICAgICAgIHNzLnJlc2V0UmFuZ2UobmV4dENlbGwsIDApO1xuICAgICAgICAgICAgbmV4dENlbGwucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+aWsOWinuihjCzlubblrprkvY1cbiAgICAgICAgY29uc3QgbmV3Um93ID0gdGhpcy5pbnNlcnRSb3coc3MsIHJvd0luZGV4ICsgMSk7XG4gICAgICAgIHNzLnJlc2V0UmFuZ2UobmV3Um93LCAwKTtcbiAgICAgICAgbmV3Um93LnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bkuIvkuIDkuKrlj6/lrprkvY3nmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXh0Q2VsbChzczogU2VsZWN0aW9uU3RhdGUpOiBUYWJsZUNlbGxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gc3RhcnRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBjb2xJbmRleCA9IHN0YXJ0Q2VsbC5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCB0YiA9IHN0YXJ0Q2VsbC5wYXJlbnQucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4OyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBqID0gaSA9PT0gcm93SW5kZXggPyBjb2xJbmRleCArIDEgOiAwO1xuICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGZvciAoOyBqIDwgdGIuZ2V0Q29sc0NvdW50KCk7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJDZWxsID0gY3VyclJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChjdXJyQ2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyQ2VsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy90aHJvdyBuZXcgRXJyb3IoJ2dldE5leHRDZWxsIGlzIG51bGwnKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeWFieagh+aYr+WQpuWcqOacgOWQjuS4gOS4quWNleWFg+agvOS4rVxuICAgICAqL1xuICAgIHN0YXRpYyBpc0xhc3RWaXNpYWJsZUNlbGwoc3M6IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5nZXROZXh0Q2VsbChzcyk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlvZPliY10YWJsZVxuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVUYWJsZShzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIXRiKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+W9k+WJjeS9jee9ruS4jeWtmOWcqOihqOagvCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRiLnBhcmVudC5yZWZyZXNoVmlldygpO1xuICAgICAgICB0Yi5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzljZXlhYPmoLzlr7nop5Lnur9cbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gZGlhZ29uYWxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBzZXRUYWJsZUNlbGxEaWFnb25hbChzczogU2VsZWN0aW9uU3RhdGUsIGRpYWdvbmFsOiAnbWFpbicgfCAnc3ViJyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXRjKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+W9k+WJjeS9jee9ruS4jeWtmOWcqOihqOagvCcpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0Yy5wcm9wcy5kaWFnb25hbCB8fCB0Yy5wcm9wcy5kaWFnb25hbCAhPT0gZGlhZ29uYWwpIHtcbiAgICAgICAgICAgIHRjLnByb3BzLmRpYWdvbmFsID0gZGlhZ29uYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodGMucHJvcHMuZGlhZ29uYWwgPT09IGRpYWdvbmFsKSB7XG4gICAgICAgICAgICB0Yy5wcm9wcy5kaWFnb25hbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGMucmVmcmVzaFZpZXcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlsIblvZPliY3ooajmoLzmiKrmlq3miJDkuKTkuKrnm7jpgrvnmoTooajmoLxcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKi9cbiAgICBzdGF0aWMgY3V0VGFibGUodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAocm93SW5kZXggPT09IDAgfHwgcm93SW5kZXggPT09IHRiLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdUYiA9IHRiLmNsb25lKGZhbHNlKSBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRiLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChsZW4gPiByb3dJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0Yi5nZXRDaGlsZChsZW4pO1xuICAgICAgICAgICAgbmV3VGIuYWRkQ2hpbGQoY2hpbGQuY2xvbmUodHJ1ZSksIDApO1xuICAgICAgICAgICAgdGIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdUYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0Yi5wYXJlbnQuYWRkQ2hpbGQobmV3VGIsIHRiLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluihqOagvOmAieWMuuWMuuWfn+acgOWkp+eahOefqeW9ouWMuuWfn1xuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSBzdGFydENlbGxcbiAgICAgKiBAcGFyYW0gZW5kQ2VsbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFRhYmxlUmVjdFNlbGVjdGVkUmVnaW9uKHRiOiBUYWJsZUVsZW1lbnQsIHN0YXJ0Q2VsbDogVGFibGVDZWxsRWxlbWVudCwgZW5kQ2VsbDogVGFibGVDZWxsRWxlbWVudCk6IElUYWJsZVNlbGVjdGVkUmVnaW9uIHtcbiAgICAgICAgbGV0IHN0YXJ0Um93ID0gc3RhcnRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICBsZXQgc3RhcnRDb2wgPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgbGV0IGVuZFJvdyA9IGVuZENlbGwucGFyZW50LmdldEluZGV4KCk7XG4gICAgICAgIGxldCBlbmRDb2wgPSBlbmRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIGlmIChzdGFydFJvdyA+IGVuZFJvdykge1xuICAgICAgICAgICAgW2VuZFJvdywgc3RhcnRSb3ddID0gW3N0YXJ0Um93LCBlbmRSb3ddO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydENvbCA+IGVuZENvbCkge1xuICAgICAgICAgICAgW2VuZENvbCwgc3RhcnRDb2xdID0gW3N0YXJ0Q29sLCBlbmRDb2xdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydFJvdzsgaSA8PSBlbmRSb3c7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sOyBqIDw9IGVuZENvbDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaE1lcmdlLCB2TWVyZ2UgfSA9IGNlbGwucHJvcHM7XG4gICAgICAgICAgICAgICAgaWYgKGhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydENvbEluZGV4ID0gVGFibGVVdGlsLmdldEhNZXJnZVN0YXJ0SW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRDb2xJbmRleCA9IFRhYmxlVXRpbC5nZXRITWVyZ2VFbmRJbmRleCh0YiwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29sID0gTWF0aC5taW4oc3RhcnRDb2wsIHN0YXJ0Q29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBlbmRDb2wgPSBNYXRoLm1heChlbmRDb2wsIGVuZENvbEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFJvd0luZGV4ID0gVGFibGVVdGlsLmdldFZNZXJnZVN0YXJ0SW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRSb3dJbmRleCA9IFRhYmxlVXRpbC5nZXRWTWVyZ2VFbmRJbmRleCh0YiwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Um93ID0gTWF0aC5taW4oc3RhcnRSb3csIHN0YXJ0Um93SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBlbmRSb3cgPSBNYXRoLm1heChlbmRSb3csIGVuZFJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gVGFibGVVdGlsLmdldFZNZXJnZUVuZEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvd0luZGV4ID4gZW5kUm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSb3cgPSByb3dJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBUYWJsZVV0aWwuZ2V0SE1lcmdlRW5kSW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sSW5kZXggPiBlbmRDb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbCA9IGNvbEluZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sLCBlbmRDb2wgfVxuICAgIH1cbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZVNlbGVjdGVkUmVnaW9uIHtcbiAgICBzdGFydFJvdzogbnVtYmVyO1xuICAgIGVuZFJvdzogbnVtYmVyO1xuICAgIHN0YXJ0Q29sOiBudW1iZXI7XG4gICAgZW5kQ29sOiBudW1iZXI7XG59IiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBQb3NpdGlvbixcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7Q29udGVudE1lbnVJdGVtLCBDb250ZXh0TWVudUVsZW1lbnRFdmVudCwgS2V5Ym9yYWRFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtUYWJsZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhFbGVtZW50LCBQYXJhZ3JhcGhSZW5kZXJPYmplY3R9IGZyb20gXCIuLi9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQge1RhYmxlQ2VsbFJlbmRlck9iamVjdH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQge1RhYmxlUm93RWxlbWVudCwgVGFibGVSb3dSZW5kZXJPYmplY3R9IGZyb20gXCIuL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQge1RhYmxlU3BsaXRDZWxsfSBmcm9tIFwiLi90YWJsZS1zcGxpdC1jZWxsXCI7XG5pbXBvcnQge1RhYmxlVXRpbH0gZnJvbSBcIi4vdGFibGUtdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgVGFibGVFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PFRhYmxlUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBUYWJsZVByb3BzO1xuICAgIHByaXZhdGUgX2FjdHVhbENvbHNQcm9wcyE6IEFycmF5PElDb2xzRGF0YT4gfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd0YicpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRhYmxlUHJvcHMoKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxLZXlib3JhZEVsZW1lbnRFdmVudD4oJ0VsZW1lbnRLZXlEb3duJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6KGo5qC8RWxlbWVudEtleURvd24nLCBldnQpO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlRXZlbnQgPSBldnQuc291cmNlRXZlbnQ7XG4gICAgICAgICAgICAvL+aMieS4i3RhYumUrlxuICAgICAgICAgICAgaWYgKHNvdXJjZUV2ZW50LmtleUNvZGUgPT09IDkgJiYgIXNvdXJjZUV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIFRhYmxlVXRpbC5tb3ZlTmV4dENlbGwoZXZ0LnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5a6e6ZmF5rWL6YeP55qE5a695bqm77yM5bCGYXV0b+OAgeeZvuWIhuavlOWIl+WuveW6pui/m+ihjOi9rOWMluS4uiBudW1iZXIg57G75Z6LXG4gICAgICovXG4gICAgZ2V0IGFjdHVhbENvbHNQcm9wcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3R1YWxDb2xzUHJvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHNEYXRhOiBBcnJheTxJQ29sc0RhdGE+ID0gW107XG4gICAgICAgICAgICBjb25zdCBjb2xzID0gY2FsY1RhYmxlQ29scyh0aGlzKTtcbiAgICAgICAgICAgIGNvbHMucmVkdWNlKChwcmUsIGN1cikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbHNEYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY3VyLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHByZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmUgKyBjdXI7XG4gICAgICAgICAgICB9LCAwKVxuICAgICAgICAgICAgdGhpcy5fYWN0dWFsQ29sc1Byb3BzID0gY29sc0RhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdHVhbENvbHNQcm9wcztcbiAgICB9XG5cbiAgICBnZXRDZWxsV2lkdGgoY2VsbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAoY2VsbEluZGV4ID49IHRoaXMuYWN0dWFsQ29sc1Byb3BzLmxlbmd0aCB8fCBjZWxsSW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsQ29sc1Byb3BzW2NlbGxJbmRleF0ud2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbE9mZnNldFgoY2VsbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3R1YWxDb2xzUHJvcHNbY2VsbEluZGV4XS5vZmZzZXQ7XG4gICAgfVxuXG4gICAgc2V0Q2VsbFdpZHRoKGNlbGxJbmRleDogbnVtYmVyLCB3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vdGhpcy5hY3R1YWxDb2xzUHJvcHNbaW5kZXhdLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGlmIChjZWxsSW5kZXggPj0gdGhpcy5hY3R1YWxDb2xzUHJvcHMubGVuZ3RoIHx8IGNlbGxJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMucHJvcHMuY29sc107XG4gICAgICAgIGNvbHNbY2VsbEluZGV4XSA9IHdpZHRoO1xuICAgICAgICB0aGlzLnByb3BzLmNvbHMgPSBjb2xzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5YiX55qE5a6a5LmJXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHBhcmFtIHdpZHRoXG4gICAgICovXG4gICAgaW5zZXJ0Q29sKGluZGV4OiBudW1iZXIsIHdpZHRoOiBudW1iZXIgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29scyA9IFsuLi50aGlzLnByb3BzLmNvbHNdO1xuICAgICAgICBjb2xzLnNwbGljZShpbmRleCwgMCwgd2lkdGgpO1xuICAgICAgICB0aGlzLnByb3BzLmNvbHMgPSBjb2xzO1xuICAgICAgICB0aGlzLl9hY3R1YWxDb2xzUHJvcHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOWIl+eahOWumuS5iVxuICAgICAqIEBwYXJhbSBpbmRleFxuICAgICAqL1xuICAgIHJlbW92ZUNvbChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbLi4udGhpcy5wcm9wcy5jb2xzXTtcbiAgICAgICAgY29scy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnByb3BzLmNvbHMgPSBjb2xzO1xuICAgIH1cblxuICAgIGdldENvbHNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3R1YWxDb2xzUHJvcHMubGVuZ3RoO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVGFibGVFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgYmVnaW5NZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5iZWdpbk1lYXN1cmUoKTtcbiAgICAgICAgdGhpcy5fYWN0dWFsQ29sc1Byb3BzID0gbnVsbDtcbiAgICB9XG5cblxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgLy90aGlzLnByb3BzLndpZHRoID0gdGhpcy5tZWFzdXJlUmVuZGVyPy5yZWN0LndpZHRoIGFzIG51bWJlcjtcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgICB0eXBlOiAndGInLFxuICAgICAgICAgICAgcHJvcHM6IHsuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpfVxuICAgICAgICB9XG4gICAgICAgIHByb3BzLnByb3BzLndpZHRoID0gdGhpcy5tZWFzdXJlUmVuZGVyPy5yZWN0LndpZHRoIGFzIG51bWJlcjtcbiAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVUYWJsZShyb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IFRhYmxlRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCB0YlByb3BzID0gbmV3IFRhYmxlUHJvcHMoKTtcbiAgICAgICAgdGFibGUucHJvcHMgPSB0YlByb3BzO1xuICAgICAgICB0YlByb3BzLmJvcmRlciA9ICdhbGwnO1xuICAgICAgICB0YlByb3BzLmNvbHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICAgICAgICAgIHRiUHJvcHMuY29scy5wdXNoKFwiMVwiKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgdGFibGUuYWRkQ2hpbGQoVGFibGVSb3dFbGVtZW50LmNyZWF0ZVJvdyhjb2xzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgVGFibGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdDxUYWJsZUVsZW1lbnQ+IHtcbiAgICBzZXRSZW5kZXJXaWR0aChtYXhXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnNldFJlbmRlcldpZHRoKG1heFdpZHRoKTtcbiAgICB9XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgLy/nu5jliLbooajmoLznur9cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5wcm9wcy5ib3JkZXIgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3dSZW5kZXIgPSB0aGlzLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3Qgcm93UG9zOiBQb3NpdGlvbiA9IHt4OiByb3dSZW5kZXIucmVjdC54ICsgcG9zaXRpb24ueCwgeTogcm93UmVuZGVyLnJlY3QueSArIHBvc2l0aW9uLnl9O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3dSZW5kZXIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcm93UmVuZGVyLmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUG9zOiBQb3NpdGlvbiA9IHt4OiBjZWxsUmVuZGVyLnJlY3QueCArIHJvd1Bvcy54LCB5OiBjZWxsUmVuZGVyLnJlY3QueSArIHJvd1Bvcy55fTtcbiAgICAgICAgICAgICAgICAvL+e7mOWItuWNleWFg+agvOS4iui+ueahhlxuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGNlbGxQb3MueCwgY2VsbFBvcy55LCBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIDEpO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZmlsbExpbmVzKFt7eDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnl9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBjZWxsUG9zLnlcbiAgICAgICAgICAgICAgICAgICAgfV0pO1xuICAgICAgICAgICAgICAgICAgICAvL3RoaXMuZHJhd0xpbmUoY3R4LCB7IHg6IGNlbGxQb3MueCwgeTogY2VsbFBvcy55IH0sIHsgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8v57uY5Yi25bem6L655qGGXG4gICAgICAgICAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy9jdHguY29udGVudENvbnRleHQuZmlsbFJlY3QoY2VsbFBvcy54LCBjZWxsUG9zLnksIDEsIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZmlsbExpbmVzKFt7eDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnl9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjZWxsUG9zLngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmRyYXdMaW5lKGN0eCwgeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSB9LCB7IHg6IGNlbGxQb3MueCwgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy/nu5jliLblj7PovrnmoYZcbiAgICAgICAgICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIGNlbGxQb3MueSwgMSwgY2VsbFJlbmRlci5yZWN0LmhlaWdodCk7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxMaW5lcyhbe1xuICAgICAgICAgICAgICAgICAgICB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHk6IGNlbGxQb3MueVxuICAgICAgICAgICAgICAgIH0sIHt4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHR9XSk7XG4gICAgICAgICAgICAgICAgLy90aGlzLmRyYXdMaW5lKGN0eCwgeyB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSB9LCB7IHg6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICAvL+e7mOWItuS4i+i+ueahhlxuICAgICAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGNlbGxQb3MueCwgY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodCwgY2VsbFJlbmRlci5yZWN0LndpZHRoLCAxKTtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZmlsbExpbmVzKFt7XG4gICAgICAgICAgICAgICAgICAgIHg6IGNlbGxQb3MueCxcbiAgICAgICAgICAgICAgICAgICAgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgIH0sIHt4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHR9XSk7XG4gICAgICAgICAgICAgICAgLy90aGlzLmRyYXdMaW5lKGN0eCwgeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfSwgeyB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgLy9jZWxsUmVuZGVyLmJlZ2luUmVuZGVyKGN0eCwgeyB4OiBwb3NpdGlvbi54ICsgY2VsbFJlbmRlci5vZmZzZXRYLCB5OiBwb3NpdGlvbi55ICsgY2VsbFJlbmRlci5vZmZzZXRZIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVGFibGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgVGFibGVGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8VGFibGVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3RiJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgVGFibGVQcm9wcztcbiAgICAgICAgY29uc3QgdGIgPSBuZXcgVGFibGVFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBwcm9wcy5jb2xzO1xuICAgICAgICBjb25zdCB0YlByb3BzID0gdGIucHJvcHM7XG4gICAgICAgIHRiUHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyIHx8ICdhbGwnO1xuICAgICAgICB0YlByb3BzLmNvbHMgPSBbXTtcbiAgICAgICAgdGJQcm9wcy5pZCA9IHRiLnByb3BzLmlkO1xuICAgICAgICB0YlByb3BzLmFsaWdubWVudCA9IHByb3BzLmFsaWdubWVudDtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2wgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGJQcm9wcy5jb2xzLnB1c2goKDxhbnk+Y29sKS53aWR0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRiUHJvcHMuY29scy5wdXNoKGNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGIucHJvcHMgPSB0YlByb3BzO1xuICAgICAgICByZXR1cm4gdGI7XG4gICAgfVxuXG59XG5cbi8qKlxuICog6KGMLeihqOagvOa4suafk+aooeW8j1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dExpbmVSZW5kZXJNb2RlKGVsZTogVGFibGVFbGVtZW50LCBvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRiID0gZWxlLm1lYXN1cmVSZW5kZXIgYXMgVGFibGVSZW5kZXJPYmplY3Q7XG4gICAgY29uc3Qgcm93czogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+ID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAvL+ihqOagvOWktOS4jeWBmuWkhOeQhlxuICAgICAgICBpZiAoKDxUYWJsZVJvd0VsZW1lbnQ+cm93LmVsZW1lbnQpLnByb3BzLmhlYWRlclJvdykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xuICAgICAgICAvL+iOt+WPluW9k+WJjeihjOeahOaWh+Wtl+ihjOaVsFxuICAgICAgICBjb25zdCBtYXhMaW5lc0NvdW50ID0gZ2V0Um93TWF4VGV4dExpbmVzKHJvdyk7XG4gICAgICAgIGlmIChtYXhMaW5lc0NvdW50ID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBtYXhMaW5lc0NvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSb3cgPSByb3cuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QoKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBuZXdSb3cucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChyb3cucmVjdCk7XG4gICAgICAgICAgICAgICAgdGIuaW5zZXJ0Q2hpbGQobmV3Um93LCByb3cuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgICAgIC8v5aSN5Yi26KGM5paH5a2X5Yiw5paw6KGM5LitXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCByb3cubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChrKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBjZWxsLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnMsIHJlbmRlckN0eCkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChjZWxsLnJlY3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Um93LmFkZENoaWxkKG5ld0NlbGwpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3BsaXRUZXh0bGluZVRvTmV3Um93KHJvdywgbWF4TGluZXNDb3VudCwgb3B0aW9ucywgcmVuZGVyQ3R4KTtcbiAgICB9XG4gICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHRiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiDojrflj5blvZPliY3ooYznmoTmloflrZfooYzmlbBcbiAqIEBwYXJhbSByb3dcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGdldFJvd01heFRleHRMaW5lcyhyb3c6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICBsZXQgY2VsbE1heExpbmVzID0gMDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjZWxsLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gY2VsbC5nZXRDaGlsZChrKSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjZWxsTWF4TGluZXMgKz0gcGFyYVJlbmRlci5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY291bnQgPSBjZWxsTWF4TGluZXMgPiBjb3VudCA/IGNlbGxNYXhMaW5lcyA6IGNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gY291bnQ7XG59XG5cbi8qKlxuICog5bCG5aSa6KGM5paH5pys56e75Yqo5Yiw5paw6KGM5LitXG4gKiBAcGFyYW0gcm93XG4gKiBAcGFyYW0gbWF4TGluZXNDb3VudFxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gc3BsaXRUZXh0bGluZVRvTmV3Um93KHJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QsIG1heExpbmVzQ291bnQ6IG51bWJlciwgb3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiB2b2lkIHtcbiAgICBpZiAobWF4TGluZXNDb3VudCA9PT0gMSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBwYXJhTGluZXMgPSBFbGVtZW50VXRpbC5nZXRDZWxsUGFyYUxpbmVzKGNlbGwpO1xuICAgICAgICBpZiAocGFyYUxpbmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBwYXJhTGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG91dHRlckxpbmVSZWN0ID0gcGFyYUxpbmVzW2pdO1xuICAgICAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IG91dHRlckxpbmVSZWN0LnBhcmVudCBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1BhcmFSZW5kZXIgPSBwYXJhUmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnMsIHJlbmRlckN0eCkgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgbmV3UGFyYVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHBhcmFSZW5kZXIucmVjdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld091dHRlckxpbmVSZWN0ID0gb3V0dGVyTGluZVJlY3QuY2xvbmUoKTtcbiAgICAgICAgICAgIG5ld091dHRlckxpbmVSZWN0LnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3Qob3V0dGVyTGluZVJlY3QucmVjdCk7XG4gICAgICAgICAgICBuZXdQYXJhUmVuZGVyLmFkZENoaWxkKG5ld091dHRlckxpbmVSZWN0KTtcblxuICAgICAgICAgICAgcGFyYVJlbmRlci5yZW1vdmVDaGlsZChvdXR0ZXJMaW5lUmVjdCk7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocGFyYVJlbmRlcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJhUmVuZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNlbGwucmVtb3ZlQ2hpbGQocGFyYVJlbmRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGxpdFJvdyA9IHJvdy5wYXJlbnQuZ2V0Q2hpbGQocm93LmdldEluZGV4KCkgKyBqKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0Q2VsbCA9IHNwbGl0Um93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIHNwbGl0Q2VsbC5hZGRDaGlsZChuZXdQYXJhUmVuZGVyKTtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShuZXdQYXJhUmVuZGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0YiA9IHJvdy5wYXJlbnQgYXMgVGFibGVSZW5kZXJPYmplY3Q7XG4gICAgY29uc3Qgcm93SW5kZXggPSByb3cuZ2V0SW5kZXgoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heExpbmVzQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCArIGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUoY2VsbCk7XG4gICAgICAgIH1cbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHJvdyk7XG4gICAgfVxufVxuXG5cbi8qKlxuICog6K6h566X6KGo5qC85YiXXG4gKi9cbmZ1bmN0aW9uIGNhbGNUYWJsZUNvbHMoZWxlbWVudDogVGFibGVFbGVtZW50KTogQXJyYXk8bnVtYmVyPiB7XG4gICAgY29uc3QgcGVyY2VudENvbHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXTtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBsZXQgcGVyY2VudFN1bSA9IDA7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZWxlbWVudC5wcm9wcy5jb2xzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29sID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGVyY2VudENvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgcGVyY2VudFN1bSArPSBOdW1iZXIucGFyc2VGbG9hdChjb2wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVyY2VudENvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgc3VtICs9IGNvbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtZWFzdXJlUmVuZGVyID0gZWxlbWVudC5tZWFzdXJlUmVuZGVyIGFzIFJlbmRlck9iamVjdDtcbiAgICBjb25zdCB0YldpZHRoID0gbWVhc3VyZVJlbmRlci5yZWN0Lm1heFdpZHRoIGFzIG51bWJlcjtcbiAgICBjb25zdCByZW1haW5XaWR0aCA9IHRiV2lkdGggLSBzdW07XG4gICAgY29uc3QgcmF0aW8gPSByZW1haW5XaWR0aCAvIHBlcmNlbnRTdW07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJjZW50Q29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHBlcmNlbnRDb2xzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIHdpZHRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGVyY2VudENvbHNbaV0gPSBNYXRoLmZsb29yKE51bWJlci5wYXJzZUZsb2F0KHdpZHRoKSAqIHJhdGlvKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGVyY2VudENvbHMgYXMgQXJyYXk8bnVtYmVyPjtcbn1cblxuaW50ZXJmYWNlIElDb2xzRGF0YSB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBvZmZzZXQ6IG51bWJlcjtcbn1cblxuXG5pbnRlcmZhY2UgdGJQcm9wcyB7XG4gICAgY29sczogQXJyYXk8eyB3aWR0aDogbnVtYmVyIH0+XG59XG5cblxuIiwiaW1wb3J0IHsgVGV4dFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgSVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBMZWFmRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIEVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucywgTW9kaWZ5RmxhZyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgd2F0Y2hDaGFuZ2VkIH0gZnJvbSBcIi4uLy4uL25vdGlmeVwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUsIFRleHRVbml0cyB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0ICogYXMgSGlzdG9yeSBmcm9tICcuLi8uLi9lbGVtZW50LXRyYWNlLXRyYWNraW5nJ1xuXG5cbmV4cG9ydCBjbGFzcyBUZXh0R3JvdXBFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8VGV4dFByb3BzPiB7XG4gICAgLy9wcm9wczogVGV4dFByb3BzO1xuICAgIHRleHRNZWFzdXJlczogQXJyYXk8VGV4dFVuaXRzPiA9IFtdO1xuICAgIGlzTWVhc3VyZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd0ZXh0Jyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHdhdGNoQ2hhbmdlZCh0aGlzLnByb3BzLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jbGVhckNhY2hlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldCB0ZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3BsaWNlKDAsIHRoaXMudGV4dE1lYXN1cmVzLmxlbmd0aCwgdmFsKTtcbiAgICB9XG5cbiAgICBzcGxpY2UoaW5kZXg6IG51bWJlciwgZGVsZXRlQ291bnQ6IG51bWJlciwgYWRkVGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiBBcnJheTxUZXh0VW5pdHM+IHtcbiAgICAgICAgY29uc3QgZGVsZXRJdGVtczogQXJyYXk8VGV4dFVuaXRzPiA9IFtdO1xuICAgICAgICBpZiAoZGVsZXRlQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNoYXJzID0gdGhpcy50ZXh0TWVhc3VyZXMuc3BsaWNlKGluZGV4LCBkZWxldGVDb3VudCk7XG4gICAgICAgICAgICBIaXN0b3J5LnJlbW92ZVRleHQodGhpcywgaW5kZXgsIGRlbGV0ZUNvdW50LCByZW1vdmVDaGFycy5tYXAoaXRlbSA9PiBpdGVtLmNoYXIpLmpvaW4oJycpKTtcbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMDtcbiAgICAgICAgICAgIGRlbGV0SXRlbXMucHVzaCguLi5yZW1vdmVDaGFycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc01lYXN1cmUgPSBmYWxzZTtcbiAgICAgICAgYWRkVGV4dCA9IGFkZFRleHQgPz8gJyc7XG4gICAgICAgIEhpc3RvcnkuaW5wdXRUZXh0KHRoaXMsIGluZGV4LCBhZGRUZXh0KTtcbiAgICAgICAgY29uc3QgYWRkVGV4dFVuaXRzID0gYWRkVGV4dC5zcGxpdCgnJykubWFwKGNoYXIgPT4gKHsgc291cmNlU2l6ZTogMCwgYWN0dWFsU2l6ZTogMCwgY2hhciB9KSk7XG4gICAgICAgIGlmICh0aGlzLnRleHRNZWFzdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudGV4dE1lYXN1cmVzID0gYWRkVGV4dFVuaXRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50ZXh0TWVhc3VyZXMuc3BsaWNlKGluZGV4LCBkZWxldGVDb3VudCwgLi4uYWRkVGV4dFVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHJldHVybiBkZWxldEl0ZW1zO1xuICAgIH1cblxuICAgIGdldCB0ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0TWVhc3VyZXMubWFwKGl0ZW0gPT4gaXRlbS5jaGFyKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBpZiAoIXRoaXMuaXNNZWFzdXJlIHx8IHRoaXMubW9kaWZ5RmxhZyAhPT0gTW9kaWZ5RmxhZy5Ob25lKSB7XG4gICAgICAgICAgICByZW5kZXJDdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHRVbml0cyh0aGlzLnRleHRNZWFzdXJlcywgdGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IFRleHRHcm91cFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLmRpc2FibGVDbGljayA9IHRoaXMuZGlzYWJsZUNsaWNrO1xuICAgICAgICByZW5kZXIudGV4dE1lYXN1cmVzID0gWy4uLnRoaXMudGV4dE1lYXN1cmVzXTtcbiAgICAgICAgcmVuZGVyLm1lYXN1cmUoKTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICAvL+S/rumlsOWFg+e0oOS4jeW6j+WIl+WMllxuICAgICAgICBpZiAodGhpcy5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogVGV4dEdyb3VwRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGNsb25lLnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgc3BsaWNlVGV4dChzdGFydE9mZnNldDogbnVtYmVyLCBlbmRPZmZzZXQ6IG51bWJlciwgeENvcHk6IGJvb2xlYW4pOiBUZXh0R3JvdXBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGVuZE9mZnNldCA9IGVuZE9mZnNldCA9PT0gLTEgPyB0aGlzLnRleHRNZWFzdXJlcy5sZW5ndGggOiBlbmRPZmZzZXQ7XG4gICAgICAgIGlmIChlbmRPZmZzZXQgPT09IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoeENvcHkpIHtcbiAgICAgICAgICAgIC8vY2xvbmUudGV4dE1lYXN1cmVzID0gdGhpcy50ZXh0TWVhc3VyZXMuc3BsaWNlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICBjbG9uZS50ZXh0TWVhc3VyZXMgPSB0aGlzLnNwbGljZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xvbmUudGV4dE1lYXN1cmVzID0gdGhpcy50ZXh0TWVhc3VyZXMuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4gaW5kZXggPj0gc3RhcnRPZmZzZXQgJiYgaW5kZXggPCBlbmRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNsb25lLnRleHRNZWFzdXJlcyA9IGNsb25lLnRleHRNZWFzdXJlcy5tYXAoaXRlbSA9PiAoeyBzb3VyY2VTaXplOiAwLCBhY3R1YWxTaXplOiAwLCBjaGFyOiBpdGVtLmNoYXIgfSkpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5pS55qC35byPXG4gICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAqL1xuICAgIHNldEZvcm1hdChmb3JtYXQ6IFBhcnRpYWw8VGV4dFByb3BzPik6IHZvaWQge1xuICAgICAgICBIaXN0b3J5LmZvcm1hdEVsZSh0aGlzLCBmb3JtYXQpO1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtYXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvcHNba2V5XSA9IGZvcm1hdFtrZXldO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNsZWFyVGV4dENhY2hlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTWVhc3VyZSA9IGZhbHNlO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgVGV4dEdyb3VwUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxUZXh0R3JvdXBFbGVtZW50PiB7XG4gICAgdGV4dE1lYXN1cmVzITogQXJyYXk8VGV4dFVuaXRzPjtcblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgcG9zaXRpb24gfSA9IGU7XG4gICAgICAgIC8vbnVsbC10ZXh05LiN5omT5Y2wXG4gICAgICAgIGlmIChyZW5kZXIuZHJhd01vZGUgPT09ICdwcmludCcgJiYgdGhpcy5lbGVtZW50LmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbGVtZW50LnByb3BzLmJvcmRlcikge1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd1RleHRVbml0cyh0aGlzLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbiAgICAgICAgLy8gaWYgKHRoaXMuZWxlbWVudC5pc01vdXNlZW50ZXIpIHtcbiAgICAgICAgLy8gICAgIGN0eC5vdmVybGF5c0NvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsIENvbW1vblV0aWwucmFuZG9tQ29sb3IoKSk7XG4gICAgICAgIC8vIH1cblxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLmRpc2FibGVDbGljayA9IHRoaXMuZGlzYWJsZUNsaWNrO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnRleHRNZWFzdXJlcyA9IFsuLi50aGlzLnRleHRNZWFzdXJlc107XG4gICAgICAgIC8vRklYOuaVsOaNruWFg+S4reWMheWQq051bGxUZXh05pe277yM5Zyo5aSN5Yi2UmVuZGVy5ZCO77yM55Sx5LqOTnVsbFRleHTlr7nlupTnmoRFbGVtZW505LiN5Zyo5YWD57Sg5qCR5Lit77yM5Zug5q2kTnVsbFRleHRSZW5kZXJcbiAgICAgICAgLy/lnKjmuLLmn5Pml7bkvJrkuI3mlq3nmoRQdXNo5YiwUGFpbnRSZW5kZXJz5Lit77yM5a+86Ie05YaF5a2Y5rOE6ZyyXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50LmlzRGVjb3JhdGUgJiYgdGhpcy5lbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnBhaW50UmVuZGVycy5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbiAgICBtZWFzdXJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlY3Qud2lkdGggPSB0aGlzLnRleHRNZWFzdXJlcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLmFjdHVhbFNpemUsIDApO1xuICAgICAgICB0aGlzLnJlY3QuaGVpZ2h0ID0gdGhpcy5lbGVtZW50LnByb3BzLmZvbnRTaXplO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRleHRHcm91cEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAndGV4dCc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIFRleHRQcm9wcztcbiAgICAgICAgY29uc3QgdGV4dCA9IGRhdGEuY29udGVudCBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHRleHRHcm91cCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIHRleHRHcm91cC50ZXh0ID0gdGV4dDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyh0ZXh0R3JvdXAucHJvcHMsIHByb3BzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGV4dEdyb3VwO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TdGF0ZSB9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgRWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZURhdGFFbGUgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgVHJhY2tSdW5FbGVtZW50LCBUcmFja1J1blR5cGVFbnVtIH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50U2VyaWFsaXplIHtcbiAgICBzdGF0aWMgc2VyaWFsaXplKGVsZW1lbnQ6IEVsZW1lbnQsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZWxlbWVudC5zZXJpYWxpemUodmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LmNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgbGV0IHByZXZFbGU6IHsgZWxlOiBFbGVtZW50LCBwcm9wczogYW55IH0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gZWxlbWVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVDaGlsZCA9IHRoaXMuc2VyaWFsaXplKGNoaWxkLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICd0ZXh0JyAmJiBwcmV2RWxlICYmIHByZXZFbGUuZWxlLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDxUZXh0R3JvdXBFbGVtZW50PmNoaWxkKS5wcm9wcy5lcXVhbHMoKDxUZXh0R3JvdXBFbGVtZW50PnByZXZFbGUuZWxlKS5wcm9wcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZFbGUucHJvcHMuY29udGVudCArPSAoPGFueT5zZXJpYWxpemVDaGlsZCkuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZXJpYWxpemVDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VyaWFsaXplQ2hpbGQuY29tcGxldGU7XG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNoaWxkLnByb3BzID0gc2VyaWFsaXplQ2hpbGQucHJvcHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5wcm9wcyAmJiBjaGlsZC5wcm9wc1snX19hdHRhY2hlZFByb3BlcnR5J10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNoaWxkLnByb3BzWydfX2F0dGFjaGVkUHJvcGVydHknXSA9IENvbW1vblV0aWwuY2xvbmVWYWx1ZShjaGlsZC5wcm9wc1snX19hdHRhY2hlZFByb3BlcnR5J10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZXJpYWxpemVDaGlsZC5wcm9wcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VyaWFsaXplQ2hpbGQucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VyaWFsaXplQ2hpbGQuY2hpbGRyZW4gJiYgc2VyaWFsaXplQ2hpbGQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VyaWFsaXplQ2hpbGQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuLnB1c2goc2VyaWFsaXplQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2RWxlID0geyBlbGU6IGNoaWxkLCBwcm9wczogc2VyaWFsaXplQ2hpbGQgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuc2VyaWFsaXplKHZpZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cblxuICAgIHN0YXRpYyBzZXJpYWxpemVTdHJpbmcoZWxlbWVudDogRWxlbWVudCwgb3B0aW9uczogeyBhbGw6IGJvb2xlYW4gfSA9IHsgYWxsOiBmYWxzZSB9KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmFsbCAmJiBlbGVtZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50ICYmIGVsZW1lbnQudHlwZSA9PT0gVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmICFlbGVtZW50LmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGVsZW1lbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh0aGlzLnNlcmlhbGl6ZVN0cmluZyhpdGVtLCBvcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMuam9pbignJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bpgInkuK3nmoTnu5PmnoRcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0U2VsZWN0ZWRTdHJ1Y3Qoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChzcy5jb2xsYXBzZWQgfHwgIXNzLnN0YXJ0Q29udHJvbCB8fCAhc3Muc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzcy5zZWxlY3RlZFJhbmdlO1xuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuY2xvbmVSYW5nZShyYW5nZSwgZmFsc2UsICdjb3B5Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YCJ5Lit55qE5paH5pysXG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zXG4gICAgICovXG4gICAgc3RhdGljIGdldFNlbGVjdGVkVGV4dChzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkU3RydWN0ID0gdGhpcy5nZXRTZWxlY3RlZFN0cnVjdChzcywgdmlld09wdGlvbnMpIGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgICAgIGlmIChzZWxlY3RlZFN0cnVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplU3RyaW5nKHNlbGVjdGVkU3RydWN0LCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0U2VsZWN0ZWRKU09OKHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdHJ1Y3QgPSB0aGlzLmdldFNlbGVjdGVkU3RydWN0KHNzLCB2aWV3T3B0aW9ucykgYXMgQnJhbmNoRWxlbWVudDtcbiAgICAgICAgaWYgKHNlbGVjdGVkU3RydWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJpYWxpemUoc2VsZWN0ZWRTdHJ1Y3QsIHZpZXdPcHRpb25zKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgY3ljobmjIflrprlhYPntKDlhoXpg6jmiYDmnInmlbDmja7lhYPliJfooahcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RGF0YUVsZW1lbnRzKGVsZW1lbnQ6IEJyYW5jaEVsZW1lbnQpOiBBcnJheTxFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGFycmF5OiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlRGF0YUVsZShpdGVtKSkge1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKC4uLnRoaXMuZ2V0RGF0YUVsZW1lbnRzKGl0ZW0pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cblxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUVsZW1lbnRWYWx1ZVN0cnVjdCB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZ1xufVxuIiwiaW1wb3J0IHtcbiAgICBJbmxpbmVHcm91cEVsZW1lbnQsXG4gICAgUG9zaXRpb24sXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnMsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSwgcmVhZEVsZW1lbnRQcm9wc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJbmxpbmVHcm91cFJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7VHJhY2tSdW5Qcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge0dldFRyYWNrVGlwc0V2ZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7bmFub2lkfSBmcm9tIFwibmFub2lkXCI7XG5cbmV4cG9ydCBlbnVtIFRyYWNrUnVuVHlwZUVudW0ge1xuICAgIEluc2VydGVkID0gJ2lucy1ydW4nLFxuICAgIERlbGV0ZWQgPSAnZGVsLXJ1bicsXG59XG5cbnR5cGUgTnVsbGFibGVUeXBlPFQ+ID0gVCB8IG51bGw7XG5cbmV4cG9ydCBjbGFzcyBUcmFja1J1bkVsZW1lbnQgZXh0ZW5kcyBJbmxpbmVHcm91cEVsZW1lbnQ8VHJhY2tSdW5Qcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSkge1xuICAgICAgICBzdXBlcih0cmFja1R5cGUpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRyYWNrUnVuUHJvcHModHJhY2tUeXBlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudDxHZXRUcmFja1RpcHNFdmVudD4oJ0dldFRyYWNrVGlwcycsIChldnQpID0+IHtcbiAgICAgICAgICAgIGV2dC50cmFja1RpcHMgPSB7XG4gICAgICAgICAgICAgICAgdHJhY2tSdW5UeXBlOiB0aGlzLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLnByb3BzLnVzZXJOYW1lLFxuICAgICAgICAgICAgICAgIGRhdGU6IHRoaXMucHJvcHMuZGF0ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyh0aGlzLCB7YWxsOiB0cnVlfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhldnQudHJhY2tUaXBzLmNvbnRlbnQpO1xuXG4gICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRyYWNrUnVuRWxlbWVudCh0aGlzLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IE51bGxhYmxlVHlwZTxSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNob3dUcmFja0NoYW5nZXMgJiYgdGhpcy50eXBlID09PSBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVHJhY2tSdW5SZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcygpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3BsaXQoaW5kZXg6IG51bWJlcik6IFRyYWNrUnVuRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoaW5kZXggPT09IDAgfHwgaW5kZXggPT09IHRoaXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUcmFja1J1bkVsZW1lbnQodGhpcy50eXBlIGFzIFRyYWNrUnVuVHlwZUVudW0pO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLnJlbW92ZSgpO1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQoaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJhY2tSdW5SZW5kZXJPYmplY3QgZXh0ZW5kcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDxUcmFja1J1bkVsZW1lbnQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGU6IFRyYWNrUnVuRWxlbWVudCkge1xuICAgICAgICBzdXBlcihlbGUpO1xuICAgIH1cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbiwgZG9jQ3R4OiB7dmlld09wdGlvbnN9fSA9IGU7XG4gICAgICAgIHJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWxsQ29sb3IgPSB2aWV3T3B0aW9ucy5zaG93VHJhY2tDaGFuZ2VzID8gdGhpcy5lbGVtZW50LnR5cGUgPT09ICdpbnMtcnVuJyA/IHZpZXdPcHRpb25zLnRyYWNrSW5zQ29sb3IgOiB2aWV3T3B0aW9ucy50cmFja0RlbENvbG9yIDogJyc7XG4gICAgICAgICAgICBpZiAoZmlsbENvbG9yKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmN0eC5maWxsU3R5bGUgPSBmaWxsQ29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHt4LCB5fSA9IHBvc2l0aW9uO1xuICAgICAgICAvL+S4jeaYvuekuueXlei/uVxuICAgICAgICBpZiAoIXZpZXdPcHRpb25zLnNob3dUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuZWxlbWVudC50eXBlID09PSAnaW5zLXJ1bicgPyAnZ3JlZW4nIDogJ3JlZCc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSB0aGlzLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY29uc3Qge3JlY3R9ID0gY2hpbGRSZW5kZXI7XG4gICAgICAgICAgICBpZiAoY2hpbGRSZW5kZXIuZWxlbWVudCAmJiBjaGlsZFJlbmRlci5lbGVtZW50LnR5cGUgPT09ICdkZWwtcnVuJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxpbmVZID0geSArIHJlY3QueSArIHJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgbGluZVkgPSB0aGlzLmVsZW1lbnQudHlwZSA9PT0gJ2lucy1ydW4nID8gbGluZVkgOiBsaW5lWSAtIHJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3SG9yaUxpbmUoeCArIHJlY3QueCwgbGluZVksIHJlY3Qud2lkdGgsIGNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFRyYWNrUnVuUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW5FbGVtZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFRyYWNrUnVuUHJvcHM+IHtcblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxUcmFja1J1blByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFRyYWNrUnVuRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBUcmFja1J1bkVsZW1lbnQoZGF0YS50eXBlIGFzIFRyYWNrUnVuVHlwZUVudW0pO1xuICAgICAgICBlbGUucHJvcHMudXNlcklkID0gZGF0YS5wcm9wcz8udXNlcklkID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMudXNlck5hbWUgPSBkYXRhLnByb3BzPy51c2VyTmFtZSA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmRhdGUgPSBkYXRhLnByb3BzPy5kYXRlID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMuaWQgPSBkYXRhLnByb3BzPy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkIHx8IHR5cGUgPT09IFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZDtcbiAgICB9XG5cblxufVxuXG4iLCJpbXBvcnQge25hbm9pZH0gZnJvbSBcIm5hbm9pZFwiO1xuaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIERvY01vZGUsXG4gICAgRWxlbWVudCxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBQb3NpdGlvbixcbiAgICBSZWN0LFxuICAgIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtIaXRSZWdpb259IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVCYXNlUHJvcHMsIFRleHRQcm9wc30gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtDb21tc0NvbnRhaW5lckVsZW1lbnR9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRJbmxpbmVHcm91cH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEJvZHlFbGVtZW50fSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRGb290ZXJFbGVtZW50fSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudEhlYWRlckVsZW1lbnR9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnQsIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0LCBQYXJhZ3JhcGhSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHtQU3ltYm9sRWxlbWVudH0gZnJvbSBcIi4vaW1wbC9zeW1ib2wvcC1zeW1ib2wtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUNlbGxSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQge1RhYmxlRWxlbWVudCwgVGFibGVSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZVJvd0VsZW1lbnQsIFRhYmxlUm93UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnQsIFRleHRHcm91cFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHtUcmFja1J1bkVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW19IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCxcbiAgICBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsXG4gICAgQm9yZGVyVHlwZSxcbiAgICBCcmFuY2hSZW5kZXJPYmplY3QsXG4gICAgQ3Vyc29yVHlwZSxcbiAgICBJbmxpbmVHcm91cFJlbmRlck9iamVjdCxcbiAgICBMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFJlbmRlck9iamVjdFxufSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5cblxudHlwZSBQQUlSID0geyB4OiBudW1iZXIsIHk6IG51bWJlciB9O1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudFV0aWwge1xuXG4gICAgc3RhdGljIHNldENhbnZhc1Byb3BzKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWV3T3B0aW9uczogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIC8vIGlmIChjYW52YXMgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0T2Zmc2NyZWVuQ2FudmFzKGNhbnZhcywgY3R4IGFzIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlld09wdGlvbnMsIHNjYWxlKTtcbiAgICAgICAgLy8gICAgIHJldHVyblxuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHZpZXdPcHRpb25zO1xuICAgICAgICBsZXQgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICAgICAgZHByID0gTWF0aC5jZWlsKGRwcik7XG4gICAgICAgIGNvbnN0IHNjYWxlV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoICogZHByKSAvIGRwcjtcbiAgICAgICAgY29uc3Qgc2NhbGVIZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAqIGRwcikgLyBkcHI7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHNjYWxlV2lkdGggKyAncHgnO1xuICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gc2NhbGVIZWlnaHQgKyAncHgnO1xuICAgICAgICBjYW52YXMud2lkdGggPSBzY2FsZVdpZHRoICogZHByO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2NhbGVIZWlnaHQgKiBkcHI7XG4gICAgICAgIGN0eC5zY2FsZShkcHIsIGRwcik7XG4gICAgfVxuXG4gICAgLy8gc3RhdGljIHNldE9mZnNjcmVlbkNhbnZhcyhjYW52YXM6IE9mZnNjcmVlbkNhbnZhcywgY3R4OiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0sIHNjYWxlOiBudW1iZXIgPSAxKTogdm9pZCB7XG5cbiAgICAvLyAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB2aWV3T3B0aW9ucztcbiAgICAvLyAgICAgbGV0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgLy8gICAgIGlmIChzY2FsZSA+IDEpIHtcbiAgICAvLyAgICAgICAgIGRwciAqPSBzY2FsZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBkcHIgPSBNYXRoLmNlaWwoZHByKTtcbiAgICAvLyAgICAgY29uc3Qgc2NhbGVXaWR0aCA9IE1hdGguZmxvb3Iod2lkdGggKiBkcHIpIC8gZHByO1xuICAgIC8vICAgICBjb25zdCBzY2FsZUhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogZHByKSAvIGRwcjtcbiAgICAvLyAgICAgY2FudmFzLndpZHRoID0gc2NhbGVXaWR0aCAqIGRwcjtcbiAgICAvLyAgICAgY2FudmFzLmhlaWdodCA9IHNjYWxlSGVpZ2h0ICogZHByO1xuICAgIC8vICAgICBjdHguc2NhbGUoZHByLCBkcHIpO1xuICAgIC8vIH1cblxuICAgIHN0YXRpYyBnZXREcHJOdW1iZXIodmFsOiBudW1iZXIsIHNjYWxlOiBudW1iZXIgPSAxKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgICAgIGlmIChzY2FsZSA+IDEpIHtcbiAgICAgICAgICAgIGRwciAqPSBzY2FsZTtcbiAgICAgICAgfVxuICAgICAgICBkcHIgPSBNYXRoLmNlaWwoZHByKTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodmFsICogZHByKSAvIGRwclxuICAgIH1cblxuICAgIHN0YXRpYyByZWFkVGV4dFByb3BzKGRlc3Q6IFRleHRQcm9wcyB8IG51bGwsIHByb3BzOiBUZXh0UHJvcHMgfCB1bmRlZmluZWQsIG9wdGlvbnM6IFZpZXdPcHRpb25zKTogVGV4dFByb3BzIHtcbiAgICAgICAgaWYgKCFwcm9wcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGV4dFByb3BzKGRlc3QsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IGRlc3QgPz8gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICAvL+S4jemcgOiuvue9rum7mOiupOminOiJsu+8jOagueaNruWxgue6p+e7p+aJv+i/m+ihjOWhq+WFhVxuICAgICAgICB0ZXh0UHJvcHMuY29sb3IgPSBwcm9wcy5jb2xvcjsvLyB8fCBvcHRpb25zLmRlZmF1bHRDb2xvcjtcbiAgICAgICAgdGV4dFByb3BzLmZvbnROYW1lID0gcHJvcHMuZm9udE5hbWUgfHwgb3B0aW9ucy5kZWZhdWx0Rm9udE5hbWU7XG4gICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IHByb3BzLmZvbnRTaXplIHx8IG9wdGlvbnMuZGVmYXVsdEZvbnRTaXplO1xuICAgICAgICB0ZXh0UHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyO1xuICAgICAgICBpZiAocHJvcHMuZm9udFdlaWdodCkge1xuICAgICAgICAgICAgdGV4dFByb3BzLmZvbnRXZWlnaHQgPSBwcm9wcy5mb250V2VpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5mb250U3R5bGUpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5mb250U3R5bGUgPSBwcm9wcy5mb250U3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgdGV4dFByb3BzLnVuZGVybGluZSA9IHByb3BzLnVuZGVybGluZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMubGluZXRocm91Z2gpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5saW5ldGhyb3VnaCA9IHByb3BzLmxpbmV0aHJvdWdoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5vdmVybGluZSkge1xuICAgICAgICAgICAgdGV4dFByb3BzLm92ZXJsaW5lID0gcHJvcHMub3ZlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmJhY2tncm91bmQpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5iYWNrZ3JvdW5kID0gcHJvcHMuYmFja2dyb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMubGV0dGVyU3BhY2UpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5sZXR0ZXJTcGFjZSA9IHByb3BzLmxldHRlclNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy52ZXJ0QWxpZ24pIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy52ZXJ0QWxpZ24gPSBwcm9wcy52ZXJ0QWxpZ247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHRQcm9wcztcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVhZEVsZUJhc2VQcm9wcyhkZXN0OiBEYXRhRWxlQmFzZVByb3BzLCBwcm9wczogRGF0YUVsZUJhc2VQcm9wcyk6IERhdGFFbGVCYXNlUHJvcHMge1xuICAgICAgICBkZXN0LmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICBkZXN0Lm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICBkZXN0LmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICBkZXN0LmVkaXRhYmxlID0gcHJvcHMuZWRpdGFibGUgPz8gdHJ1ZTtcbiAgICAgICAgZGVzdC5maWVsZE5hbWUgPSBwcm9wcy5maWVsZE5hbWU7XG4gICAgICAgIGRlc3QubWluTGVuZ3RoID0gcHJvcHMubWluTGVuZ3RoO1xuICAgICAgICBkZXN0LnByaW50YWJsZSA9IHByb3BzLnByaW50YWJsZSA/PyB0cnVlO1xuICAgICAgICBkZXN0LnJlcXVpcmVkID0gcHJvcHMucmVxdWlyZWQ7XG4gICAgICAgIGRlc3Quc2VjcmV0QnJvd3NlID0gcHJvcHMuc2VjcmV0QnJvd3NlO1xuICAgICAgICBkZXN0LmRlbGV0ZWFibGUgPSBwcm9wcy5kZWxldGVhYmxlO1xuICAgICAgICBkZXN0LnVuZGVybGluZSA9IHByb3BzLnVuZGVybGluZTtcbiAgICAgICAgZGVzdC50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5YaF5a655Yy65Z+f5pyA5aSn6auY5bqmXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSByZW5kZXJIZWlnaHRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBpbm5lclJlY3RNYXhIZWlnaHQocmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlbmRlckhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qge3BhZGRpbmd9ID0gcmVuZGVyO1xuICAgICAgICByZXR1cm4gcmVuZGVySGVpZ2h0IC0gcGFkZGluZy50b3AgLSBwYWRkaW5nLmJvdHRvbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lhoXmoYblhoXlrrnpq5jluqbvvIzmm7TmlrDlpJbmoYbmoYbkvZPpq5jluqZcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHBhcmFtIGlubmVyUmVjdFxuICAgICAqL1xuICAgIHN0YXRpYyB1cGRhdGVSZW5kZXJIZWlnaHRCeUlubmVyUmVjdChyZW5kZXI6IFJlbmRlck9iamVjdCwgaW5uZXJSZWN0OiBSZWN0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtwYWRkaW5nLCBtYXJnaW59ID0gcmVuZGVyO1xuICAgICAgICAvL+WkluWxguWuueWZqOmrmOW6puetieS6juWGheWuuemrmOW6pivlpJbovrnot50r5YaF6L656LedXG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IGlubmVyUmVjdC5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIHBhZGRpbmcudG9wICsgcGFkZGluZy5ib3R0b207XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5Z2X57qn5YWD57Sg6ZmQ5Yi25bC65a+4XG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSBwYXJlbnRMaW1pdFJlY3RcbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0QmxvY2tFbGVtZW50TGltaXRTaXplKHJlbmRlcjogQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QgfCBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsIHBhcmVudExpbWl0UmVjdDogUmVjdCk6IHZvaWQge1xuICAgICAgICByZW5kZXIucmVjdC54ID0gcGFyZW50TGltaXRSZWN0Lng7XG4gICAgICAgIHJlbmRlci5yZWN0LnkgPSBwYXJlbnRMaW1pdFJlY3QueSArIHBhcmVudExpbWl0UmVjdC5oZWlnaHQ7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gcGFyZW50TGltaXRSZWN0Lm1heFdpZHRoID8/IDA7XG4gICAgICAgIHJlbmRlci5yZWN0Lm1heFdpZHRoID0gcGFyZW50TGltaXRSZWN0Lm1heFdpZHRoO1xuICAgICAgICBpZiAocGFyZW50TGltaXRSZWN0Lm1heEhlaWdodCkge1xuICAgICAgICAgICAgcmVuZGVyLnJlY3QubWF4SGVpZ2h0ID0gcGFyZW50TGltaXRSZWN0Lm1heEhlaWdodCAtIHBhcmVudExpbWl0UmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlhYvpmobmoYbkvZNcbiAgICAgKiBAcGFyYW0gcmVjdFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGNsb25lUmVjdChyZWN0OiBSZWN0KTogUmVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVjdCA9IG5ldyBSZWN0KCk7XG4gICAgICAgIGNsb25lUmVjdC54ID0gcmVjdC54O1xuICAgICAgICBjbG9uZVJlY3QueSA9IHJlY3QueTtcbiAgICAgICAgY2xvbmVSZWN0LndpZHRoID0gcmVjdC53aWR0aDtcbiAgICAgICAgY2xvbmVSZWN0LmhlaWdodCA9IHJlY3QuaGVpZ2h0O1xuICAgICAgICBjbG9uZVJlY3QubWF4SGVpZ2h0ID0gcmVjdC5tYXhIZWlnaHQ7XG4gICAgICAgIGNsb25lUmVjdC5tYXhXaWR0aCA9IHJlY3QubWF4V2lkdGg7XG4gICAgICAgIHJldHVybiBjbG9uZVJlY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YeN5paw6ZmQ5a6a5a2Q5YWD57Sg5Lul5Y+K5b2T5YmN6auY5bqm5YC8LOW5tui/lOWbnuWGhei+ueahhuWGheWuuemrmOW6plxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gcmVzZXRYIOa1i+mHj+auteiQveWkluahhuaXtu+8jOWGheahhuS4jemcgOimgemHjee9rnjvvIzlm6DkuLrlhoXmoYblt7Lnu4/lrZjlnKjlr7npvZBcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyByZW1lYXN1cmUocmVuZGVyOiBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB8IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCwgcmVzZXRYID0gdHJ1ZSk6IG51bWJlciB7XG4gICAgICAgIGlmIChyZW5kZXIucmVjdC53aWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtZWFzdXJlVGFibGVSb3cocmVuZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVBbGlnbihyZW5kZXIpO1xuICAgICAgICAgICAgdGhpcy5yZW1lYXN1cmVUYWJsZU1lcmdlKHJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5uZXJSZWN0ID0gcmVuZGVyLmdldElubmVyUmVjdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChyZXNldFgpIHtcbiAgICAgICAgICAgICAgICBsaW5lLnJlY3QueCA9IGlubmVyUmVjdC54O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZS5yZWN0LnkgPSBpbm5lclJlY3QuaGVpZ2h0ICsgaW5uZXJSZWN0LnkgKyBsaW5lLm1hcmdpbi50b3A7XG4gICAgICAgICAgICBsaW5lLnJlY3QubWF4V2lkdGggPSBpbm5lclJlY3QubWF4V2lkdGg7XG4gICAgICAgICAgICBpbm5lclJlY3QuaGVpZ2h0ICs9IGxpbmUucmVjdC5oZWlnaHQgKyBsaW5lLm1hcmdpbi50b3AgKyBsaW5lLm1hcmdpbi5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLnVwZGF0ZVJlbmRlckhlaWdodChpbm5lclJlY3QpO1xuICAgICAgICByZXR1cm4gaW5uZXJSZWN0LmhlaWdodDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtZWFzdXJlVGFibGVSb3cocm93UmVuZGVyOiBUYWJsZVJvd1JlbmRlck9iamVjdCwgZm9yZWNlQ29sSW5kZXggPSAtMSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvd0VsZSA9IHJvd1JlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm93TWluSGVpZ2h0ID0gcm93RWxlLnByb3BzLm1pbkhlaWdodCA+IDE5ID8gcm93RWxlLnByb3BzLm1pbkhlaWdodCA6IDE5O1xuICAgICAgICBsZXQgbWF4Q2VsbGhlaWdodCA9IHJvd01pbkhlaWdodDtcbiAgICAgICAgLy/pmZDliLbooYzmnIDlsI/pq5jluqZcbiAgICAgICAgbWF4Q2VsbGhlaWdodCA9IG1heENlbGxoZWlnaHQgPCAxOSA/IDE5IDogbWF4Q2VsbGhlaWdodDtcbiAgICAgICAgLy/ojrflj5booYzlhoXpnZ7nurXlkJHlkIjlubbljZXlhYPmoLznmoTmnIDpq5jljZXlhYPmoLzpq5jluqZcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCB7dk1lcmdlfSA9ICg8VGFibGVDZWxsRWxlbWVudD5jZWxsUmVuZGVyLmVsZW1lbnQpLnByb3BzO1xuICAgICAgICAgICAgaWYgKGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgPiBtYXhDZWxsaGVpZ2h0ICYmICh2TWVyZ2UgIT09ICdyZXN0YXJ0JyB8fCBpID09PSBmb3JlY2VDb2xJbmRleCkpIHtcbiAgICAgICAgICAgICAgICBtYXhDZWxsaGVpZ2h0ID0gY2VsbFJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+W+queOr+iuvue9ruWNleWFg+agvOmrmOW6puS4uuihjOWGheacgOWkp+WNleWFg+agvOmrmOW6plxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1JlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvd1JlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBjZWxsRWxlbWVudCA9IDxUYWJsZUNlbGxFbGVtZW50PmNlbGxSZW5kZXIuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHt2TWVyZ2V9ID0gY2VsbEVsZW1lbnQucHJvcHM7XG4gICAgICAgICAgICBpZiAoKHZNZXJnZSAhPT0gJ3Jlc3RhcnQnIHx8IGkgPT09IGZvcmVjZUNvbEluZGV4KSB8fCBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0IDwgbWF4Q2VsbGhlaWdodCkge1xuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgPSBtYXhDZWxsaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lpITnkIbljZXlhYPmoLzlhoXlrrnnurXlkJHlsYXkuK1cbiAgICAgICAgICAgIHRoaXMubWVhc3VyZUNlbGxWQWxpZ24oY2VsbFJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy/orr7nva7ooYzpq5hcbiAgICAgICAgcm93UmVuZGVyLnVwZGF0ZVJlbmRlckhlaWdodChtYXhDZWxsaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIG1heENlbGxoZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6KGo5qC86KGM57uY5Yi25YWD57Sg55qE5YaF5a656auY5bqm77yM55So5LqO57yp5pS+6KGM6auY5bqm5pe277yM6I635Y+W5pyA5bCP5YaF5a656auY5bqm77yM57yp5pS+55qE6auY5bqm5LiN6IO95bCP5LqO5YaF5a655pyA5bCP6auY5bqmXG4gICAgICovXG4gICAgc3RhdGljIGdldFRhYmxlUm93UmVuZGVyQ29udGVudEhlaWdodChyb3dSZW5kZXI6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgcm93RWxlID0gcm93UmVuZGVyLmVsZW1lbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBsZXQgbWF4Q2VsbGhlaWdodCA9IDE5O1xuICAgICAgICAvL+mZkOWItuihjOacgOWwj+mrmOW6plxuICAgICAgICAvL+iOt+WPluihjOWGhemdnue6teWQkeWQiOW5tuWNleWFg+agvOeahOacgOmrmOWNleWFg+agvOmrmOW6plxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1JlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvd1JlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBjZWxsQ29udGVudEhlaWdodCA9IHRoaXMuZ2V0VGFibGVDZWxsUmVuZGVyQ29udGVudEhlaWdodChjZWxsUmVuZGVyKTtcbiAgICAgICAgICAgIGNvbnN0IHt2TWVyZ2V9ID0gKDxUYWJsZUNlbGxFbGVtZW50PmNlbGxSZW5kZXIuZWxlbWVudCkucHJvcHM7XG4gICAgICAgICAgICBpZiAoY2VsbENvbnRlbnRIZWlnaHQgPiBtYXhDZWxsaGVpZ2h0ICYmIHZNZXJnZSAhPT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgbWF4Q2VsbGhlaWdodCA9IGNlbGxDb250ZW50SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhDZWxsaGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWNleWFg+agvOWGheWuuemrmOW6plxuICAgICAqIOWNleWFg+agvOaaguS4jeWkhOeQhuS4iuS4i21hcmdpbuOAgXBhZGRpbmdcbiAgICAgKiBAcGFyYW0gY2VsbFJlbmRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFRhYmxlQ2VsbFJlbmRlckNvbnRlbnRIZWlnaHQoY2VsbFJlbmRlcjogVGFibGVDZWxsUmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGNvbnRlbnRIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQgKz0gY2VsbFJlbmRlci5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudEhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIbljZXlhYPmoLzlhoXlrrnnurXlkJHlr7npvZBcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgbWVhc3VyZUNlbGxWQWxpZ24ocmVuZGVyOiBUYWJsZUNlbGxSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGNFbGVtZW50ID0gcmVuZGVyLmVsZW1lbnQgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgY29uc3Qge3ZBbGlnbn0gPSB0Y0VsZW1lbnQucHJvcHM7XG4gICAgICAgIGlmICghdkFsaWduIHx8IHZBbGlnbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3VtSGVpZ2h0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN1bUhlaWdodCArPSByZW5kZXIuZ2V0Q2hpbGQoaSkucmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNwYWNlSGVpZ2h0ID0gMDtcbiAgICAgICAgc3BhY2VIZWlnaHQgPSB2QWxpZ24gPT09ICdtaWRkbGUnID8gTWF0aC5mbG9vcigocmVuZGVyLnJlY3QuaGVpZ2h0IC0gc3VtSGVpZ2h0KSAvIDIpIDogdkFsaWduID09PSAnYm90dG9tJyA/IHJlbmRlci5yZWN0LmhlaWdodCAtIHN1bUhlaWdodCA6IDBcbiAgICAgICAgaWYgKHNwYWNlSGVpZ2h0IDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgeSA9IHNwYWNlSGVpZ2h0O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVuZGVyLmdldENoaWxkKGkpLnJlY3QueSA9IHk7XG4gICAgICAgICAgICB5ICs9IHJlbmRlci5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruihqOagvOaoquWQkeaOkuWIl+aWueW8j1xuICAgICAqIEBwYXJhbSB0YlJlbmRlclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgc2V0VGFibGVBbGlnbih0YlJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgLy8gY29uc3Qge2FsaWdubWVudH0gPSB0YlJlbmRlci5lbGVtZW50LnByb3BzO1xuICAgICAgICAvLyBpZiAoIWFsaWdubWVudCkge1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGNvbnN0IHBhcmVudFJlbmRlciA9IHRiUmVuZGVyLnBhcmVudDtcbiAgICAgICAgLy8gY29uc3QgcmVtYWluU3BhY2UgPSBwYXJlbnRSZW5kZXIucmVjdC53aWR0aCAtIHRiUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgIC8vIGlmIChyZW1haW5TcGFjZSA8PSAwKSB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gaWYgKGFsaWdubWVudCA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgLy8gICAgIHRiUmVuZGVyLnJlY3QueCA9IE1hdGguZmxvb3IocmVtYWluU3BhY2UgLyAyKTtcbiAgICAgICAgLy8gfSBlbHNlIGlmIChhbGlnbm1lbnQgPT09ICdlbmQnKSB7XG4gICAgICAgIC8vICAgICB0YlJlbmRlci5yZWN0LnggPSByZW1haW5TcGFjZTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmHjeaWsOa1i+mHj+WQiOW5tuWNleWFg+agvOmrmOW6plxuICAgICAqIEBwYXJhbSB0YlJlbmRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIHJlbWVhc3VyZVRhYmxlTWVyZ2UodGJSZW5kZXI6IFRhYmxlUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIC8v5piv5ZCm6ZyA6KaB6YeN5paw6K6h566XLOS4u+imgeino+WGs++8muS5i+WJjeWQiOW5tuiuoeeul+eahOWIl++8jOWPr+iDveS8muiiq+WQjumdouWQiOW5tuiuoeeul+eahOWIl+aJgOW9seWTje+8jOmcgOimgeWGjeasoemHjeaWsOiuoeeul+a1i+mHj1xuICAgICAgICBsZXQgbmVlZFJlQ2FsYyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiUmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0YlJlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlID0gY2VsbFJlbmRlci5lbGVtZW50IGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3Qge3ZNZXJnZX0gPSBlbGUucHJvcHM7XG4gICAgICAgICAgICAgICAgaWYgKHZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZUluZGV4ID0gZWxlLmdldEluZGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRpbnVlUm93cyA9IHRoaXMuZ2V0Q29udGludWVWTWVyZ2VSZW5kZXJSb3dzKHRiUmVuZGVyLCBpLCBlbGVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udGludWVSb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/lkJHkuIvkuI3lrZjlnKjlkIjlubbnmoTljZXlhYPmoLzvvIzlvZPliY3lkIjlubbnmoTljZXlhYPmoLzmmK/ooqtjdXTov4fmnaXnmoTvvIzlubbkuJTlvZPliY3ljZXlhYPmoLzpq5jluqbpq5jkuo7ooYzlhoXpq5jluqbpnIDopoFyZW1lYXN1cmXlvZPliY3ooYxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0ID4gcm93LnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1lYXN1cmVUYWJsZVJvdyhyb3csIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZUNhbGMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGludWVDZWxsSGVpZ2h0ID0gY29udGludWVSb3dzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIucmVjdC5oZWlnaHQsIDApXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93SGVpZ2h0ID0gY2VsbFJlbmRlci5yZWN0LmhlaWdodCAtIHJvdy5yZWN0LmhlaWdodCAtIGNvbnRpbnVlQ2VsbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgLy/muqLlh7rnmoTpq5jluqbliqDliLDmnIDlkI7kuIDkuKrlkIjlubbljZXlhYPmoLzkuK1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJmbG93SGVpZ2h0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFJvdyA9IGNvbnRpbnVlUm93c1tjb250aW51ZVJvd3MubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Um93LnJlY3QuaGVpZ2h0ICs9IG92ZXJmbG93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemVDZWxsVG9GaWxsUm93KGxhc3RSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFJlQ2FsYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0ID0gcm93LnJlY3QuaGVpZ2h0ICsgY29udGludWVDZWxsSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZWVkUmVDYWxjKSB7XG4gICAgICAgICAgICB0aGlzLnJlbWVhc3VyZVRhYmxlTWVyZ2UodGJSZW5kZXIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCR5LiL57q15ZCR5ZCI5bm255qE6KGMXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Q29udGludWVWTWVyZ2VSZW5kZXJSb3dzKHJlbmRlcjogVGFibGVSZW5kZXJPYmplY3QsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBUYWJsZVJvd1JlbmRlck9iamVjdFtdIHtcbiAgICAgICAgY29uc3Qgcm93czogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCArIDE7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1JlbmRlciA9IHJlbmRlci5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IHJvd0VsZSA9IHJvd1JlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IHJvd0VsZS5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHt2TWVyZ2V9ID0gZWxlLnByb3BzO1xuICAgICAgICAgICAgaWYgKHZNZXJnZSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93cy5wdXNoKHJvd1JlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5qiq5ZCR5b2T5YmN6KKr5ZCI5bm255qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICovXG4gICAgc3RhdGljIGdldEhvcml6b250YWxSZXN0YXJ0Q2VsbEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gY29sSW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOS4u+WQiOW5tuWNleWFg+agvCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruaoquWQkeW9k+WJjeiiq+WQiOW5tueahOWNleWFg+agvFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRWZXJ0aWNhbFJlc3RhcnRDZWxsSW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOaoquWQkeW9k+WJjeiiq+WQiOW5tueahOWNleWFg+agvCcpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCI5bm25Y2V5YWD5qC85Li75Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVzdGFydENlbGxQb3NpdGlvbih0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogeyByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RhcnRDZWxsSW5kZXggPSB0aGlzLmdldEhvcml6b250YWxSZXN0YXJ0Q2VsbEluZGV4KHRiLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzdGFydENlbGxQb3NpdGlvbih0Yiwgcm93SW5kZXgsIHJlc3RhcnRDZWxsSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgY29uc3QgcmVzdGFydFJvd0luZGV4ID0gdGhpcy5nZXRWZXJ0aWNhbFJlc3RhcnRDZWxsSW5kZXgodGIsIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZXN0YXJ0Q2VsbFBvc2l0aW9uKHRiLCByZXN0YXJ0Um93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge3Jvd0luZGV4LCBjb2xJbmRleH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDosIPmlbTljZXlhYPmoLzpq5jluqbloavmu6HmlbTkuKrooYznmoTpq5jluqZcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZXNpemVDZWxsVG9GaWxsUm93KHJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjZWxsLnJlY3QuaGVpZ2h0ID0gcm93LnJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5blhYPntKDnmoTlhajlsYDntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENvbnRyb2xJbmRleChjb250cm9sOiBFbGVtZW50KTogbnVtYmVyO1xuICAgIHN0YXRpYyBnZXRDb250cm9sSW5kZXgoY29udHJvbDogRWxlbWVudCwgcHVyZTogYm9vbGVhbik6IG51bWJlcjtcbiAgICBzdGF0aWMgZ2V0Q29udHJvbEluZGV4KGNvbnRyb2w6IEVsZW1lbnQsIHB1cmU/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgcHVyZSA9IHR5cGVvZiBwdXJlID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogcHVyZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRyb2xJbmRleChwdXJlLCBjb250cm9sKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lhajlsYDntKLlvJXkvY3nva7ojrflj5blhYPntKBcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEBwYXJhbSBjb3VudGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q29udHJvbEJ5SW5kZXgoY29udHJvbDogRWxlbWVudCwgY291bnRlcjogeyBjdXJySW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlciB9KTogRWxlbWVudCB8IG51bGw7XG4gICAgc3RhdGljIGdldENvbnRyb2xCeUluZGV4KGNvbnRyb2w6IEVsZW1lbnQsIGNvdW50ZXI6IHsgY3VyckluZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIgfSwgcHVyZTogYm9vbGVhbik6IEVsZW1lbnQgfCBudWxsO1xuICAgIHN0YXRpYyBnZXRDb250cm9sQnlJbmRleChjb250cm9sOiBFbGVtZW50LCBjb3VudGVyOiB7IGN1cnJJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyIH0sIHB1cmU/OiBib29sZWFuKTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBwdXJlID0gdHlwZW9mIHB1cmUgPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiBwdXJlO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEJ5SW5kZXgocHVyZSwgY29udHJvbCwgY291bnRlcik7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5blhYPntKDnmoTlhajlsYDntKLlvJXkvY3nva7vvIzkuI3nu5/orqHmrrXokL3nrKblj7dcbiAgICAgKiBAcGFyYW0gcHVyZVxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2V0Q29udHJvbEluZGV4KHB1cmU6IGJvb2xlYW4sIGNvbnRyb2w6IEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb250cm9sLmdldEluZGV4KCk7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IHB1cmUgJiYgY29udHJvbC50eXBlID09PSAncHN5bScgPyAwIDogMTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGNvdW50ZXIgKz0gY2hpbGQuZ2V0U2VsZkxlbmd0aChwdXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3VudGVyICsgdGhpcy5fZ2V0Q29udHJvbEluZGV4KHB1cmUsIHBhcmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5YWo5bGA57Si5byV5L2N572u6I635Y+W5YWD57Sg77yM5LiN57uf6K6h5q616JC956ym5Y+3XG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gY291bnRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dldENvbnRyb2xCeUluZGV4KHB1cmU6IGJvb2xlYW4sIGNvbnRyb2w6IEVsZW1lbnQsIGNvdW50ZXI6IHsgY3VyckluZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIgfSk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW5jcmVhc2VWYWwgPSBwdXJlICYmIGNvbnRyb2wudHlwZSA9PT0gJ3BzeW0nID8gMCA6IDE7XG4gICAgICAgIGNvdW50ZXIuY3VyckluZGV4ICs9IGluY3JlYXNlVmFsO1xuICAgICAgICBpZiAoY291bnRlci5jdXJySW5kZXggPT09IGNvdW50ZXIuaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLl9nZXRDb250cm9sQnlJbmRleChwdXJlLCBjb250cm9sLmdldENoaWxkKGkpLCBjb3VudGVyKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLy8gLyoqXG4gICAgLy8gICog6I635Y+W5YWD57Sg55qE5YWo5bGA57Si5byV5L2N572uXG4gICAgLy8gICogQHBhcmFtIGNvbnRyb2xcbiAgICAvLyAgKiBAcmV0dXJuc1xuICAgIC8vICAqL1xuICAgIC8vIHN0YXRpYyBnZXRDb250cm9sSW5kZXgyKGNvbnRyb2w6IEVsZW1lbnQpOiBudW1iZXIge1xuICAgIC8vICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAvLyAgICAgaWYgKHBhcmVudCkge1xuICAgIC8vICAgICAgICAgY29uc3QgaW5kZXggPSBjb250cm9sLmdldEluZGV4KCk7XG4gICAgLy8gICAgICAgICBsZXQgY291bnRlciA9IDE7XG4gICAgLy8gICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAvLyAgICAgICAgICAgICBjb3VudGVyICs9IGNoaWxkLmdldFNlbGZMZW5ndGgoKTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIHJldHVybiBjb3VudGVyICsgdGhpcy5nZXRDb250cm9sSW5kZXgyKHBhcmVudCk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gMDtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIC8qKlxuICAgIC8vICAqIOagueaNruWFqOWxgOe0ouW8leS9jee9ruiOt+WPluWFg+e0oFxuICAgIC8vICAqIEBwYXJhbSBjb250cm9sXG4gICAgLy8gICogQHBhcmFtIGNvdW50ZXJcbiAgICAvLyAgKiBAcmV0dXJuc1xuICAgIC8vICAqL1xuICAgIC8vIHN0YXRpYyBnZXRDb250cm9sQnlJbmRleDIoY29udHJvbDogRWxlbWVudCwgY291bnRlcjogeyBjdXJySW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlciB9KTogRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBjb3VudGVyLmN1cnJJbmRleCsrO1xuICAgIC8vICAgICBpZiAoY291bnRlci5jdXJySW5kZXggPT09IGNvdW50ZXIuaW5kZXgpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBjb250cm9sO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgLy8gICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wubGVuZ3RoOyBpKyspIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldENvbnRyb2xCeUluZGV4Mihjb250cm9sLmdldENoaWxkKGkpLCBjb3VudGVyKTtcbiAgICAvLyAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWQjOe6p+e0p+aMqOWJjeaWueeahOWFhOW8n+WFg+e0oFxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UHJldlNpYmxpbmdFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LmdldENoaWxkKGluZGV4IC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCM57qn57Sn5oyo5LiL5pa555qE5YWD57SgXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXh0U2libGluZ0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnQ7XG4gICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgcGFyZW50Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LmdldENoaWxkKGluZGV4ICsgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmV4dFNpYmxpbmdUcmFja0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCwgdHlwZTogVHJhY2tSdW5UeXBlRW51bSwgdXNlcklkOiBzdHJpbmcpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdFbGUgPSB0aGlzLmdldE5leHRTaWJsaW5nRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKG5leHRTaWJsaW5nRWxlIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAobmV4dFNpYmxpbmdFbGUudHlwZSA9PT0gdHlwZSAmJiBuZXh0U2libGluZ0VsZS5wcm9wcy51c2VySWQgPT09IHVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U2libGluZ0VsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UHJldlNpYmxpbmdUcmFja0VsZW1lbnQoZWxlbWVudDogRWxlbWVudCwgdHlwZTogVHJhY2tSdW5UeXBlRW51bSwgdXNlcklkOiBzdHJpbmcpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcHJldlNpYmxpbmdFbGUgPSB0aGlzLmdldFByZXZTaWJsaW5nRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKHByZXZTaWJsaW5nRWxlIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAocHJldlNpYmxpbmdFbGUudHlwZSA9PT0gdHlwZSAmJiBwcmV2U2libGluZ0VsZS5wcm9wcy51c2VySWQgPT09IHVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2U2libGluZ0VsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7pu5jorqTphY3nva7liJvlu7rplb/mlofmnKxcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXdUZXh0R3JvdXAodGV4dFByb3BzOiBUZXh0UHJvcHMpOiBUZXh0R3JvdXBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KClcbiAgICAgICAgdGV4dFByb3BzLmNsb25lKHRleHQucHJvcHMpO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlVGV4dFByb3BzKGRlc3Q6IFRleHRQcm9wcyB8IG51bGwsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IGRlc3QgPz8gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udFNpemUgPSB2aWV3T3B0aW9ucy5kZWZhdWx0Rm9udFNpemU7XG4gICAgICAgIHRleHRQcm9wcy5mb250TmFtZSA9IHZpZXdPcHRpb25zLmRlZmF1bHRGb250TmFtZTtcbiAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gdmlld09wdGlvbnMuZGVmYXVsdENvbG9yO1xuICAgICAgICByZXR1cm4gdGV4dFByb3BzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWuueWZqOWGheeahOacgOWwj+a4suafk+WFg+e0oOmbhuWQiFxuICAgICAqIEBwYXJhbSBwYXJQb3NcbiAgICAgKiBAcGFyYW0gYXJyYXlcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0QXZhaWxIaXRMZWFmUmVuZGVyT2JqZWN0cyhyZW5kZXI6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbik6IEFycmF5PHsgcmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQXZhaWxIaXRSZW5kZXIocmVuZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB7XG4gICAgICAgICAgICB4OiBwYXJQb3MueCArIHJlbmRlci5yZWN0LngsXG4gICAgICAgICAgICB5OiBwYXJQb3MueSArIHJlbmRlci5yZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlbmRlci5yZWN0LmhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFycmF5OiBBcnJheTx7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9PiA9IFtdO1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goLi4udGhpcy5nZXRBdmFpbEhpdExlYWZSZW5kZXJPYmplY3RzKGNoaWxkLCB7eDogcmVuZGVyT2JqZWN0UmVjdC54LCB5OiByZW5kZXJPYmplY3RSZWN0Lnl9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgYXJyYXkucHVzaCh7cmVuZGVyOiByZW5kZXIsIHJlY3Q6IHJlbmRlck9iamVjdFJlY3R9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWuueWZqOWGheeahOacgOWwj+a4suafk+WFg+e0oOmbhuWQiFxuICAgICAqIEBwYXJhbSBwYXJQb3NcbiAgICAgKiBAcGFyYW0gYXJyYXlcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0QXZhaWxIaXRSZW5kZXJPYmplY3RzKHJlbmRlcjogUmVuZGVyT2JqZWN0LCBwYXJQb3M6IFBvc2l0aW9uKTogQXJyYXk8eyByZW5kZXI6IFJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0F2YWlsSGl0UmVuZGVyKHJlbmRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0gdGhpcy5nZXRSZW5kZXJPYmplY3RBYnNvbHV0ZVJlY3QocmVuZGVyLCBwYXJQb3MpO1xuICAgICAgICBjb25zdCBhcnJheTogQXJyYXk8eyByZW5kZXI6IFJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9PiA9IFtdO1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrQXZhaWxIaXRSZW5kZXIoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goe3JlbmRlcjogY2hpbGQsIHJlY3Q6IHRoaXMuZ2V0UmVuZGVyT2JqZWN0QWJzb2x1dGVSZWN0KGNoaWxkLCByZW5kZXJPYmplY3RSZWN0KX0pXG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgYXJyYXkucHVzaCh7cmVuZGVyOiByZW5kZXIsIHJlY3Q6IHJlbmRlck9iamVjdFJlY3R9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue7mOWItuWFg+e0oOeahOe7neWvueS9jee9ruahhlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZW5kZXJPYmplY3RBYnNvbHV0ZVJlY3QocmVuZGVyOiBSZW5kZXJPYmplY3QsIHBhclBvczogUG9zaXRpb24pOiBSZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHtcbiAgICAgICAgICAgIHg6IHBhclBvcy54ICsgcmVuZGVyLnJlY3QueCxcbiAgICAgICAgICAgIHk6IHBhclBvcy55ICsgcmVuZGVyLnJlY3QueSxcbiAgICAgICAgICAgIHdpZHRoOiByZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVuZGVyLnJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlbmRlck9iamVjdFJlY3Q7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmo4Dmn6XlvZPliY3nu5jliLblhYPntKDmmK/lkKblsZ7kuo7mnInmlYjngrnlh7vlhYPntKBcbiAgICAgKi9cbiAgICBzdGF0aWMgY2hlY2tBdmFpbEhpdFJlbmRlcihyZW5kZXI6IFJlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocmVuZGVyLmVsZW1lbnQgJiYgcmVuZGVyLmVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByb3dFbGUgPSByZW5kZXIuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocm93RWxlLnByb3BzLmhlYWRlclJvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3dFbGUucGFpbnRSZW5kZXJzLmluZGV4T2YocmVuZGVyKSA9PT0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXJlbmRlci5kaXNhYmxlQ2xpY2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6aqM6K+B54K55Ye75Y+v5pON5L2c5oCnXG4gICAgICog5Li76KaB6ZmQ5Yi26aG155yJ6aG16ISa55qE57yW6L6R5qih5byPXG4gICAgICovXG4gICAgc3RhdGljIHZlcmlmeUhpdGFibGUoc291cmNlRWxlbWVudDogTGVhZkVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghc291cmNlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRFbGVtZW50cyhzb3VyY2VFbGVtZW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChjaGlsZC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5LiA5Liq54K55Yiw5LiA5Liq55+p5b2i5pyA55+t55qE6Led56a7XG4gICAgICogQHBhcmFtIHJlY3RcbiAgICAgKiBAcGFyYW0gcFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldERpc3RhbmNlVG9SZWN0KHJlY3Q6IFJlY3QsIHA6IFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IGxpbmVzOiBBcnJheTx7IGY6IFBBSVIsIHM6IFBBSVIgfT4gPSBbXTtcbiAgICAgICAgbGluZXMucHVzaCh7XG4gICAgICAgICAgICBmOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54LFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54LFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LngsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZjoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnkgKyByZWN0LmhlaWdodFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IGxpbmVzLm1hcChpdGVtID0+IHRoaXMubWluRGlzdGFuY2UoaXRlbS5mLCBpdGVtLnMsIHApKVxuICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4uZGlzdGFuY2VzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbWluRGlzdGFuY2UoQTogUEFJUiwgQjogUEFJUiwgRTogUEFJUikge1xuXG4gICAgICAgIGNvbnN0IEFCOiBQQUlSID0ge3g6IEIueCAtIEEueCwgeTogQi55IC0gQS55fVxuXG4gICAgICAgIGNvbnN0IEJFOiBQQUlSID0ge3g6IEUueCAtIEIueCwgeTogRS55IC0gQi55fTtcblxuICAgICAgICBjb25zdCBBRTogUEFJUiA9IHt4OiBFLnggLSBBLngsIHk6IEUueSAtIEEueX1cblxuICAgICAgICBjb25zdCBBQl9CRSA9IChBQi54ICogQkUueCArIEFCLnkgKiBCRS55KTtcbiAgICAgICAgY29uc3QgQUJfQUUgPSAoQUIueCAqIEFFLnggKyBBQi55ICogQUUueSk7XG5cbiAgICAgICAgbGV0IHJlcUFucyA9IDA7XG5cbiAgICAgICAgaWYgKEFCX0JFID4gMCkge1xuICAgICAgICAgICAgY29uc3QgeSA9IEUueSAtIEIueTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBFLnggLSBCLng7XG4gICAgICAgICAgICByZXFBbnMgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICAgIH0gZWxzZSBpZiAoQUJfQUUgPCAwKSB7XG4gICAgICAgICAgICBjb25zdCB5ID0gRS55IC0gQS55O1xuICAgICAgICAgICAgY29uc3QgeCA9IEUueCAtIEEueDtcbiAgICAgICAgICAgIHJlcUFucyA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHgxID0gQUIueDtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gQUIueTtcbiAgICAgICAgICAgIGNvbnN0IHgyID0gQUUueDtcbiAgICAgICAgICAgIGNvbnN0IHkyID0gQUUueTtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IE1hdGguc3FydCh4MSAqIHgxICsgeTEgKiB5MSk7XG4gICAgICAgICAgICByZXFBbnMgPSBNYXRoLmFicyh4MSAqIHkyIC0geTEgKiB4MikgLyBtb2Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcUFucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bniLbnuqflsYLnuqfmuLLmn5Plr7nosaFcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UGFyZW50UmVuZGVycyhyZW5kZXI6IFJlbmRlck9iamVjdCk6IEFycmF5PFJlbmRlck9iamVjdD4ge1xuICAgICAgICBpZiAocmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gW3JlbmRlciwgLi4udGhpcy5nZXRQYXJlbnRSZW5kZXJzKHJlbmRlci5wYXJlbnQpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSZW5kZXJNYXBFbGVtZW50cyhyZW5kZXI6IFJlbmRlck9iamVjdCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgcmVuZGVycyA9IHRoaXMuZ2V0UGFyZW50UmVuZGVycyhyZW5kZXIpO1xuICAgICAgICByZXR1cm4gcmVuZGVycy5tYXAocmVuZGVyID0+IHJlbmRlci5lbGVtZW50KS5maWx0ZXIoZWxlID0+IGVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmVudFJlbmRlcjxUIGV4dGVuZHMgQnJhbmNoUmVuZGVyT2JqZWN0PihjaGlsZDogUmVuZGVyT2JqZWN0LCBwYXJlbnRUeXBlOiB7IG5ldyguLi5hcmdzOiBhbnkpOiBUIH0pOiBUIHwgbnVsbCB7XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIHBhcmVudFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudFJlbmRlcihjaGlsZC5wYXJlbnQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmVudFJlbmRlckJ5UHJlZGljYXRlKGNoaWxkOiBSZW5kZXJPYmplY3QsIHByZWRpY2F0ZTogKGl0ZW06IFJlbmRlck9iamVjdCkgPT4gYm9vbGVhbik6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50UmVuZGVyQnlQcmVkaWNhdGUoY2hpbGQucGFyZW50LCBwcmVkaWNhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W54i257qn5bGC57qn5YWD57Sg5a+56LGhXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRQYXJlbnRFbGVtZW50cyhlbGVtZW50OiBFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbZWxlbWVudCwgLi4udGhpcy5nZXRQYXJlbnRFbGVtZW50cyhlbGVtZW50LnBhcmVudCldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5pyA5ZCO5LiA5Liq5a2Q5YWD57SgXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRMYXN0TGVhZkVsZW1lbnQoZWxlbWVudDogRWxlbWVudCwgcHJlZGljYXRlOiBudWxsIHwgKChpdGVtOiBFbGVtZW50KSA9PiBib29sZWFuKSA9IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIExlYWZFbGVtZW50ICYmICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZShlbGVtZW50KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZWxlbWVudC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0TGFzdExlYWZFbGVtZW50KGVsZW1lbnQuZ2V0Q2hpbGQoaSksIHByZWRpY2F0ZSlcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnrKzkuIDkuKrlrZDlhYPntKBcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldEZpcnN0TGVhZkVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldEZpcnN0TGVhZkVsZW1lbnQoZWxlbWVudC5nZXRDaGlsZChpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagoemqjOS4pOS4quWFg+e0oOaYr+WQpuWcqOWQjOS4gOS4quauteiQveS4rVxuICAgICAqIEBwYXJhbSBlbGVtZW50MVxuICAgICAqIEBwYXJhbSBlbGVtZW50MlxuICAgICAqL1xuICAgIHN0YXRpYyBpc0luU2FtZVBhcmFncmFwaChlbGVtZW50MTogRWxlbWVudCwgZWxlbWVudDI6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcGFyMSA9IHRoaXMuZ2V0UGFyZW50QnlUeXBlKGVsZW1lbnQxLCBQYXJhZ3JhcGhFbGVtZW50KTtcbiAgICAgICAgY29uc3QgcGFyMiA9IHRoaXMuZ2V0UGFyZW50QnlUeXBlKGVsZW1lbnQyLCBQYXJhZ3JhcGhFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHBhcjEgPT09IHBhcjI7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEJvcmRlckN1cnNvcihib3JkZXJUeXBlOiBCb3JkZXJUeXBlKTogQ3Vyc29yVHlwZSB7XG4gICAgICAgIHN3aXRjaCAoYm9yZGVyVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyb3ctcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnY29sLXJlc2l6ZSc7XG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb2wtcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyb3ctcmVzaXplJ1xuICAgICAgICAgICAgY2FzZSAnbGVmdC1taWRkbGUnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQtbWlkZGxlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ctcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ3RvcC1taWRkbGUnOlxuICAgICAgICAgICAgY2FzZSAnYm90dG9tLW1pZGRsZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzLXJlc2l6ZSc7XG4gICAgICAgICAgICBjYXNlICdsZWZ0LXRvcCc6XG4gICAgICAgICAgICBjYXNlICdyaWdodC1ib3R0b20nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnc2UtcmVzaXplJztcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0LXRvcCc6XG4gICAgICAgICAgICBjYXNlICdsZWZ0LWJvdHRvbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICduZS1yZXNpemUnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RleHQnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmVudEJ5VHlwZTxQIGV4dGVuZHMgRWxlbWVudCwgVD4oY2hpbGQ6IFAgfCBudWxsLCBwYXJlbnRUeXBlOiB7IG5ldyguLi5hcmdzOiBhbnkpOiBUIH0pOiBUIHwgbnVsbCB7XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIHBhcmVudFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEJ5VHlwZShjaGlsZC5wYXJlbnQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmVudChjaGlsZDogRWxlbWVudCB8IG51bGwsIHByZWRpY2F0ZTogKGl0ZW06IEVsZW1lbnQpID0+IGJvb2xlYW4pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGUoY2hpbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnQoY2hpbGQucGFyZW50LCBwcmVkaWNhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDkv67mraPmrrXokL3lhoXlrrlcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBmaXhQYXJhZ3JhcGhDb250ZW50KGNvbnRyb2w6IFBhcmFncmFwaEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgLy/lpoLmnpzmnIDlkI7kuIDkuKrlhYPntKDkuI3mmK/mrrXokL3nrKblj7fvvIzliJnooaXotrNcbiAgICAgICAgaWYgKCEoY29udHJvbC5nZXRDaGlsZChjb250cm9sLmxlbmd0aCAtIDEpIGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb250cm9sLmFkZENoaWxkKG5ldyBQU3ltYm9sRWxlbWVudCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8UFN5bWJvbEVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY29udHJvbC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2wucmVtb3ZlQ2hpbGQoaXRlbSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5q2j5Z2X57qn5a655Zmo5YaF5a65XG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKi9cbiAgICBzdGF0aWMgZml4QmxvY2tDb250YWluZXIoY29udHJvbDogQmxvY2tDb250YWluZXJFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChjb250cm9sLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUNlbGxFbGVtZW50ICYmIChjb250cm9sLnByb3BzLnZNZXJnZSA9PT0gJ2NvbnRpbnVlJyB8fCBjb250cm9sLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29udHJvbC5ub0ZpbGxFbXB0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRyb2wuYWRkQ2hpbGQobmV3IFBhcmFncmFwaEVsZW1lbnQoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue7mOWItuWFg+e0oOebuOWvueS6juaVtOS4queUu+W4g+eahOe7neWvueS9jee9rlxuICAgICAqIOaVtOS4queUu+W4g+e7mOWItueahOaXtuWAmeS4jeS4gOWumuS7jng9MCx5PTDml7bnu5jliLbnmoTvvIzkuIvmi4nmu5rliqjml7bvvIzkuIrpnaLku47otJ955Z2Q5qCH5byA5aeL57uY5Yi2XG4gICAgICog5aaC5p6c6K6h566X5p+Q5Liq5YWD57Sg55u45a+555S75biD55qE5bem5LiK6KeS55qE57ud5a+55Z2Q5qCH5L2N572u77yM6ZyA6KaBY2hpbGRQb3PnmoR55YC85YeP5Y67dHJhbnNsYXRlWVxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gcmVmUG9zIOWPgueFp+S9jee9rlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlZlBvczogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFBvc2l0aW9uIHtcbiAgICAgICAgcmVmUG9zID0gcmVmUG9zID8/IHt4OiAwLCB5OiAwfTtcbiAgICAgICAgY29uc3QgY3VyclBvczogUG9zaXRpb24gPSB7eDogcmVuZGVyLnJlY3QueCArIHJlZlBvcy54LCB5OiByZW5kZXIucmVjdC55ICsgcmVmUG9zLnl9O1xuICAgICAgICBpZiAoIXJlbmRlci5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyUG9zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocmVuZGVyLnBhcmVudCwgY3VyclBvcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0LCBjaGlsZFBvczogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFJlY3Qge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MocmVuZGVyLCBjaGlsZFBvcyk7XG4gICAgICAgIHJldHVybiB7Li4ucG9zLCB3aWR0aDogcmVuZGVyLnJlY3Qud2lkdGgsIGhlaWdodDogcmVuZGVyLnJlY3QuaGVpZ2h0LCBtYXhXaWR0aDogMCwgbWF4SGVpZ2h0OiAwfTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumAieS4reWMuuWfn+eahOW8gOWni+WMuuWfn1xuICAgICAqIEBwYXJhbSByYW5nZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldEZpcnN0U2VsZWN0ZWRSYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICAgICAgaWYgKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwIHx8IHJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0U2VsZWN0ZWRSYW5nZShyYW5nZS5zZWxlY3RlZENoaWxkcmVuWzBdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumAieS4reWMuuWfn+eahOW8gOWni+WMuuWfn1xuICAgICAqIEBwYXJhbSByYW5nZSBcXFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldExhc3RTZWxlY3RlZFJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBpZiAocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgcmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFzdFNlbGVjdGVkUmFuZ2UocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltyYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5YWL6ZqG6YCJ5Yy65YaF5a65XG4gICAgICogQHBhcmFtIHJhbmdlXG4gICAgICogQHBhcmFtIGlzRGVsZXRlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgY2xvbmVSYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBpc0RlbGV0ZTogYm9vbGVhbiwgY2xvbmVNb2RlOiAnY2xvbmUnIHwgJ3NvdXJjZScgfCAnY29weScgPSAnY2xvbmUnKTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCB7dGFyZ2V0LCBpc0Z1bGxTZWxlY3RlZCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgc2VsZWN0ZWRDaGlsZHJlbn0gPSByYW5nZTtcbiAgICAgICAgaWYgKGlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAvL+S/rumlsOWFg+e0oOS4jeiDveWkjeWItiDlrqHpmIXmoIforrDjgIHmlbDmja7lhYNOdWxsVGV4dFxuICAgICAgICAgICAgaWYgKGNsb25lTW9kZSA9PT0gJ2NvcHknICYmIHRhcmdldC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IGNsb25lTW9kZSA9PT0gJ3NvdXJjZScgPyB0YXJnZXQgOiB0YXJnZXQuY2xvbmUodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoaXNEZWxldGUpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCAmJiBzdGFydE9mZnNldCAhPT0gZW5kT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RlbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weVRhcmdldCA9IHRhcmdldC5zcGxpY2VUZXh0KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC50ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3B5VGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weVRhcmdldCA9IHRhcmdldC5zcGxpY2VUZXh0KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3B5VGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlDaGlsZCA9IHRoaXMuY2xvbmVSYW5nZShzZWxlY3RlZENoaWxkcmVuW2ldLCBpc0RlbGV0ZSwgY2xvbmVNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHlDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChjb3B5Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlUYXJnZXQgPSB0YXJnZXQuY2xvbmUoZmFsc2UpIGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5VGFyZ2V0LmFkZENoaWxkKGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29weVRhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5omA5pyJ55qE5a2Q57qn5YWD57SgXG4gICAgICogQHBhcmFtIGJyYW5jaEVsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENoaWxkcmVuRWxlbWVudHMoYnJhbmNoRWxlOiBCcmFuY2hFbGVtZW50KTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBhcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJyYW5jaEVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJyYXkucHVzaChicmFuY2hFbGUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgJLlvZLlkJHliY3lr7vmib7mnIDov5HnmoTlhYPntKBcbiAgICAgKiBAcGFyYW0gY3VyckVsZW1lbnRcbiAgICAgKiBAcGFyYW0gaW5QYXJhICDmmK/lkKblnKjlkIzkuIDmrrXokL3kuK3lr7vmib5cbiAgICAgKiBAcGFyYW0gZm9yQ3Vyc29yIOafpeaJvue7k+aenOaYr+WQpueUqOS6juWFieagh+WumuS9jVxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9uc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwsIGluUGFyYTogYm9vbGVhbiA9IGZhbHNlLCBmb3JDdXJzb3I6IGJvb2xlYW4gPSBmYWxzZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gY3VyckVsZW1lbnQ/LnBhcmVudDtcbiAgICAgICAgLy/liKDpmaTnlZnnl5XlnZfnmoRtZWFzdXJlUmVuZGVy5Zyo5LiN5pi+56S655WZ55eV5qih5byP5LiL77yM5LiN55Sf5oiQcmVuZGVyXG4gICAgICAgIGlmICghY3VyckVsZW1lbnQgfHwgIXBhcmVudCB8fCAoIWN1cnJFbGVtZW50Lm1lYXN1cmVSZW5kZXIgJiYgIShjdXJyRWxlbWVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvL+WmguaenOW9k+WJjeaVsOaNruWFg+S4jeWPr+e8lui+ke+8jOWImeebtOaOpei3s+i/h1xuICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCAmJiAhcGFyZW50LnByb3BzLmVkaXRhYmxlICYmIHZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvckN1cnNvciAmJiBwYXJlbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoY3VyckVsZW1lbnQpO1xuICAgICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgICAgICBpZiAoaW5QYXJhICYmIHBhcmVudC50eXBlID09PSAncCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcHJldkVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgcHJldkVsZW1lbnQgPSBwYXJlbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZFbGVtZW50ICYmICFwcmV2RWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFwcmV2RWxlbWVudCB8fCBwcmV2RWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KHByZXZFbGVtZW50KTtcbiAgICAgICAgICAgIC8v55So5LqO5YWJ5qCH5a6a5L2NXG4gICAgICAgICAgICBpZiAoZm9yQ3Vyc29yICYmIGxhc3RMZWFmRWxlbWVudCAmJiBsYXN0TGVhZkVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGxhc3RMZWFmRWxlbWVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0TGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdExlYWZFbGVtZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocHJldkVsZW1lbnQucGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvqrnjq/lkJHliY3lr7vmib7lj6/lrprkvY3nmoTmlbDmja7lhYNcbiAgICAgKiBAcGFyYW0gY3VyckVsZW1lbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UHJldkRhdGFFbGVtZW50KGN0eDogRWRpdG9yQ29udGV4dCwgY3VyckVsZW1lbnQ6IERhdGFFbGVtZW50SW5saW5lR3JvdXApOiBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSBjdHguZ2V0Q3VycmVudEN0eChjdXJyRWxlbWVudCkuZ2V0Q29udHJvbEluc3RhbmNlTGlzdCgpLmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSBhcyBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwPjtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhRWxlLmluZGV4T2YoY3VyckVsZW1lbnQpO1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGlmICghZGF0YUVsZVtpXS5kaXNhYmxlQ2xpY2sgJiYgZGF0YUVsZVtpXS5wcm9wcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUVsZVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gKiDpgJLlvZLlkJHliY3lr7vmib7mnIDov5HnmoTlj6/ngrnlh7vlhYPntKBcbiAgICAvLyAqL1xuICAgIC8vIHN0YXRpYyBnZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRGb3JIaXQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgbGV0IGVsZTogTGVhZkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAvLyAgICAgZG8ge1xuICAgIC8vICAgICAgICAgZWxlID0gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICB9IHdoaWxlIChlbGUgJiYgZWxlLmRpc2FibGVDbGljaylcbiAgICAvLyAgICAgcmV0dXJuIGVsZTtcbiAgICAvLyB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWJjeWvu+aJvuacgOi/keeahOWFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBjb25zdCBwYXJlbnQgPSBjdXJyRWxlbWVudD8ucGFyZW50O1xuICAgIC8vICAgICBpZiAoIWN1cnJFbGVtZW50IHx8ICFwYXJlbnQpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICBpZiAoIWluZGV4KSB7XG4gICAgLy8gICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdwJykge1xuICAgIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50SW5QYXJhKHBhcmVudCk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBjb25zdCBwcmV2RWxlbWVudCA9IHBhcmVudC5nZXRDaGlsZChpbmRleCAtIDEpO1xuICAgIC8vICAgICAgICAgY29uc3QgbGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KHByZXZFbGVtZW50KTtcbiAgICAvLyAgICAgICAgIGlmIChsYXN0TGVhZkVsZW1lbnQpIHtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gbGFzdExlYWZFbGVtZW50O1xuICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRJblBhcmEocHJldkVsZW1lbnQ/LnBhcmVudCk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWJjeWvu+aJvuacgOi/keeahOWPr+eCueWHu+WFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEluUGFyYUZvckhpdChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZWxlOiBMZWFmRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8vICAgICBkbyB7XG4gICAgLy8gICAgICAgICBlbGUgPSB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudCk7XG4gICAgLy8gICAgIH0gd2hpbGUgKGVsZSAmJiBlbGUuZGlzYWJsZUNsaWNrKVxuICAgIC8vICAgICByZXR1cm4gZWxlO1xuICAgIC8vIH1cblxuXG4gICAgLyoqXG4gICAgICog6YCS5b2S5ZCR5ZCO5a+75om+5pyA6L+R55qE5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwsIGluUGFyYTogYm9vbGVhbiA9IGZhbHNlLCBmb3JDdXJzb3I6IGJvb2xlYW4gPSBmYWxzZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gY3VyckVsZW1lbnQ/LnBhcmVudDtcbiAgICAgICAgaWYgKCFjdXJyRWxlbWVudCB8fCAhcGFyZW50IHx8ICFjdXJyRWxlbWVudC5tZWFzdXJlUmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvL+WmguaenOW9k+WJjeaVsOaNruWFg+S4jeWPr+e8lui+ke+8jOWImeebtOaOpei3s+i/h1xuICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCAmJiAhcGFyZW50LnByb3BzLmVkaXRhYmxlICYmIHZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvckN1cnNvciAmJiBwYXJlbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoY3VyckVsZW1lbnQpO1xuICAgICAgICBpZiAoaW5kZXggPT09IHBhcmVudC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBpZiAoaW5QYXJhICYmIHBhcmVudC50eXBlID09PSAncCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbmV4dEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBwYXJlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQgJiYgIW5leHRFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW5leHRFbGVtZW50IHx8IG5leHRFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwYXJlbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KG5leHRFbGVtZW50KTtcbiAgICAgICAgICAgIC8v55So5LqO5YWJ5qCH5a6a5L2NXG4gICAgICAgICAgICBpZiAoZm9yQ3Vyc29yICYmIGxhc3RMZWFmRWxlbWVudCAmJiBsYXN0TGVhZkVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGxhc3RMZWFmRWxlbWVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0TGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdExlYWZFbGVtZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQobmV4dEVsZW1lbnQucGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWQjuWvu+aJvuacgOi/keeahOWFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBjb25zdCBwYXJlbnQgPSBjdXJyRWxlbWVudD8ucGFyZW50O1xuICAgIC8vICAgICBpZiAoIWN1cnJFbGVtZW50IHx8ICFwYXJlbnQpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICBpZiAoaW5kZXggPT09IHBhcmVudC5sZW5ndGggLSAxKSB7XG4gICAgLy8gICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICdwJykge1xuICAgIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50SW5QYXJhKHBhcmVudCk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBjb25zdCBuZXh0RWxlbWVudCA9IHBhcmVudC5nZXRDaGlsZChpbmRleCArIDEpO1xuICAgIC8vICAgICAgICAgY29uc3QgbGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChuZXh0RWxlbWVudCk7XG4gICAgLy8gICAgICAgICBpZiAobGFzdExlYWZFbGVtZW50KSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIGxhc3RMZWFmRWxlbWVudDtcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50SW5QYXJhKG5leHRFbGVtZW50LnBhcmVudCk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWQjuWvu+aJvuacgOi/keeahOWPr+eCueWHu+WFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYUZvckhpdChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZWxlOiBMZWFmRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8vICAgICBkbyB7XG4gICAgLy8gICAgICAgICBlbGUgPSB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYShjdXJyRWxlbWVudCk7XG4gICAgLy8gICAgIH0gd2hpbGUgKGVsZSAmJiBlbGUuZGlzYWJsZUNsaWNrKVxuICAgIC8vICAgICByZXR1cm4gZWxlO1xuICAgIC8vIH1cblxuICAgIC8vIC8qKlxuICAgIC8vICog5Zyo5ZCM5LiA5q616JC95Lit77yM6YCS5b2S5ZCR5ZCO5a+75om+5pyA6L+R55qE5Y+v54K55Ye75YWD57SgXG4gICAgLy8gKi9cbiAgICAvLyBzdGF0aWMgZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50Rm9ySGl0KGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGxldCBlbGU6IExlYWZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgLy8gICAgIGRvIHtcbiAgICAvLyAgICAgICAgIGVsZSA9IHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgfSB3aGlsZSAoZWxlICYmIGVsZS5kaXNhYmxlQ2xpY2spXG4gICAgLy8gICAgIHJldHVybiBlbGU7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6KGM5YaF5pyA5aSn5riy5p+T5Y2V5YWD5qC86auY5bqm77yM5Li76KaB5aSE55CG57q15ZCR5ZCI5bm25Y2V5YWD5qC86Zeu6aKYXG4gICAgICogQHBhcmFtIHJvd1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFJvd01heENlbGxIZWlnaHQocm93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGxldCBtYXhIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJvdy5nZXRDaGlsZChpKS5yZWN0LmhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IHJvdy5nZXRDaGlsZChpKS5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4SGVpZ2h0O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5qCh6aqM5piv5ZCm5Li656m65YaF5a65XG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqL1xuICAgIHN0YXRpYyBjaGVja0VtcHR5Q29udGVudChlbGU6IEJyYW5jaFJlbmRlck9iamVjdCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZWxlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZW5kZXIgPSBlbGUuZ2V0Q2hpbGQoMCk7XG4gICAgICAgICAgICBpZiAoZmlyc3RSZW5kZXIgaW5zdGFuY2VvZiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDxQYXJhZ3JhcGhFbGVtZW50PihmaXJzdFJlbmRlci5lbGVtZW50KSkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5rWL6YeP6KGM5YaF57yW57uE5YWD57SgXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqL1xuICAgIHN0YXRpYyByZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihyZW5kZXI6IElubGluZUdyb3VwUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaXRlbS5yZWN0LnggPSB4O1xuICAgICAgICAgICAgaWYgKGl0ZW0ucmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBpdGVtLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCArPSBpdGVtLnJlY3Qud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpdGVtLnJlY3QueSA9IG1heEhlaWdodCAtIGl0ZW0ucmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB4O1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmFMaW5lUG9zKGNoaWxkUmVuZGVyOiBSZW5kZXJPYmplY3QsIGNoaWxkUmVuZGVyUG9zOiBQb3NpdGlvbik6IFJlY3Qge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZFJlbmRlci5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QocGFyZW50LnJlY3QpO1xuICAgICAgICByZWN0LnggPSBjaGlsZFJlbmRlclBvcy54IC0gY2hpbGRSZW5kZXIucmVjdC54O1xuICAgICAgICByZWN0LnkgPSBjaGlsZFJlbmRlclBvcy55IC0gY2hpbGRSZW5kZXIucmVjdC55O1xuICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiByZWN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyYUxpbmVQb3MocGFyZW50LCByZWN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgc3RhdGljIGdldFBhcmVudFJlbmRlclBvcyhwYXJlbnRSZW5kZXI6IFJlbmRlck9iamVjdCwgY2hpbGRSZW5kZXI6IFJlbmRlck9iamVjdCwgY2hpbGRSZW5kZXJQb3M6IFBvc2l0aW9uKTogUmVjdCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkUmVuZGVyLnBhcmVudDtcbiAgICAgICAgY29uc3QgcmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChwYXJlbnQucmVjdCk7XG4gICAgICAgIHJlY3QueCA9IGNoaWxkUmVuZGVyUG9zLnggLSBjaGlsZFJlbmRlci5yZWN0Lng7XG4gICAgICAgIHJlY3QueSA9IGNoaWxkUmVuZGVyUG9zLnkgLSBjaGlsZFJlbmRlci5yZWN0Lnk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHBhcmVudFJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRSZW5kZXJQb3MocGFyZW50UmVuZGVyLCBwYXJlbnQsIHJlY3QpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnu5jliLblhYPntKDmiYDlnKjnmoTljLrln59cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVuZGVyT2JqZWN0UmVnaW9uKHJlbmRlcjogUmVuZGVyT2JqZWN0KTogSGl0UmVnaW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlci5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVnaW9uKHJlbmRlci5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJPYmplY3RSZWdpb24ocmVuZGVyLnBhcmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5paH5qGj5YWD57Sg5omA5Zyo55qE5Yy65Z+fXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRFbGVtZW50UmVnaW9uKGVsZW1lbnQ6IEVsZW1lbnQpOiBIaXRSZWdpb24gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCByZWdpb25UYXJnZXQgPSB0aGlzLmdldEVsZW1lbnRSZWdpb25UYXJnZXQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiByZWdpb25UYXJnZXQ/LnR5cGU7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEVsZW1lbnRSZWdpb25UYXJnZXQoZWxlbWVudDogRWxlbWVudCB8IG51bGwpOiB7IHR5cGU6IEhpdFJlZ2lvbiwgdGFyZ2V0OiBCcmFuY2hFbGVtZW50IH0gfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogJ2JvZHknLCB0YXJnZXQ6IGVsZW1lbnR9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRG9jdW1lbnRGb290ZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6ICdmb290ZXInLCB0YXJnZXQ6IGVsZW1lbnR9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRG9jdW1lbnRIZWFkZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6ICdoZWFkZXInLCB0YXJnZXQ6IGVsZW1lbnR9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQ29tbXNDb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6ICdyZXZpZXcnLCB0YXJnZXQ6IGVsZW1lbnR9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZ2lvblRhcmdldChlbGVtZW50LnBhcmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5Z2Q5qCH57O757uf5YGP56e75L2N6I635Y+W5omA5Zyo55qE5paH5pys5YGP56e75L2N572uXG4gICAgICogQHBhcmFtIHRleHRSZW5kZXJcbiAgICAgKiBAcGFyYW0geFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFRleHRSZW5kZXJPZmZzZXQodGV4dFJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBlbGUgPSB0ZXh0UmVuZGVyLmVsZW1lbnQgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRleHRSZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KTtcbiAgICAgICAgaWYgKCFkb2NSZW5kZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZG9jUmVuZGVyIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZVBhaW50UmVuZGVycyA9IGVsZS5wYWludFJlbmRlcnM7Ly8uZmlsdGVyKGl0ZW0gPT4gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGl0ZW0sIERvY3VtZW50UmVuZGVyT2JqZWN0KSA9PT0gZG9jUmVuZGVyKTtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVQYWludFJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGVsZVBhaW50UmVuZGVyc1tpXSBhcyBUZXh0R3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAocmVuZGVyICE9PSB0ZXh0UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBob3JYID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhvclggKyByZW5kZXIudGV4dE1lYXN1cmVzW2pdLmFjdHVhbFNpemUgPj0geCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvclggKyBNYXRoLmZsb29yKHJlbmRlci50ZXh0TWVhc3VyZXNbal0uYWN0dWFsU2l6ZSAvIDIpID4geCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID09PSAwICYmIGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGogKyBjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBob3JYICs9IHJlbmRlci50ZXh0TWVhc3VyZXNbal0uYWN0dWFsU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ICsgcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDlvZPliY3mlofmnKzlhYPntKDnmoTlhYnmoIflgY/np7vph48nKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0SGl0UmVuZGVyT2Zmc2V0KHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRleHRHcm91cFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGV4dFJlbmRlck9mZnNldChyZW5kZXIsIHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlbmRlci5lbGVtZW50ICYmIHJlbmRlci5lbGVtZW50LnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChyZW5kZXIucmVjdC53aWR0aCAvIDIpID49IHggPyAwIDogMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRUZXh0UmVuZGVySG9yWChjdXJyUmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZE9mZnNldDogbnVtYmVyKTogeyBzdGFydFg6IG51bWJlciwgZW5kWDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCB0ZXh0RWxlID0gY3VyclJlbmRlci5lbGVtZW50IGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgIGxldCBlbmRYID0gMDtcbiAgICAgICAgbGV0IHN0YXJ0WCA9IDA7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEVsZS5wYWludFJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhaW50UmVuZGVyID0gdGV4dEVsZS5wYWludFJlbmRlcnNbaV0gYXMgVGV4dEdyb3VwUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKHBhaW50UmVuZGVyICE9PSBjdXJyUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ICsgcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aCA8IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiBlbmRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRPZmZzZXQgPT09IGNvdW50ICsgaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ICsgaiA9PT0gc3RhcnRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCA9IGVuZFg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZW5kWCArPSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXNbal0uYWN0dWFsU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtzdGFydFgsIGVuZFh9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluS4gOS4quWFg+e0oOe7k+WwvuWBj+enu+mHj1xuICAgICAqIOaWh+acrOS7peWtl+espumVv+W6pui/m+ihjOehruWumlxuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRFbGVtZW50RW5kT2Zmc2V0KGVsZTogTGVhZkVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZS50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreW9k+WJjeWBj+enu+mHj+aYr+WQpuaYr+acgOe7iOWBj+enu+mHj1xuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICovXG4gICAgc3RhdGljIGlzRWxlbWVudEVuZE9mZnNldChlbGU6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50RW5kT2Zmc2V0KGVsZSkgPT09IG9mZnNldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnm7TmjqXlrZDoioLngrnnmoTmiYDmnInmuLLmn5PlhYPntKBcbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q2hpbGRSZW5kZXJzPFQgZXh0ZW5kcyBSZW5kZXJPYmplY3Q+KGVsZTogQnJhbmNoUmVuZGVyT2JqZWN0KTogQXJyYXk8VD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8VD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goZWxlLmdldENoaWxkKGkpIGFzIFQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3ljZXlhYPmoLzlhoXmiYDmnInnmoTmrrXokL3ooYxcbiAgICAgKiBAcGFyYW0gY2VsbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENlbGxQYXJhTGluZXMoY2VsbDogVGFibGVDZWxsUmVuZGVyT2JqZWN0KTogQXJyYXk8UGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmEgPSBjZWxsLmdldENoaWxkKGkpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFyYS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gocGFyYS5nZXRDaGlsZChqKSBhcyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJhbmRvbUNvbG9yKHNlZWQ6IG51bWJlcikge1xuICAgICAgICBsZXQgbGV0dGVycyA9ICcwMTIzNDU2Nzg5QUJDREVGJztcbiAgICAgICAgbGV0IGNvbG9yID0gJyMnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgY29sb3IgKz0gbGV0dGVyc1tNYXRoLmZsb29yKHRoaXMuZ2V0U2VlZFJhbmRvbShzZWVkKSAqIDE2KV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cblxuXG4gICAgc3RhdGljIGdldFNlZWRSYW5kb20oc2VlZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihcIjAuXCIgKyBNYXRoLnNpbihzZWVkICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoKS5zdWJzdHIoNikpO1xuICAgIH1cblxuXG4gICAgc3RhdGljIGZpbmRDaGlsZFJlbmRlcihyZW5kZXI6IEJyYW5jaFJlbmRlck9iamVjdCwgcHJlZGljYXRlOiAoY2hpbGQ6IFJlbmRlck9iamVjdCkgPT4gYm9vbGVhbik6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShyZW5kZXIuZ2V0Q2hpbGQoaSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkJHkuIrmn6Xmib7nsbvlnovkuLrmlbDmja7lhYPnmoTniLbnuqdcbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RGF0YUVsZW1lbnQoZWxlOiBFbGVtZW50KTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnQoZWxlLCBpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwO1xuICAgIH1cbn1cblxuIiwiaW1wb3J0IHtJUmVuZGVyQ29udGV4dENvbnRyYWN0LCBSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0Jsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZG9jLWltcGxcIjtcbmltcG9ydCB7UmVuZGVyQ3R4fSBmcm9tIFwiLi4vLi4vLi4vY29udHJvbHMvcmVuZGVyLWNvbnRleHRcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Q29udGFpbmVyUmVuZGVyIGV4dGVuZHMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihudWxsKTtcbiAgICB9XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgbmV4dFJlbmRlcixkb2NDdHg6e3ZpZXdPcHRpb25zfX0gPSBlO1xuICAgICAgICBjb25zdCB7dmlld1NldHRpbmdzLCBkb2NQYWdlU2V0dGluZ3MsIHZpZXdCYWNrY29sb3Isc2NhbGV9ID0gdmlld09wdGlvbnM7XG4gICAgICAgIHJlbmRlci5jbGVhcigpO1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KDAsIDAsIHZpZXdTZXR0aW5ncy53aWR0aCwgdmlld1NldHRpbmdzLmhlaWdodCwgdmlld0JhY2tjb2xvcik7XG4gICAgICAgIHJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICAgICAgICBuZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIGFkZFBhZ2VzKHBhZ2VzOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4pOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChwYWdlc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBMZWFmRWxlbWVudCwgUmVjdCwgRWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlLCBQb3NpdGlvbiB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBIaXRFdmVudEluZm8sIEhpdFJlZ2lvbiB9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50LCBUZXh0R3JvdXBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcIi4vZXZlbnQtc3ViamVjdFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRTZWxlY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlID0gbmV3IFNlbGVjdGlvblN0YXRlKCk7XG4gICAgfVxuXG4gICAgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlO1xuICAgIHNuYXBzaG90U2VsZWN0aW9uU3RhdGUhOiBTZWxlY3Rpb25TdGF0ZSB8IG51bGw7XG4gICAgc2V0U2VsZWN0aW9uU3RhdGUoaGl0SW5mbzogeyBzdGFydEhpdEluZm86IEhpdEV2ZW50SW5mbywgZW5kSGl0SW5mbzogSGl0RXZlbnRJbmZvIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzdGFydEhpdEluZm8sIGVuZEhpdEluZm8gfSA9IGhpdEluZm87XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydEhpdEluZm8gPSBzdGFydEhpdEluZm87XG4gICAgICAgIGlmICghc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBzdGFydFJhbmdlLnNldFN0YXJ0KHN0YXJ0SGl0SW5mby5lbGVtZW50LCBzdGFydEhpdEluZm8ub2Zmc2V0KTtcbiAgICAgICAgaWYgKGVuZEhpdEluZm8pIHtcbiAgICAgICAgICAgIHN0YXJ0UmFuZ2Uuc2V0RW5kKGVuZEhpdEluZm8uZWxlbWVudCwgZW5kSGl0SW5mby5vZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRSYW5nZS5zZXRFbmQoc3RhcnRIaXRJbmZvLmVsZW1lbnQsIHN0YXJ0SGl0SW5mby5vZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2Uoc3RhcnRSYW5nZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiDojrflj5bpgInljLrlhbHlkIznmoTnpZblhYjmjqfku7ZcbiAgICAqL1xuICAgIHN0YXRpYyBnZXRBbmNlc3RvckNvbW1vbkNvbnRyb2woc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgZW5kQ29udHJvbDogTGVhZkVsZW1lbnQpOiBCcmFuY2hFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgc3RhcnROZXN0UGFyZW50cyA9IHRoaXMuZ2V0TmVzdFBhcmVudHMoc3RhcnRDb250cm9sLnBhcmVudCk7XG4gICAgICAgIGNvbnN0IGFuY2VzdG9yQ29tbW9uQ29udHJvbCA9IHRoaXMuZ2V0Q29tbW9uUGFyZW5ldChlbmRDb250cm9sLnBhcmVudCwgc3RhcnROZXN0UGFyZW50cyk7XG4gICAgICAgIGlmICghYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWFrOWFseeahOelluWFiOe7hOS7ticpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmNlc3RvckNvbW1vbkNvbnRyb2w7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5ZCR5LiK55qE5bWM5aWX54i257qn6IqC54K56ZuG5ZCIXG4gICAgICogQHBhcmFtIGNvbnRyb2wgXG4gICAgICogQHBhcmFtIGFycmF5IFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXROZXN0UGFyZW50cyhjb250cm9sOiBCcmFuY2hFbGVtZW50IHwgbnVsbCk6IEFycmF5PEJyYW5jaEVsZW1lbnQ+IHtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBbY29udHJvbCwgLi4udGhpcy5nZXROZXN0UGFyZW50cyhjb250cm9sLnBhcmVudCldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcblxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRDb21tb25QYXJlbmV0KGNvbnRyb2w6IEJyYW5jaEVsZW1lbnQgfCBudWxsLCBhcnJheTogQXJyYXk8QnJhbmNoRWxlbWVudD4pOiBCcmFuY2hFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFycmF5LnNvbWUoaXRlbSA9PiBpdGVtID09PSBjb250cm9sKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbW9uUGFyZW5ldChjb250cm9sPy5wYXJlbnQsIGFycmF5KTtcbiAgICB9XG5cbiAgICB1cGRhdGVTZWxlY3Rpb25TdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZVNlbGVjdGlvbkVxdWFscygpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvblN0YXRlLnJhbmdlO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybVJhbmdlKCk7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydENvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChyYW5nZS5zdGFydENvbnRyb2wpO1xuICAgICAgICBjb25zdCBlbmRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocmFuZ2UuZW5kQ29udHJvbCk7XG4gICAgICAgIGlmIChlbmRDb250cm9sSW5kZXggPCBzdGFydENvbnRyb2xJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSByYW5nZS5jbG9uZSgpO1xuICAgICAgICAgICAgY2xvbmUuc3RhcnRDb250cm9sID0gcmFuZ2UuZW5kQ29udHJvbDtcbiAgICAgICAgICAgIGNsb25lLnN0YXJ0T2Zmc2V0ID0gcmFuZ2UuZW5kT2Zmc2V0O1xuICAgICAgICAgICAgY2xvbmUuZW5kQ29udHJvbCA9IHJhbmdlLnN0YXJ0Q29udHJvbDtcbiAgICAgICAgICAgIGNsb25lLmVuZE9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgY2xvbmUuZWRpdGFibGUgPSByYW5nZS5lZGl0YWJsZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2UoY2xvbmUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZWRpdGFibGUgPSByYW5nZS5lZGl0YWJsZTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCA9IHJhbmdlLnN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydE9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHJhbmdlLnN0YXJ0Q29udHJvbCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmRDb250cm9sID0gcmFuZ2UuZW5kQ29udHJvbCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmRPZmZzZXQgPSByYW5nZS5lbmRPZmZzZXQ7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5kQ29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHJhbmdlLmVuZENvbnRyb2wpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuYW5jZXN0b3JDb21tb25Db250cm9sID0gRG9jdW1lbnRTZWxlY3Rpb24uZ2V0QW5jZXN0b3JDb21tb25Db250cm9sKHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLCB0aGlzLnNlbGVjdGlvblN0YXRlLmVuZENvbnRyb2wpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzID0gdGhpcy5nZXRFbmFibGVUcmFja0NoYW5nZXMocmFuZ2Uuc3RhcnRDb250cm9sKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN6YCJ5Yy65Yy65Z+f5YaF5piv5ZCm5pSv5oyB55WZ55eVXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEVuYWJsZVRyYWNrQ2hhbmdlcyhlbGU6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYm9keSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShlbGUsIERvY3VtZW50Qm9keUVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gYm9keT8udHJhY2tDaGFuZ2VzIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVNlbGVjdGlvbkVxdWFscygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvblN0YXRlLnJhbmdlO1xuICAgICAgICBjb25zdCBzbmFwID0gdGhpcy5zbmFwc2hvdFNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoc25hcCAmJiByYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0Q29udHJvbCA9PT0gc25hcC5zdGFydENvbnRyb2xcbiAgICAgICAgICAgICAgICAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gc25hcC5zdGFydE9mZnNldFxuICAgICAgICAgICAgICAgICYmIHJhbmdlLmVuZENvbnRyb2wgPT09IHNuYXAuZW5kQ29udHJvbFxuICAgICAgICAgICAgICAgICYmIHJhbmdlLmVuZE9mZnNldCA9PT0gc25hcC5lbmRPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi9rOaNoumAieWMuuWGheWuuVxuICAgICAqIOWkhOeQhue7k+adn+mAieWMuuWcqOW8gOWni+mAieWMuuS5i+WJjVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtUmFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGxldCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUucmFuZ2U7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCB9ID0gcmFuZ2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgIGNvbnN0IGVuZENvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChlbmRDb250cm9sKTtcbiAgICAgICAgaWYgKChlbmRDb250cm9sSW5kZXggPCBzdGFydENvbnRyb2xJbmRleCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gcmFuZ2UuY2xvbmUoKTtcbiAgICAgICAgICAgIGNsb25lLnN0YXJ0Q29udHJvbCA9IGVuZENvbnRyb2w7XG4gICAgICAgICAgICBjbG9uZS5zdGFydE9mZnNldCA9IGVuZE9mZnNldDtcbiAgICAgICAgICAgIGNsb25lLmVuZENvbnRyb2wgPSBzdGFydENvbnRyb2w7XG4gICAgICAgICAgICBjbG9uZS5lbmRPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuYWRkUmFuZ2UoY2xvbmUpO1xuICAgICAgICB9XG4gICAgICAgIHJhbmdlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5yYW5nZTtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyYW5nZSBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICByYW5nZS5jYWxjUmFuZ2UoKTtcbiAgICAgICAgaWYgKChyYW5nZS5zdGFydENvbnRyb2wgPT09IHJhbmdlLmVuZENvbnRyb2wgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgPiByYW5nZS5lbmRPZmZzZXQpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfSA9IHJhbmdlO1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPSBlbmRPZmZzZXQ7XG4gICAgICAgICAgICByYW5nZS5lbmRPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICByYW5nZS5jYWxjUmFuZ2UoKTtcbiAgICAgICAgLy/pmLLmraLlhYnmoIflrprkvY3liLDmrrXokL3nrKblj7fkuYvlkI5cbiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29udHJvbCA9PT0gcmFuZ2UuZW5kQ29udHJvbCAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gMSAmJiByYW5nZS5lbmRPZmZzZXQgPT09IDEgJiYgcmFuZ2Uuc3RhcnRDb250cm9sLnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICByYW5nZS5jYWxjUmFuZ2UoKTtcbiAgICB9XG5cbiAgICB0YWtlU25hcHNob3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc25hcHNob3RTZWxlY3Rpb25TdGF0ZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xvbmUoKTtcbiAgICB9XG5cbiAgICBjbGVhclNuYXBzaG90KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNuYXBzaG90U2VsZWN0aW9uU3RhdGUgPSBudWxsO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uU3RhdGUge1xuICAgIGdldCBzdGFydENvbnRyb2woKTogTGVhZkVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50O1xuICAgIH1cblxuICAgIHNldCBzdGFydENvbnRyb2wodmFsdWU6IExlYWZFbGVtZW50IHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9zdGFydENvbnRyb2wgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZW5kQ29udHJvbCgpOiBMZWFmRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRDb250cm9sIGFzIExlYWZFbGVtZW50O1xuICAgIH1cblxuICAgIHNldCBlbmRDb250cm9sKHZhbHVlOiBMZWFmRWxlbWVudCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZW5kQ29udHJvbCA9IHZhbHVlO1xuICAgIH1cbiAgICBvbkNoYW5nZWRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgc3RhcnRDb250cm9sSW5kZXghOiBudW1iZXI7XG4gICAgc3RhcnRPZmZzZXQhOiBudW1iZXI7XG4gICAgZW5kQ29udHJvbEluZGV4ITogbnVtYmVyO1xuICAgIGVuZE9mZnNldCE6IG51bWJlcjtcbiAgICBnZXQgY29sbGFwc2VkKCkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbEluZGV4LCBzdGFydE9mZnNldCwgZW5kQ29udHJvbEluZGV4LCBlbmRPZmZzZXQgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiAhKHN0YXJ0Q29udHJvbEluZGV4ICE9PSBlbmRDb250cm9sSW5kZXggfHwgKHN0YXJ0Q29udHJvbEluZGV4ID09PSBlbmRDb250cm9sSW5kZXggJiYgc3RhcnRPZmZzZXQgIT09IGVuZE9mZnNldCkpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zdGFydENvbnRyb2whOiBMZWFmRWxlbWVudCB8IG51bGw7XG4gICAgcHJpdmF0ZSBfZW5kQ29udHJvbCE6IExlYWZFbGVtZW50IHwgbnVsbDtcbiAgICBhbmNlc3RvckNvbW1vbkNvbnRyb2whOiBCcmFuY2hFbGVtZW50IHwgbnVsbDtcbiAgICByYW5nZSE6IFNlbGVjdGlvblJhbmdlIHwgbnVsbDtcbiAgICBzdGFydEhpdEluZm8hOiBIaXRFdmVudEluZm8gfCBudWxsO1xuICAgIHNlbGVjdGVkUmFuZ2UhOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsO1xuICAgIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICByZW5kZXJDb250YWluZXIhOiBEb2N1bWVudENvbnRhaW5lclJlbmRlcjtcbiAgICBjdXJzb3JQb3MhOiBSZWN0IHwgbnVsbDtcbiAgICAvL+W9k+WJjemAieWMuueahOS4iuS4i+aWh+aYr+WQpuaUr+aMgeeVmeeXleS/ruaUuVxuICAgIGVuYWJsZVRyYWNrQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfVxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJhbmdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGFydE9mZnNldCA9IC0xO1xuICAgICAgICB0aGlzLmVuZE9mZnNldCA9IC0xO1xuICAgICAgICB0aGlzLl9zdGFydENvbnRyb2wgPSBudWxsO1xuICAgICAgICB0aGlzLl9lbmRDb250cm9sID0gbnVsbDtcbiAgICAgICAgdGhpcy5hbmNlc3RvckNvbW1vbkNvbnRyb2wgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXJ0Q29udHJvbEluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuZW5kQ29udHJvbEluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zID0gbnVsbDtcbiAgICB9XG5cbiAgICBhZGRSYW5nZShyYW5nZTogU2VsZWN0aW9uUmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkRXZlbnQubmV4dCgpO1xuICAgIH1cbiAgICByZXNldFJhbmdlKHN0YXJ0Q29udHJvbDogRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlcik6IFNlbGVjdGlvblJhbmdlIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIHJhbmdlLnNldEVuZChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICB9XG5cbiAgICBzdXJyb3VuZChlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoZWxlLCAwKTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKGVsZSwgLTEpO1xuICAgICAgICB0aGlzLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTZWxlY3Rpb25TdGF0ZSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFNlbGVjdGlvblN0YXRlKCk7XG4gICAgICAgIGNsb25lLl9zdGFydENvbnRyb2wgPSB0aGlzLl9zdGFydENvbnRyb2w7XG4gICAgICAgIGNsb25lLnN0YXJ0T2Zmc2V0ID0gdGhpcy5zdGFydE9mZnNldDtcbiAgICAgICAgY2xvbmUuX2VuZENvbnRyb2wgPSB0aGlzLl9lbmRDb250cm9sO1xuICAgICAgICBjbG9uZS5lbmRPZmZzZXQgPSB0aGlzLmVuZE9mZnNldDtcbiAgICAgICAgY2xvbmUuYW5jZXN0b3JDb21tb25Db250cm9sID0gdGhpcy5hbmNlc3RvckNvbW1vbkNvbnRyb2w7XG4gICAgICAgIGNsb25lLnN0YXJ0Q29udHJvbEluZGV4ID0gdGhpcy5zdGFydENvbnRyb2xJbmRleDtcbiAgICAgICAgY2xvbmUuZW5kQ29udHJvbEluZGV4ID0gdGhpcy5lbmRDb250cm9sSW5kZXg7XG4gICAgICAgIGNsb25lLnNlbGVjdGVkUmFuZ2UgPSB0aGlzLnNlbGVjdGVkUmFuZ2U7XG4gICAgICAgIGNsb25lLmVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuXG59XG5cblxuXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uUmFuZ2Uge1xuICAgIHN0YXJ0Q29udHJvbCE6IEVsZW1lbnQ7XG4gICAgc3RhcnRPZmZzZXQhOiBudW1iZXI7XG4gICAgZW5kQ29udHJvbCE6IEVsZW1lbnQ7XG4gICAgZW5kT2Zmc2V0ITogbnVtYmVyO1xuICAgIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBzZXRTdGFydChjb250cm9sOiBFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0Q29udHJvbCA9IGNvbnRyb2w7XG4gICAgICAgIHRoaXMuc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICAgIHNldEVuZChjb250cm9sOiBFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmVuZENvbnRyb2wgPSBjb250cm9sO1xuICAgICAgICB0aGlzLmVuZE9mZnNldCA9IG9mZnNldDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGNTdGFydCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5zZXRJbmZvKHRoaXMuc3RhcnRDb250cm9sLCB0aGlzLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5zZXRTdGFydChyZXMuY29udHJvbCwgcmVzLm9mZnNldCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjRW5kKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNldEluZm8odGhpcy5lbmRDb250cm9sLCB0aGlzLmVuZE9mZnNldCk7XG4gICAgICAgIHRoaXMuc2V0RW5kKHJlcy5jb250cm9sLCByZXMub2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYWxjUmFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FsY1N0YXJ0KCk7XG4gICAgICAgIHRoaXMuY2FsY0VuZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5mbyhjb250cm9sOiBFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHsgY29udHJvbDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyIH0ge1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPT09IC0xID8gY29udHJvbC50ZXh0Lmxlbmd0aCA6IG9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCA9PT0gLTEgPyAxIDogb2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHsgY29udHJvbCwgb2Zmc2V0IH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPiBjb250cm9sLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign6LaF57Si5byVJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ID09PSBjb250cm9sLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY29udHJvbC5nZXRDaGlsZChvZmZzZXQgLSAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRJbmZvKGNoaWxkLCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY29udHJvbC5nZXRDaGlsZChjb250cm9sLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEluZm8oY2hpbGQsIC0xKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmdldENoaWxkKG9mZnNldCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SW5mbyhjaGlsZCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2VsZWN0aW9uUmFuZ2Uge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBjbG9uZS5zdGFydENvbnRyb2wgPSB0aGlzLnN0YXJ0Q29udHJvbDtcbiAgICAgICAgY2xvbmUuc3RhcnRPZmZzZXQgPSB0aGlzLnN0YXJ0T2Zmc2V0O1xuICAgICAgICBjbG9uZS5lbmRDb250cm9sID0gdGhpcy5lbmRDb250cm9sO1xuICAgICAgICBjbG9uZS5lbmRPZmZzZXQgPSB0aGlzLmVuZE9mZnNldDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDdXJzb3Ige1xuICAgIHN0YXRpYyBnZXRFbGVtZW50Q3Vyc29yUG9zKGVsZTogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyLCBoaXRSZWdpb246IEhpdFJlZ2lvbiB8IHVuZGVmaW5lZCwgZG9jTnVtOiBudW1iZXIpOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCByZWN0OiBSZWN0IH0ge1xuICAgICAgICBpZiAoaGl0UmVnaW9uID09PSAnYm9keScgfHwgaGl0UmVnaW9uID09PSAncmV2aWV3Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlbmRlclBvcyhlbGUsIG9mZnNldCwgZWxlLnBhaW50UmVuZGVycyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGl0UmVnaW9uID09PSAnZm9vdGVyJyB8fCBoaXRSZWdpb24gPT09ICdoZWFkZXInKSB7XG4gICAgICAgICAgICBjb25zdCBkb2NDb250YWluZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoZWxlLnBhaW50UmVuZGVyc1swXSwgRG9jdW1lbnRDb250YWluZXJSZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFkb2NDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvY0NvbnRhaW5lciBpcyBudWxsJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IGRvY0NvbnRhaW5lci5nZXRDaGlsZChkb2NOdW0pIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgY3VyckRvY1BhaW50UmVuZGVycyA9IGVsZS5wYWludFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGl0ZW0sIERvY3VtZW50UmVuZGVyT2JqZWN0KSA9PT0gZG9jUmVuZGVyKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRSZW5kZXJQb3MoZWxlLCBvZmZzZXQsIGN1cnJEb2NQYWludFJlbmRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWFg+e0oOWBj+enu+mHj+WvueW6lOeahOWFieagh+S9jee9ricpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RWxlbWVudFJlbmRlclBvcyhlbGU6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgcGFpbnRzOiBBcnJheTxSZW5kZXJPYmplY3Q+KTogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9IHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhaW50UmVuZGVyID0gcGFpbnRzW2ldIGFzIFRleHRHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgICAgICBsZXQgaG9yWCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHBhaW50UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggKyBjb3VudCA8IG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gb2Zmc2V0IHx8IChpID09PSAwICYmIGNvdW50ICsgMC41ID09PSBvZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFJlY3QocGFpbnRSZW5kZXIsIHsgeDogMCwgeTogMCB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLy/kuIrmoIfjgIHkuIvmoIfkvY3nva7lpITnkIZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbJ3N1cGVyc2NyaXB0JywgJ3N1YnNjcmlwdCddLmluZGV4T2YoZWxlLnByb3BzLnZlcnRBbGlnbikgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0IC09IGVsZS5wcm9wcy5mb250U2l6ZSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZS5wcm9wcy52ZXJ0QWxpZ24gPT09ICdzdWJzY3JpcHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSArPSByZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWN0LnggKz0gaG9yWDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiBwYWludFJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgaG9yWCArPSBwYWludFJlbmRlci50ZXh0TWVhc3VyZXNbaV0uYWN0dWFsU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYWludFJlbmRlciA9IHBhaW50c1swXTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdChwYWludFJlbmRlciwgeyB4OiAwLCB5OiAwIH0pXG4gICAgICAgICAgICBpZiAob2Zmc2V0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVjdC54ICs9IHJlY3Qud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogcGFpbnRSZW5kZXIsXG4gICAgICAgICAgICAgICAgcmVjdFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq6IO95a6a5L2N5Yiw5YWD57Sg5L2N572uJylcbiAgICB9XG59XG4iLCJpbXBvcnQge0VsZW1lbnRGYWN0b3J5LCBMZWFmRWxlbWVudCwgcmVhZEVsZW1lbnRQcm9wcywgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7Q2hlY2tCb3hQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQ8Q2hlY2tCb3hQcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignY2tiJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQ2hlY2tCb3hQcm9wcygpO1xuICAgICAgICB0aGlzLmN1cnNvclR5cGUgPSAnZGVmYXVsdCdcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudENsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShldnQpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBDaGVja0JveFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBDaGVja0JveFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB0aGlzLnByb3BzLnNpemUgKyA0O1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLnNpemU7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgY2hhbmdlU3RhdGUoZTogRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcHMuaXNDaGVja2VkID0gIXRoaXMucHJvcHMuaXNDaGVja2VkO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2tiJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IENoZWNrQm94RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENoZWNrQm94RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoZWNrQm94RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PENoZWNrQm94UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdja2InO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxDaGVja0JveFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IENoZWNrQm94RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcztcbiAgICAgICAgY29uc3QgY2tiRWxlbWVudCA9IG5ldyBDaGVja0JveEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgY2tiUHJvcHMgPSBja2JFbGVtZW50LnByb3BzO1xuICAgICAgICBja2JQcm9wcy5zaXplID0gcHJvcHM/LnNpemUgPz8gMTQ7XG4gICAgICAgIGNrYlByb3BzLmlzQ2hlY2tlZCA9IHByb3BzPy5pc0NoZWNrZWQgPz8gZmFsc2U7XG4gICAgICAgIGNrYlByb3BzLmdyb3VwTmFtZSA9IHByb3BzPy5ncm91cE5hbWUgPz8gbnVsbDtcbiAgICAgICAgcmV0dXJuIGNrYkVsZW1lbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0PENoZWNrQm94RWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3Q2hlY2tCb3goZS5wb3NpdGlvbi54ICsgMiwgZS5wb3NpdGlvbi55LCB0aGlzLmVsZW1lbnQucHJvcHMuc2l6ZSwgdGhpcy5lbGVtZW50LnByb3BzLnNpemUsIHRoaXMuZWxlbWVudC5wcm9wcy5pc0NoZWNrZWQpO1xuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDaGVja0JveFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIFBvc2l0aW9uLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgUmVjdCxcbiAgICBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0NvbW1Db250ZW50UHJvcHMsIFRleHRQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCJcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RG9jdW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuLi9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHtDb21tZW50RWxlbWVudH0gZnJvbSBcIi4vY29tbWVudC1lbGVtZW50LWltcGxcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbUNvbnRlbnRCYXNlRWxlbWVudDxQIGV4dGVuZHMgb2JqZWN0ID0geyBpZDogc3RyaW5nIH0+IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PFA+IHtcbiAgICBzdGFydE1hcmshOiBDb21tZW50RWxlbWVudDtcbiAgICBlbmRNYXJrITogQ29tbWVudEVsZW1lbnQ7XG4gICAgZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIodHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0dvdEN1cnNvcicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdMb3N0Q3Vyc29yJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1cyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0PEUgZXh0ZW5kcyBDb21tQ29udGVudEJhc2VFbGVtZW50PiBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0PEU+IHtcbiAgICBjb21tTWFya1JlbmRlciE6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHBvczogUG9zaXRpb24gfTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1Db250ZW50RWxlbWVudCBleHRlbmRzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ8Q29tbUNvbnRlbnRQcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImNvbW0tY29udGVudFwiKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBDb21tQ29udGVudFByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IENvbW1Db250ZW50UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucGFkZGluZy5sZWZ0ID0gMTQ7XG4gICAgICAgIHJlbmRlci5wYWRkaW5nLnRvcCA9IDI0O1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczogey4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+S4jeaUr+aMgScpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1Db250ZW50UmVuZGVyT2JqZWN0IGV4dGVuZHMgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0PENvbW1Db250ZW50RWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBsZXQgYm9yZGVyQ29sb3IgPSB0aGlzLmVsZW1lbnQuZm9jdXMgPyAnI2ZhOGMxNicgOiAnI2ZmZDU5MSc7XG4gICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QoZS5wb3NpdGlvbi54LCBlLnBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgYm9yZGVyQ29sb3IpO1xuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5maWxsUmVjdChlLnBvc2l0aW9uLngsIGUucG9zaXRpb24ueSwgOCwgdGhpcy5yZWN0LmhlaWdodCwgJyM4NzE0MDAnKVxuICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgLy/ojrflj5blrqHpmIXmoIforrDnmoTnu5jliLblnZDmoIdcbiAgICAgICAgbGV0IGNvbW1NYXJrUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyh0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IC1lLmRvY0N0eC52aWV3T3B0aW9ucy50cmFuc2xhdGVZXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21tTWFya0xpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyh0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwgY29tbU1hcmtQb3MpO1xuICAgICAgICBjb21tTWFya1Bvcy55ID0gY29tbU1hcmtMaW5lUG9zLnkgKyAyO1xuXG4gICAgICAgIGNvbnN0IGRvY1JlbmRlclBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyLCB7eDogMCwgeTogLWUuZG9jQ3R4LnZpZXdPcHRpb25zLnRyYW5zbGF0ZVl9KTtcbiAgICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IGNvbW1NYXJrUG9zLnggLSBkb2NSZW5kZXJQb3MueCAtIGRvY1JlbmRlci5wYWRkaW5nLmxlZnQ7XG4gICAgICAgIGNvbnN0IG1hcmdpblJpZ2h0ID0gZS5kb2NDdHgudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoIC0gbWFyZ2luTGVmdCAtIGRvY1JlbmRlci5wYWRkaW5nLnJpZ2h0ICogMjtcbiAgICAgICAgZS5yZW5kZXIub3ZlcmxheXNDb250ZXh0LmRyYXdEYXNoTGluZShbY29tbU1hcmtQb3MsIHtcbiAgICAgICAgICAgIHg6IGNvbW1NYXJrUG9zLnggKyBtYXJnaW5SaWdodCxcbiAgICAgICAgICAgIHk6IGNvbW1NYXJrUG9zLnlcbiAgICAgICAgfV0sIFsxLCAxXSwgJ3JlZCcpO1xuICAgICAgICBlLnJlbmRlci5vdmVybGF5c0NvbnRleHQuZHJhd0Rhc2hMaW5lKFt7XG4gICAgICAgICAgICB4OiBjb21tTWFya1Bvcy54ICsgbWFyZ2luUmlnaHQsXG4gICAgICAgICAgICB5OiBjb21tTWFya1Bvcy55XG4gICAgICAgIH0sIGUucG9zaXRpb25dLCBbMSwgMV0sICdyZWQnKTtcblxuICAgICAgICB0aGlzLnJlbmRlclRpdGxlKGUucmVuZGVyLCBlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZW5kZXJUaXRsZShjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9wUGFkZGluZyA9IDI0O1xuICAgICAgICBjb25zdCB7cHJvcHN9ID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IDEyO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSAn5qW35L2TJztcbiAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIGNvbnN0IGNyZWF0ZURhdGUgPSBtb21lbnQocHJvcHMuY3JlYXRlRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJylcbiAgICAgICAgY29uc3QgY29tbVRpdGxlID0gYCR7cHJvcHMuY3JlYXRlTmFtZX06JHtjcmVhdGVEYXRlfWA7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dChjb21tVGl0bGUsIHRleHRQcm9wcyk7XG4gICAgICAgIGNvbnN0IHJlY3Q6IFJlY3QgPSB7eDogcG9zaXRpb24ueCArIHRoaXMucGFkZGluZy5sZWZ0LCB5OiBwb3NpdGlvbi55LCB3aWR0aCwgaGVpZ2h0LCBtYXhIZWlnaHQ6IDAsIG1heFdpZHRoOiAwfVxuICAgICAgICByZWN0LnkgKz0gKHRvcFBhZGRpbmcgLSByZWN0LmhlaWdodCkgLyAyO1xuICAgICAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQoY29tbVRpdGxlLCB0ZXh0UHJvcHMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7XG4gICAgfVxuXG4gICAgZW5kUmVuZGVyKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICAvL3Rocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENvbW1Db250ZW50UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmUucGFkZGluZyA9IHRoaXMucGFkZGluZy5jbG9uZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tZW50UmFuZ2VTdGF0dXMge1xuICAgIHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgY29tbUNvbnRlbnQ6IENvbW1Db250ZW50QmFzZUVsZW1lbnRcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1lbnRDb250ZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PENvbW1Db250ZW50UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiY29tbS1jb250ZW50XCI7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPENvbW1Db250ZW50UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBDb21tQ29udGVudFByb3BzO1xuICAgICAgICBjb25zdCBjb21tZW50RWxlID0gbmV3IENvbW1Db250ZW50RWxlbWVudCgpO1xuICAgICAgICBjb21tZW50RWxlLnByb3BzLmlkID0gcHJvcHMuaWQ7XG4gICAgICAgIGNvbW1lbnRFbGUucHJvcHMuY3JlYXRlRGF0ZSA9IHByb3BzLmNyZWF0ZURhdGU7XG4gICAgICAgIGNvbW1lbnRFbGUucHJvcHMuY3JlYXRlSWQgPSBwcm9wcy5jcmVhdGVJZDtcbiAgICAgICAgY29tbWVudEVsZS5wcm9wcy5jcmVhdGVOYW1lID0gcHJvcHMuY3JlYXRlTmFtZTtcbiAgICAgICAgcmV0dXJuIGNvbW1lbnRFbGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtQb3NpdGlvbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4uL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQge0NvbW1Db250ZW50QmFzZUVsZW1lbnQsIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdCx9IGZyb20gXCIuL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5pbXBvcnQge0NvbW1lbnRFbGVtZW50LCBDb21tZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9jb21tZW50LWVsZW1lbnQtaW1wbFwiO1xuaW1wb3J0IHtDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdH0gZnJvbSBcIi4vY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcblxuaW50ZXJmYWNlIENvbW1NYXBQcm9wcyB7XG4gICAgY29tbU1hcmtSZW5kZXI6IENvbW1lbnRSZW5kZXJPYmplY3QsXG4gICAgY29tbU1hcmtQb3M6IFBvc2l0aW9uLFxuICAgIGNvbW1Db250ZW50UmVuZGVyOiBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3Q8YW55PixcbiAgICBjb21tQ29udGVudFBvcz86IFBvc2l0aW9uXG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50c1V0aWwge1xuICAgIHN0YXRpYyByZW1lYXN1cmVDb21tZW50cyhjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBjb21tV2luZG93OiBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCwgY29tbUNvbnRhaW5lcjogQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QsIG1hcDogQXJyYXk8eyBlbGU6IENvbW1lbnRFbGVtZW50LCByZW5kZXI6IFJlbmRlck9iamVjdCwgcG9zOiBQb3NpdGlvbiB9Pik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21tTWFwOiBBcnJheTxDb21tTWFwUHJvcHM+ID0gW107XG4gICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihjb21tV2luZG93LCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbUNvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29tbVJlbmRlciA9IGNvbW1Db250YWluZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBjb25zdCBjb21tRWxlID0gY29tbVJlbmRlci5lbGVtZW50IGFzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBtYXBDb21tID0gbWFwLmZpbmQoaXRlbSA9PiBpdGVtLmVsZS5wcm9wcy5pZCA9PT0gY29tbUVsZS5wcm9wcy5pZCk7XG4gICAgICAgICAgICBpZiAobWFwQ29tbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1NYXJrTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKG1hcENvbW0ucmVuZGVyLCBtYXBDb21tLnBvcyk7XG4gICAgICAgICAgICAgICAgbWFwQ29tbS5wb3MueSA9IGNvbW1NYXJrTGluZVBvcy55ICsgMjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1Db250ZW50UmVuZGVyID0gY29tbVJlbmRlci5jbG9uZSgpIGFzIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxhbnk+O1xuICAgICAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLnJlY3QueCA9IDA7XG4gICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXIucmVjdC55ID0gbWFwQ29tbS5wb3MueTtcbiAgICAgICAgICAgICAgICBjb21tV2luZG93LmFkZENoaWxkKGNvbW1Db250ZW50UmVuZGVyKTtcbiAgICAgICAgICAgICAgICBjb21tTWFwLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb21tTWFya1JlbmRlcjogPENvbW1lbnRSZW5kZXJPYmplY3Q+bWFwQ29tbS5yZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1NYXJrUG9zOiBtYXBDb21tLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXI6IGNvbW1Db250ZW50UmVuZGVyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1bUNvbW1lbnRIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1NYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IGNvbW1NYXBbaV07XG4gICAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyID0gY29tbU1hcFtpIC0gMV0/LmNvbW1Db250ZW50UmVuZGVyO1xuICAgICAgICAgICAgY29uc3Qge2NvbW1Db250ZW50UmVuZGVyfSA9IG1hcDtcbiAgICAgICAgICAgIHN1bUNvbW1lbnRIZWlnaHQgKz0gY29tbUNvbnRlbnRSZW5kZXIucmVjdC5oZWlnaHQgKyA1O1xuICAgICAgICAgICAgaWYgKHByZXZSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7eTogcHJldlksIGhlaWdodDogcHJldkhlaWdodH0gPSBwcmV2UmVuZGVyLnJlY3Q7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1Db250ZW50UmVuZGVyLnJlY3QueSA8IHByZXZZICsgcHJldkhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5yZWN0LnkgPSBwcmV2WSArIHByZXZIZWlnaHQgKyA1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLmNvbW1NYXJrUmVuZGVyID0ge3JlbmRlcjogbWFwLmNvbW1NYXJrUmVuZGVyLCBwb3M6IG1hcC5jb21tTWFya1Bvc307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb21tTWFwLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDb21tZW50TWFwID0gY29tbU1hcFtjb21tTWFwLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCB7Y29tbUNvbnRlbnRSZW5kZXI6IGxhc3RDb21tQ29udGVudFJlbmRlcn0gPSBsYXN0Q29tbWVudE1hcDtcbiAgICAgICAgY29uc3Qge3JlY3Q6IGxhc3RSZWN0fSA9IGxhc3RDb21tQ29udGVudFJlbmRlcjtcblxuICAgICAgICAvL+aJueazqOWGheWuuei2heWHuuaWh+aho++8jOmcgOimgemHjeaWsOaOkuW6j1xuICAgICAgICBpZiAobGFzdFJlY3QueSArIGxhc3RSZWN0LmhlaWdodCA+IGRvY1JlbmRlci5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgLy/mgLvlhoXlrrnlsI/kuo7lrrnlmajpq5jluqYs5YiZ6L+b6KGM5YCS5o6SXG4gICAgICAgICAgICAvL+WQpuWImei/m+ihjOato+aOklxuICAgICAgICAgICAgaWYgKHN1bUNvbW1lbnRIZWlnaHQgPCBkb2NSZW5kZXIucmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBsYXN0UmVjdC55ID0gZG9jUmVuZGVyLnJlY3QuaGVpZ2h0IC0gbGFzdFJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb21tTWFwLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcCA9IGNvbW1NYXBbaV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZSZW5kZXIgPSBjb21tTWFwW2kgKyAxXT8uY29tbUNvbnRlbnRSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtjb21tQ29udGVudFJlbmRlcn0gPSBtYXA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7eTogcHJldll9ID0gcHJldlJlbmRlci5yZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1Db250ZW50UmVuZGVyLnJlY3QueSArIGNvbW1Db250ZW50UmVuZGVyLnJlY3QuaGVpZ2h0ID4gcHJldlkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5yZWN0LnkgPSBwcmV2WSAtIGNvbW1Db250ZW50UmVuZGVyLnJlY3QuaGVpZ2h0IC0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5jb21tTWFya1JlbmRlciA9IHtyZW5kZXI6IG1hcC5jb21tTWFya1JlbmRlciwgcG9zOiBtYXAuY29tbU1hcmtQb3N9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG59XG4iLCJpbXBvcnQge1xuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7Q29tbVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50RWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PENvbW1Qcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignY29tbScpO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQ29tbVByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IENvbW1lbnRSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gMDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gMTQ7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50UmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxDb21tZW50RWxlbWVudD4ge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAoIWUuZG9jQ3R4LnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKHRoaXMsIHt4OiBlLnBvc2l0aW9uLngsIHk6IGUucG9zaXRpb24ueX0pO1xuICAgICAgICBjb25zdCBjb2xvciA9ICcjZmY0ZDRmJztcbiAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuZmlsbFJlY3QoZS5wb3NpdGlvbi54IC0gMSwgcGFyYUxpbmVQb3MueSwgMiwgcGFyYUxpbmVQb3MuaGVpZ2h0LCBjb2xvcilcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDb21tZW50UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1lbnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8Q29tbVByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImNvbW1cIjtcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8Q29tbVByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIENvbW1Qcm9wcztcbiAgICAgICAgZWxlLnByb3BzLmlkID0gcHJvcHMuaWQ7XG4gICAgICAgIGVsZS5wcm9wcy5tYXJrVHlwZSA9IHByb3BzLm1hcmtUeXBlO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7Vmlld09wdGlvbnMsIEVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBQb3NpdGlvbiwgUmVjdH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1RleHRQcm9wcywgVmFsaWRhdGVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtDb21tQ29udGVudEJhc2VFbGVtZW50LCBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3R9IGZyb20gXCIuL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnR9IGZyb20gXCIuLi9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnR9IGZyb20gXCIuLi90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4uL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5cbi8qKlxuICog5pWw5o2u5YWD6aqM6K+B5o+Q56S6XG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUVsZW1lbnQgZXh0ZW5kcyBDb21tQ29udGVudEJhc2VFbGVtZW50PFZhbGlkYXRlUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3ZhbGlkYXRlJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgVmFsaWRhdGVQcm9wcygpO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB8IG51bGwge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgVmFsaWRhdGVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5wYWRkaW5nLmxlZnQgPSAxNDtcbiAgICAgICAgcmVuZGVyLnBhZGRpbmcudG9wID0gMjQ7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgc2V0Q29udGVudChjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckl0ZW1zKCk7XG4gICAgICAgIGNvbnN0IHBhcmEgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgdGV4dC5wcm9wcy5mb250U2l6ZSA9IDE0O1xuICAgICAgICB0ZXh0LnByb3BzLmZvbnROYW1lID0gJ+etiee6vyc7XG4gICAgICAgIHRleHQucHJvcHMuY29sb3IgPSAnIzAwMDAwMCdcbiAgICAgICAgdGV4dC50ZXh0ID0gY29udGVudDtcbiAgICAgICAgcGFyYS5hZGRDaGlsZCh0ZXh0KTtcbiAgICAgICAgdGhpcy5hZGRDaGlsZChwYXJhKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZVJlbmRlck9iamVjdCBleHRlbmRzIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxWYWxpZGF0ZUVsZW1lbnQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgbGV0IGJvcmRlckNvbG9yID0gdGhpcy5lbGVtZW50LmZvY3VzID8gJyNmYThjMTYnIDogJyNmZmQ1OTEnO1xuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KGUucG9zaXRpb24ueCwgZS5wb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsIGJvcmRlckNvbG9yKTtcbiAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuZmlsbFJlY3QoZS5wb3NpdGlvbi54LCBlLnBvc2l0aW9uLnksIDgsIHRoaXMucmVjdC5oZWlnaHQsICcjODcxNDAwJylcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRoaXMuY29tbU1hcmtSZW5kZXIucmVuZGVyLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIC8v6I635Y+W5a6h6ZiF5qCH6K6w55qE57uY5Yi25Z2Q5qCHXG4gICAgICAgIGxldCBjb21tTWFya1BvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3ModGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAtZS5kb2NDdHgudmlld09wdGlvbnMudHJhbnNsYXRlWVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tbU1hcmtMaW5lUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyYUxpbmVQb3ModGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIGNvbW1NYXJrUG9zKTtcbiAgICAgICAgY29tbU1hcmtQb3MueSA9IGNvbW1NYXJrTGluZVBvcy55ICsgMjtcblxuICAgICAgICBjb25zdCBkb2NSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlciwge3g6IDAsIHk6IC1lLmRvY0N0eC52aWV3T3B0aW9ucy50cmFuc2xhdGVZfSk7XG4gICAgICAgIGNvbnN0IG1hcmdpbkxlZnQgPSBjb21tTWFya1Bvcy54IC0gZG9jUmVuZGVyUG9zLnggLSBkb2NSZW5kZXIucGFkZGluZy5sZWZ0O1xuICAgICAgICBjb25zdCBtYXJnaW5SaWdodCA9IGUuZG9jQ3R4LnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCAtIG1hcmdpbkxlZnQgLSBkb2NSZW5kZXIucGFkZGluZy5yaWdodCAqIDI7XG4gICAgICAgIGUucmVuZGVyLm92ZXJsYXlzQ29udGV4dC5kcmF3RGFzaExpbmUoW2NvbW1NYXJrUG9zLCB7XG4gICAgICAgICAgICB4OiBjb21tTWFya1Bvcy54ICsgbWFyZ2luUmlnaHQsXG4gICAgICAgICAgICB5OiBjb21tTWFya1Bvcy55XG4gICAgICAgIH1dLCBbMSwgMV0sICdyZWQnKTtcbiAgICAgICAgZS5yZW5kZXIub3ZlcmxheXNDb250ZXh0LmRyYXdEYXNoTGluZShbe1xuICAgICAgICAgICAgeDogY29tbU1hcmtQb3MueCArIG1hcmdpblJpZ2h0LFxuICAgICAgICAgICAgeTogY29tbU1hcmtQb3MueVxuICAgICAgICB9LCBlLnBvc2l0aW9uXSwgWzEsIDFdLCAncmVkJyk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJUaXRsZShlLnJlbmRlciwgZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmVuZGVyVGl0bGUoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvcFBhZGRpbmcgPSAyNDtcbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udFNpemUgPSAxMjtcbiAgICAgICAgdGV4dFByb3BzLmZvbnROYW1lID0gJ+alt+S9kyc7XG4gICAgICAgIHRleHRQcm9wcy5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuZWxlbWVudC5wcm9wcy50aXRsZTtcbiAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHRpdGxlLCB0ZXh0UHJvcHMpO1xuICAgICAgICBjb25zdCByZWN0OiBSZWN0ID0ge3g6IHBvc2l0aW9uLnggKyB0aGlzLnBhZGRpbmcubGVmdCwgeTogcG9zaXRpb24ueSwgd2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0OiAwLCBtYXhXaWR0aDogMH1cbiAgICAgICAgcmVjdC55ICs9ICh0b3BQYWRkaW5nIC0gcmVjdC5oZWlnaHQpIC8gMjtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHRpdGxlLCB0ZXh0UHJvcHMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVmFsaWRhdGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZS5wYWRkaW5nID0gdGhpcy5wYWRkaW5nLmNsb25lKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIFBvc2l0aW9uLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgUmVzaXplTGVhZlJlbmRlck9iamVjdCxcbiAgICBTZXJpYWxpemVQcm9wcyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRCYXJjb2RlUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRMZWFmfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQgYndpcGpzIGZyb20gXCJid2lwLWpzXCI7XG5pbXBvcnQge3dhdGNoQ2hhbmdlZH0gZnJvbSBcIi4uLy4uL25vdGlmeVwiO1xuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEJhcmNvZGUgZXh0ZW5kcyBEYXRhRWxlbWVudExlYWY8RGF0YUVsZW1lbnRCYXJjb2RlUHJvcHM+IHtcbiAgICByZXNpemVhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBwcml2YXRlIGJhckNvZGVDYW52YXMhOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw7XG4gICAgcHJpdmF0ZSBjYWNoZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1iYXJjb2RlJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlUHJvcHMoKTtcbiAgICAgICAgdGhpcy5wcm9wcy53aWR0aCA9IDEwMDtcbiAgICAgICAgdGhpcy5wcm9wcy5oZWlnaHQgPSAzMDtcbiAgICAgICAgdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgICAgICB3YXRjaENoYW5nZWQodGhpcy5wcm9wcywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYWNoZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEYXRhRWxlbWVudEJhcmNvZGVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy53aWR0aCArIDI7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuaGVpZ2h0ICsgMjtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUob3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRWxlbWVudEJhcmNvZGUoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BzLnRleHQgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dDtcbiAgICB9XG5cbiAgICBkcmF3QmFyY29kZShyZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3M6IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlQmFyY29kZUNhY2hlKCk7XG4gICAgICAgIHJlbmRlckN0eC5jb250ZW50Q29udGV4dC5jdHguZHJhd0ltYWdlKHRoaXMuYmFyQ29kZUNhbnZhcyBhcyBIVE1MQ2FudmFzRWxlbWVudCwgcG9zLngsIHBvcy55LCB0aGlzLnByb3BzLndpZHRoLCB0aGlzLnByb3BzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgY3JlYXRlQmFyY29kZUNhY2hlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuYmFyQ29kZUNhbnZhcykge1xuICAgICAgICAgICAgdGhpcy5iYXJDb2RlQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYXJDb2RlQ2FudmFzID0gYndpcGpzLnRvQ2FudmFzKHRoaXMuYmFyQ29kZUNhbnZhcywge1xuICAgICAgICAgICAgYmNpZDogdGhpcy5wcm9wcy50eXBlLCAvLyBCYXJjb2RlIHR5cGVcbiAgICAgICAgICAgIHRleHQ6IHRoaXMucHJvcHMudGV4dCB8fCBcIjAxMjM0NTY3ODlcIiwgLy8gVGV4dCB0byBlbmNvZGVcbiAgICAgICAgICAgIGhlaWdodDogMTAsIC8vIEJhciBoZWlnaHQsIGluIG1pbGxpbWV0ZXJzXG4gICAgICAgICAgICBpbmNsdWRldGV4dDogdHJ1ZSwgLy8gU2hvdyBodW1hbi1yZWFkYWJsZSB0ZXh0XG4gICAgICAgICAgICB0ZXh0eGFsaWduOiBcImNlbnRlclwiLCAvLyBBbHdheXMgZ29vZCB0byBzZXQgdGhpc1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEJhcmNvZGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYmFyY29kZUVsZSA9IHRoaXMuZWxlbWVudCBhcyBEYXRhRWxlbWVudEJhcmNvZGU7XG4gICAgICAgIGJhcmNvZGVFbGUuZHJhd0JhcmNvZGUoZS5yZW5kZXIsIGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFFbGVtZW50QmFyY29kZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoZTpJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgY29uc3Qge3JlbmRlcixwb3NpdGlvbjpwb3N9PWU7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3MueCwgcG9zLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJyMxODkwZmYnLCAwLjUpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3UmVzaXplQ2lyY2xlKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN0eE5hdGl2ZSA9IGN0eC5jb250ZW50Q29udGV4dC5jdHg7XG4gICAgICAgIGN0eE5hdGl2ZS5zYXZlKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsU3R5bGUgPSAnIzY5YzBmZic7XG4gICAgICAgIGN0eE5hdGl2ZS5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmFyYyh4LCB5LCBNYXRoLmZsb29yKDQgLyA1ICogNCksIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgY3R4TmF0aXZlLmNsb3NlUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuZmlsbCgpO1xuICAgICAgICBjdHhOYXRpdmUucmVzdG9yZSgpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRCYXJjb2RlRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERhdGFFbGVtZW50QmFyY29kZVByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZGF0YS1lbGUtYmFyY29kZSc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERhdGFFbGVtZW50QmFyY29kZVByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlKCk7XG4gICAgICAgIGVsZS5wcm9wcy53aWR0aCA9IGRhdGEucHJvcHM/LndpZHRoIHx8IDEwMDtcbiAgICAgICAgZWxlLnByb3BzLmhlaWdodCA9IGRhdGEucHJvcHM/LmhlaWdodCB8fCAzMDtcbiAgICAgICAgZWxlLnByb3BzLnR5cGUgPSBkYXRhLnByb3BzPy50eXBlIHx8ICdjb2RlMTI4JztcbiAgICAgICAgZWxlLnByb3BzLnRleHQgPSBkYXRhLnByb3BzPy50ZXh0IHx8ICcnO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRG9jTW9kZSxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIExlYWZFbGVtZW50LFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0NvbnRleHRNZW51RWxlbWVudEV2ZW50LCBFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlQ2hlY2tQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudExlYWZ9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50Q2hlY2sgZXh0ZW5kcyBEYXRhRWxlbWVudExlYWY8RGF0YUVsZUNoZWNrUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlQ2hlY2tQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWNoZWNrJyk7XG4gICAgICAgIHRoaXMuY3Vyc29yVHlwZSA9ICdkZWZhdWx0J1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVDaGVja1Byb3BzKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+KCdFbGVtZW50Q29udGV4dE1lbnUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWNvbjogJ1NldHRpbmdzJywgY2FwdGlvbjogJ+WGheWuueaOp+WItuiuvue9ricsIGV2ZW50T2JqOiB7fVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50Q2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tIYW5kbGVyKGV2dClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEYXRhRWxlbWVudENoZWNrUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMuc2l6ZSArIDQ7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuc2l6ZTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBvbkNsaWNrSGFuZGxlcihldnQ6IEVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucHJvcHMuZWRpdGFibGUgJiYgZXZ0LmN0eC52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lpoLmnpzlvZPliY3mmK/ljZXpgInmoYblubbkuJTlvZPliY3lt7Lnu4/ooqvpgInkuK3vvIzliJnkuI3kvZzlpITnkIZcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZ3JvdXBOYW1lICYmICF0aGlzLnByb3BzLm11bHRpU2VsZWN0ICYmIHRoaXMucHJvcHMuY2hlY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9ICF0aGlzLnByb3BzLmNoZWNrZWQ7XG4gICAgICAgIGNvbnN0IGRvY0N0eCA9IGV2dC5jdHg7XG4gICAgICAgIC8v5aSN6YCJ5qGG5a2Y5Zyo57uE5pe277yM5bm25LiU5Li65Y2V6YCJ5qih5byP5pe2XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmdyb3VwTmFtZSAmJiAhdGhpcy5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgY29uc3QgY2ticyA9IGRvY0N0eC5nZXRDdXJyZW50Q3R4KHRoaXMpLmdldENoZWNrQm94TGlzdCh0aGlzLnByb3BzLmdyb3VwTmFtZSk7XG4gICAgICAgICAgICBja2JzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gIT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRWYWx1ZSghdGhpcy5wcm9wcy5jaGVja2VkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEYXRhRWxlbWVudENoZWNrIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YUVsZW1lbnRDaGVjaygpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHNldFZhbHVlKHZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9IHZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRydWVWYWx1ZSA9IHZhbCA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gdHJ1ZVZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuY2hlY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hlY2tlZFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudENoZWNrUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudCkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEYXRhRWxlbWVudENoZWNrUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIERhdGFFbGVtZW50Q2hlY2s7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3Q2hlY2tCb3gocG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnksIGVsZW1lbnQucHJvcHMuc2l6ZSwgZWxlbWVudC5wcm9wcy5zaXplLCBlbGVtZW50LnByb3BzLmNoZWNrZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdSYWRpb0JveChwb3NpdGlvbi54ICsgMiwgcG9zaXRpb24ueSwgZWxlbWVudC5wcm9wcy5zaXplLCBlbGVtZW50LnByb3BzLnNpemUsIGVsZW1lbnQucHJvcHMuY2hlY2tlZCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudENoZWNrRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERhdGFFbGVDaGVja1Byb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImRhdGEtZWxlLWNoZWNrXCJcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZUNoZWNrUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlQ2hlY2tQcm9wcztcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50Q2hlY2soKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhRWxlUHJvcHMoZWxlLnByb3BzLCBwcm9wcyk7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgY3JlYXRlRGF0YUVsZVByb3BzKGRlc3Q6IERhdGFFbGVDaGVja1Byb3BzLCBwcm9wczogRGF0YUVsZUNoZWNrUHJvcHMpOiBEYXRhRWxlQ2hlY2tQcm9wcyB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVQcm9wczogRGF0YUVsZUNoZWNrUHJvcHMgPSBkZXN0O1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkRWxlQmFzZVByb3BzKGRhdGFFbGVQcm9wcywgcHJvcHMpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5pZCA9IHByb3BzLmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmNhcHRpb24gPSBwcm9wcy5jYXB0aW9uO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy50eXBlID0gcHJvcHMudHlwZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuICAgICAgICBkYXRhRWxlUHJvcHMuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5ncm91cE5hbWUgPSBwcm9wcy5ncm91cE5hbWU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5tdWx0aVNlbGVjdCA9IHByb3BzLm11bHRpU2VsZWN0ID8/IGZhbHNlO1xuICAgICAgICBkYXRhRWxlUHJvcHMuY2hlY2tlZFZhbHVlID0gcHJvcHMuY2hlY2tlZFZhbHVlO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZURhdGVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuLi8uLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50fSBmcm9tIFwiLi4vdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRCYXNlRmFjdG9yeSwgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnREYXRlIGV4dGVuZHMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDxEYXRhRWxlRGF0ZVByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1kYXRlJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZURhdGVQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50RGF0ZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERhdGFFbGVtZW50RGF0ZSB7XG4gICAgICAgIHJldHVybiBzdXBlci5jbG9uZVNlbGYoZGF0YSwgRGF0YUVsZW1lbnREYXRlKTtcbiAgICB9XG5cblxuICAgIHNldFZhbHVlKHZhbDogRGF0ZSB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLnByb3BzLmZvcm1hdCA/PyAnWVlZWS1NTS1ERCc7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodmFsLCBmb3JtYXQpO1xuICAgICAgICBpZiAoIWRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0U3RyID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PT0gZm9ybWF0U3RyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0aGlzLmNsZWFySW5uZXJJdGVtcygpO1xuICAgICAgICBjb25zdCB2YWx1ZVRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLnZhbHVlVGV4dFByb3BzLmNsb25lKHZhbHVlVGV4dC5wcm9wcyk7XG4gICAgICAgIHZhbHVlVGV4dC50ZXh0ID0gZm9ybWF0U3RyO1xuICAgICAgICB0aGlzLmFkZENoaWxkKHZhbHVlVGV4dCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgICAgICAgdGhpcy5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcylcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzID0gc3VwZXIudmFsaWRhdGUoKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLnByb3BzLmZvcm1hdCA/PyAnWVlZWS1NTS1ERCc7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQodGhpcy5nZXRWYWx1ZSgpLCBmb3JtYXQpO1xuICAgICAgICBpZiAoIWRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+aXpeacn+agvOW8j+S4jeato+ehric7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudERhdGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBEYXRhRWxlbWVudFJlbmRlck9iamVjdDxEYXRhRWxlbWVudERhdGU+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBEYXRhRWxlbWVudERhdGUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnREYXRlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50RGF0ZUZhY3RvcnkgZXh0ZW5kcyBEYXRhRWxlbWVudEJhc2VGYWN0b3J5PERhdGFFbGVEYXRlUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZGF0YS1lbGUtZGF0ZVwiXG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIERhdGFFbGVEYXRlUHJvcHM7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudERhdGUoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhRWxlUHJvcHMoZWxlLnByb3BzLCBwcm9wcyk7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgY3JlYXRlRGF0YUVsZVByb3BzKGRlc3Q6IERhdGFFbGVEYXRlUHJvcHMsIHByb3BzOiBEYXRhRWxlRGF0ZVByb3BzKTogRGF0YUVsZURhdGVQcm9wcyB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVQcm9wczogRGF0YUVsZURhdGVQcm9wcyA9IGRlc3Q7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRFbGVCYXNlUHJvcHMoZGF0YUVsZVByb3BzLCBwcm9wcyk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLm1pblZhbHVlID0gcHJvcHMubWluVmFsdWU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5tYXhWYWx1ZSA9IHByb3BzLm1heFZhbHVlO1xuICAgICAgICBkYXRhRWxlUHJvcHMuZm9ybWF0ID0gcHJvcHMuZm9ybWF0O1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dCA9IHByb3BzLm51bGxUZXh0O1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMubnVsbFRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgZGF0YUVsZVByb3BzLnZhbHVlVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy52YWx1ZVRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGRhdGFFbGVQcm9wcztcbiAgICB9XG5cblxufVxuIiwiaW1wb3J0IHtEYXRhRWxlbWVudEJhc2VGYWN0b3J5LCBJbmxpbmVHcm91cElucHV0RWxlbWVudH0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IHtJbmxpbmVHcm91cFJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMsIEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBQb3NpdGlvbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50R3JvdXBQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7Q29udGV4dE1lbnVFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50U2VyaWFsaXplfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7UGFyYWdyYXBoUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHtDb21tb25VdGlsfSBmcm9tIFwiLi4vLi4vY29tbW9uLXV0aWxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50R3JvdXBFbGVtZW50IGV4dGVuZHMgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ8RGF0YUVsZW1lbnRHcm91cFByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWdyb3VwJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZW1lbnRHcm91cFByb3BzKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+KCdFbGVtZW50Q29udGV4dE1lbnUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZ0LmN0eC52aWV3T3B0aW9ucy5kZXZNb2RlKSB7XG4gICAgICAgICAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAn6I635Y+W5pWw5o2u57uE5YC8JywgY2FwdGlvbjogJ+iOt+WPluaVsOaNrue7hOWAvCcsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyID0gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcywge2FsbDogZmFsc2V9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KHN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlbW92ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZUxlYXZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gc3VwZXIuY2xvbmVTZWxmKGRhdGEsIERhdGFFbGVtZW50R3JvdXBFbGVtZW50KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0IGV4dGVuZHMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q8RGF0YUVsZW1lbnRHcm91cEVsZW1lbnQ+IHtcbiAgICBwYWludFBvcyE6IFBvc2l0aW9uO1xuXG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWludFBvcyA9IGUucG9zaXRpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50UGFyYUdyb3VwUmVuZGVycygpOiBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0W10ge1xuICAgICAgICBjb25zdCByZW5kZXJzOiBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0W10gPSBbXTtcbiAgICAgICAgY29uc3QgY3VyclBhcmFSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGhpcywgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50LnBhaW50UmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzW2ldLCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmIChwYXJhUmVuZGVyID09PSBjdXJyUGFyYVJlbmRlcikge1xuICAgICAgICAgICAgICAgIHJlbmRlcnMucHVzaCh0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzW2ldIGFzIERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJzO1xuICAgIH1cblxuXG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGU6SVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlcixkb2NDdHg6e3ZpZXdPcHRpb25zfX09ZTtcbiAgICAgICAgY29uc3QgY2FuUGFpbnQgPSB0aGlzLmVsZW1lbnQuaXNNb3VzZWVudGVyIHx8IHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQ7XG4gICAgICAgIGlmIChjYW5QYWludCAmJiB0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzLmluZGV4T2YodGhpcykgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJQYXJhUmVuZGVycyA9IHRoaXMuZ2V0Q3VycmVudFBhcmFHcm91cFJlbmRlcnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHZlck9mZnNldCA9IDM7XG4gICAgICAgICAgICBpZiAoY3VyclBhcmFSZW5kZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRHcm91cFJlbmRlclBvcyA9IGN1cnJQYXJhUmVuZGVyc1sxXS5wYWludFBvcztcbiAgICAgICAgICAgICAgICBpZiAoc2Vjb25kR3JvdXBSZW5kZXJQb3MueCArIGN1cnJQYXJhUmVuZGVyc1sxXS5yZWN0LndpZHRoID4gdGhpcy5wYWludFBvcy54KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRQb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodFBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyclBhcmFSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlbmRlciA9IGN1cnJQYXJhUmVuZGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVuZGVyUG9zID0gZ3JvdXBSZW5kZXIucGFpbnRQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRQb2ludHMucHVzaCh7eDogZ3JvdXBSZW5kZXJQb3MueCwgeTogZ3JvdXBSZW5kZXJQb3MueSAtIHZlck9mZnNldH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRQb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogZ3JvdXBSZW5kZXJQb3MueCArIGdyb3VwUmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogZ3JvdXBSZW5kZXJQb3MueSAtIHZlck9mZnNldFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0UG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGdyb3VwUmVuZGVyUG9zLngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogZ3JvdXBSZW5kZXJQb3MueSArIGdyb3VwUmVuZGVyLnJlY3QuaGVpZ2h0ICsgdmVyT2Zmc2V0ICogMlxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodFBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBncm91cFJlbmRlclBvcy54ICsgZ3JvdXBSZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBncm91cFJlbmRlclBvcy55ICsgZ3JvdXBSZW5kZXIucmVjdC5oZWlnaHQgKyB2ZXJPZmZzZXQgKiAyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFycFBvaW50czEgPSBDb21tb25VdGlsLnJlc2hhcnBQb2ludHMocmlnaHRQb2ludHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFycFBvaW50cyA9IENvbW1vblV0aWwucmVzaGFycFBvaW50cyhbLi4ubGVmdFBvaW50cy5yZXZlcnNlKCldKTtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbLi4uc2hhcnBQb2ludHMsIC4uLnNoYXJwUG9pbnRzMSwgc2hhcnBQb2ludHNbMF1dLCAxLCB2aWV3T3B0aW9ucy5kYXRhR3JvdXBDb2xvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJQYXJhUmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJSZW4gPSBjdXJyUGFyYVJlbmRlcnNbaV07XG4gICAgICAgICAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VSZWN0KGN1cnJSZW4ucGFpbnRQb3MueCwgY3VyclJlbi5wYWludFBvcy55IC0gdmVyT2Zmc2V0LCBjdXJyUmVuLnJlY3Qud2lkdGgsIGN1cnJSZW4ucmVjdC5oZWlnaHQgKyB2ZXJPZmZzZXQgKiAyLCB2aWV3T3B0aW9ucy5kYXRhR3JvdXBDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuXG4gICAgZW5kUmVuZGVyKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuXG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRHcm91cFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRHcm91cEZhY3RvcnkgZXh0ZW5kcyBEYXRhRWxlbWVudEJhc2VGYWN0b3J5PERhdGFFbGVtZW50R3JvdXBQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkYXRhLWdyb3VwXCJcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgRGF0YUVsZW1lbnRHcm91cFByb3BzO1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgZWxlLnByb3BzLmlkID0gcHJvcHMuaWQ7XG4gICAgICAgIGVsZS5wcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbn1cblxuIiwiaW1wb3J0IHtcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIEltZ0xvYWRTdGF0dXMsXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgUG9zaXRpb24sXG4gICAgcmVhZEVsZW1lbnRQcm9wcyxcbiAgICBSZXNpemVMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlSW1hZ2VQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudExlYWZ9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LWNvbnRleHRcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50SW1hZ2UgZXh0ZW5kcyBEYXRhRWxlbWVudExlYWY8RGF0YUVsZUltYWdlUHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlSW1hZ2VQcm9wcztcbiAgICBzdGF0dXM6IEltZ0xvYWRTdGF0dXMgPSAnbm8nO1xuICAgIHJlc2l6ZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1pbWcnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlSW1hZ2VQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ21vdmUnXG4gICAgICAgIHRoaXMuZm9jdXNhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBEYXRhSW1hZ2VSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy53aWR0aCArIDI7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IHRoaXMucHJvcHMuaGVpZ2h0ICsgMjtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUob3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZGF0YS1lbGUtaW1nJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRWxlbWVudEltYWdlKCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgbG9hZEltYWdlKGN0eDogRWRpdG9yQ29udGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICdubycpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gJ2xvYWRpbmcnO1xuICAgICAgICAgICAgY29uc3Qgb25DYWxsYmFjayA9IChzdGF0dXM6IEltZ0xvYWRTdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LmltYWdlTG9hZGVyLmxvYWRJbWFnZSh0aGlzLnByb3BzLnNyYywgb25DYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoKSA9PT0gdmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wcy5zcmMgPSB2YWwgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnNyYztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhSW1hZ2VSZW5kZXJPYmplY3QgZXh0ZW5kcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb24sZG9jQ3R4fSA9IGU7XG4gICAgICAgIGNvbnN0IGRhdGFJbWdFbGVtZW50ID0gdGhpcy5lbGVtZW50IGFzIERhdGFFbGVtZW50SW1hZ2U7XG4gICAgICAgIGNvbnN0IHBpY1Byb3BzID0gZGF0YUltZ0VsZW1lbnQucHJvcHM7XG4gICAgICAgIGlmIChkYXRhSW1nRWxlbWVudC5zdGF0dXMgPT09ICdubycpIHtcbiAgICAgICAgICAgIGRhdGFJbWdFbGVtZW50LmxvYWRJbWFnZShkb2NDdHgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhSW1nRWxlbWVudC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVNvdXJjZSA9IGRvY0N0eC5pbWFnZUxvYWRlci5nZXRJbWFnZShwaWNQcm9wcy5zcmMpO1xuICAgICAgICAgICAgaWYgKCFpbWFnZVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwaWNQcm9wcy5ib3JkZXIgPT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnYmxhY2snKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2VTb3VyY2UsIDAsIDAsIGltYWdlU291cmNlLm5hdHVyYWxXaWR0aCwgaW1hZ2VTb3VyY2UubmF0dXJhbEhlaWdodCwgcG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnkgKyAyLCBwaWNQcm9wcy53aWR0aCwgcGljUHJvcHMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyLmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgICAgIGxldCB7eCwgeX0gPSBwb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMucmVjdDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IDU7XG4gICAgICAgICAgICBjb25zdCBwYWludENvbG9yID0gJyMwMDUwYjMnO1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7eDogeCArIGxpbmVXaWR0aCwgeX0sIHt4LCB5fSwge3gsIHk6IHkgKyBoZWlnaHR9LCB7XG4gICAgICAgICAgICAgICAgeDogeCArIGxpbmVXaWR0aCxcbiAgICAgICAgICAgICAgICB5OiB5ICsgaGVpZ2h0XG4gICAgICAgICAgICB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgICAgICB4ID0geCArIHdpZHRoO1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7eDogeCAtIGxpbmVXaWR0aCwgeX0sIHt4LCB5fSwge3gsIHk6IHkgKyBoZWlnaHR9LCB7XG4gICAgICAgICAgICAgICAgeDogeCAtIGxpbmVXaWR0aCxcbiAgICAgICAgICAgICAgICB5OiB5ICsgaGVpZ2h0XG4gICAgICAgICAgICB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhSW1hZ2VSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGU6SVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtyZW5kZXIscG9zaXRpb246cG9zfT1lO1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zLngsIHBvcy55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICcjMTg5MGZmJywgMC41KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd1Jlc2l6ZUNpcmNsZShjdHg6IFJlbmRlckNvbnRleHRUeXBlLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdHhOYXRpdmUgPSBjdHguY29udGVudENvbnRleHQuY3R4O1xuICAgICAgICBjdHhOYXRpdmUuc2F2ZSgpO1xuICAgICAgICBjdHhOYXRpdmUuZmlsbFN0eWxlID0gJyM2OWMwZmYnO1xuICAgICAgICBjdHhOYXRpdmUuYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5hcmMoeCwgeSwgTWF0aC5mbG9vcig0IC8gNSAqIDQpLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgIGN0eE5hdGl2ZS5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGwoKTtcbiAgICAgICAgY3R4TmF0aXZlLnJlc3RvcmUoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50SW1nRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERhdGFFbGVJbWFnZVByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZGF0YS1lbGUtaW1nJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RGF0YUVsZUltYWdlUHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlSW1hZ2VQcm9wcztcbiAgICAgICAgY29uc3QgcGljID0gbmV3IERhdGFFbGVtZW50SW1hZ2UoKTtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhwaWMucHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9waWMucHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vcGljLnByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICAvL3BpYy5wcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9waWMucHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIHBpYy5wcm9wcy53aWR0aCA9IHByb3BzLndpZHRoO1xuICAgICAgICBwaWMucHJvcHMuaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgICAgICBwaWMucHJvcHMuc3JjID0gcHJvcHMuc3JjO1xuICAgICAgICBwaWMucHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyIHx8ICdhbGwnO1xuICAgICAgICByZXR1cm4gcGljO1xuICAgIH1cbn1cbiIsImltcG9ydCB7RWxlbWVudCwgRWxlbWVudEZhY3RvcnksIHJlYWRFbGVtZW50UHJvcHMsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVMaXN0UHJvcHMsIERhdGFFbGVCYXNlVGV4dFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1JlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnR9IGZyb20gXCIuLi90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudEJhc2VGYWN0b3J5LCBEYXRhRWxlbWVudElubGluZUdyb3VwLCBEYXRhRWxlbWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRMaXN0IGV4dGVuZHMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDxEYXRhRWxlTGlzdFByb3BzPiB7XG4gICAgLy9wcm9wczogRGF0YUVsZUxpc3RQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWxpc3QnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlTGlzdFByb3BzKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YUVsZW1lbnRMaXN0UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyAmIGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRGF0YUVsZW1lbnRMaXN0IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmNsb25lU2VsZihkYXRhLCBEYXRhRWxlbWVudExpc3QpO1xuICAgIH1cblxuICAgIHNldFZhbHVlKHZhbHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmdldFZhbHVlKCkgPT09IHZhbHMuam9pbignOycpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB0aGlzLmNsZWFySW5uZXJJdGVtcygpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gdmFsc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChpdGVtID0+IGl0ZW0uY29kZSA9PT0gdmFsKTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlVGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudmFsdWVUZXh0UHJvcHMuY2xvbmUodmFsdWVUZXh0LnByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRTeW1ib2wgPSBpIDwgdmFscy5sZW5ndGggLSAxID8gJzsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUZXh0LnRleHQgPSBvcHRpb24udmFsdWUgKyBzcGxpdFN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCh2YWx1ZVRleHQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZhbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybign5b2T5YmN5LiL5ouJ5qGG5piv5Y2V6YCJ5qih5byPLOS4jeiDveS8oOWFpeWkmuS4quWAvCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWwgPSB2YWxzWzBdO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLmNvZGUgPT09IHZhbCk7XG4gICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnZhbHVlVGV4dFByb3BzLmNsb25lKHZhbHVlVGV4dC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgdmFsdWVUZXh0LnRleHQgPSBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCh2YWx1ZVRleHQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyh0aGlzKTtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNwbGl0KCc7Jyk7XG4gICAgICAgIGNvbnN0IHZhbHVlQ29kZTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlSXRlbSBvZiB2YWx1ZUl0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlSXRlbSk7XG4gICAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVDb2RlLnB1c2gob3B0aW9uLmNvZGUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlQ29kZS5wdXNoKG9wdGlvbiArICcnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZUNvZGUuam9pbignOycpXG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudExpc3RSZW5kZXJPYmplY3QgZXh0ZW5kcyBEYXRhRWxlbWVudFJlbmRlck9iamVjdDxEYXRhRWxlbWVudExpc3Q+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBEYXRhRWxlbWVudExpc3QpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRMaXN0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TGlzdEZhY3RvcnkgZXh0ZW5kcyBEYXRhRWxlbWVudEJhc2VGYWN0b3J5PERhdGFFbGVMaXN0UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZGF0YS1lbGUtbGlzdFwiXG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERhdGFFbGVMaXN0UHJvcHM+LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlTGlzdFByb3BzO1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRMaXN0KCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YUVsZVByb3BzKGVsZS5wcm9wcywgcHJvcHMpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIGNyZWF0ZURhdGFFbGVQcm9wcyhkZXN0OiBEYXRhRWxlTGlzdFByb3BzLCBwcm9wczogRGF0YUVsZUxpc3RQcm9wcyk6IERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzOiBEYXRhRWxlTGlzdFByb3BzID0gZGVzdDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhkYXRhRWxlUHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5udWxsVGV4dCA9IHByb3BzLm51bGxUZXh0O1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMubnVsbFRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgZGF0YUVsZVByb3BzLnZhbHVlVGV4dFByb3BzID0gRWxlbWVudFV0aWwucmVhZFRleHRQcm9wcyhudWxsLCBwcm9wcy52YWx1ZVRleHRQcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMgfHwgW107XG4gICAgICAgIGRhdGFFbGVQcm9wcy5tdWx0aVNlbGVjdCA9IHByb3BzLm11bHRpU2VsZWN0O1xuICAgICAgICBkYXRhRWxlUHJvcHMub3B0aW9ucyA9IFsuLi5vcHRpb25zXTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmRyb3BEb3duU3R5bGUgPSBwcm9wcy5kcm9wRG93blN0eWxlO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlQmFzZVRleHRQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuLi8uLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50fSBmcm9tIFwiLi4vdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRCYXNlRmFjdG9yeSwgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50VGV4dCBleHRlbmRzIERhdGFFbGVtZW50SW5saW5lR3JvdXA8RGF0YUVsZUJhc2VUZXh0UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLXRleHQnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlQmFzZVRleHRQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFFbGVtZW50VGV4dFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgJiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IERhdGFFbGVtZW50VGV4dCB7XG4gICAgICAgIHJldHVybiBzdXBlci5jbG9uZVNlbGYoZGF0YSwgRGF0YUVsZW1lbnRUZXh0KTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnREZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdldFZhbHVlKCkgPT09IHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGhpcy5jbGVhcklubmVySXRlbXMoKTtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMudmFsdWVUZXh0UHJvcHMuY2xvbmUodmFsdWVUZXh0LnByb3BzKTtcbiAgICAgICAgICAgIHZhbHVlVGV4dC50ZXh0ID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZCh2YWx1ZVRleHQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iZWdpbk1lYXN1cmUoKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcywge2FsbDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgZXJyb3IgPSBzdXBlci52YWxpZGF0ZSgpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG5cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudFRleHRSZW5kZXJPYmplY3QgZXh0ZW5kcyBEYXRhRWxlbWVudFJlbmRlck9iamVjdDxEYXRhRWxlbWVudFRleHQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBEYXRhRWxlbWVudFRleHQpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRUZXh0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50VGV4dEZhY3RvcnkgZXh0ZW5kcyBEYXRhRWxlbWVudEJhc2VGYWN0b3J5PERhdGFFbGVCYXNlVGV4dFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImRhdGEtZWxlLXRleHRcIlxuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlQmFzZVRleHRQcm9wcztcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50VGV4dCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZURhdGFFbGVQcm9wcyhlbGUucHJvcHMsIHByb3BzKTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG5cbiAgICBjcmVhdGVEYXRhRWxlUHJvcHMoZGVzdDogRGF0YUVsZUJhc2VUZXh0UHJvcHMsIHByb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcyk6IERhdGFFbGVCYXNlVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzOiBEYXRhRWxlQmFzZVRleHRQcm9wcyA9IGRlc3Q7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRFbGVCYXNlUHJvcHMoZGF0YUVsZVByb3BzLCBwcm9wcyk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLmlkID0gcHJvcHMuaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuY2FwdGlvbiA9IHByb3BzLmNhcHRpb247XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLnR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHQgPSBwcm9wcy5udWxsVGV4dDtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLm51bGxUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGRhdGFFbGVQcm9wcy52YWx1ZVRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMudmFsdWVUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5kYXRhVHlwZSA9IHByb3BzLmRhdGFUeXBlO1xuICAgICAgICByZXR1cm4gZGF0YUVsZVByb3BzO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtFbGVtZW50LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuXG4vKipcbiAqIOW9k+WJjeaVsOaNruWFg+WGheWuuemVv+W6puWwj+S6juacgOWwj+mVv+W6puaXtu+8jOmcgOimgeW9k+WJjeWFg+e0oOaSkeW8gOS7pei+vuWIsOacgOWwj+mVv+W6plxuICovXG5leHBvcnQgY2xhc3MgRmlsbE51bGxTcGFjZUVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudCB7XG4gICAgLy/pnIDopoHloavlhYXnmoTplb/luqZcbiAgICBsZW5ndGghOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2ZpbGwtbnVsbCcpO1xuICAgICAgICB0aGlzLmlzRGVjb3JhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICAvL3Rocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgICAgICByZXR1cm4gbmV3IEZpbGxOdWxsU3BhY2VFbGVtZW50KCk7XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QgZXh0ZW5kcyBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIobnVsbCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBGaWxsTnVsbFNwYWNlUmVuZGVyT2JqZWN0KCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxufSIsImltcG9ydCB7QmxvY2tDb250YWluZXJFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgRWxlbWVudCwgcmVhZEVsZW1lbnRQcm9wcywgRWxlbWVudEZhY3Rvcnl9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtCb2R5UGFydFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuXG4vKipcbiAqIOeUqOS6juWQiOW5tueXheeoi+W9lSzmr4/kuKpwYXJ05YyF5ZCr5q+P5Lu955eF56iL5b2VYm9keVxuICog5aSa5LiqcGFydOWkhOS6juS4gOS4qmJvZHnkuIvpnaJcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Qm9keVBhcnRFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PEJvZHlQYXJ0UHJvcHM+IHtcbiAgICAvL+aYr+WQpuiiq+S/ruaUuVxuICAgIGlzTW9kaWZ5ITogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignYm9keS1wYXJ0Jyk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZW1vdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdHb3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdMb3N0Q3Vyc29yJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQm9keVBhcnRQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBEb2N1bWVudEJvZHlQYXJ0UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERvY3VtZW50Qm9keVBhcnRSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5tYXJnaW4udG9wID0gMTA7XG4gICAgICAgIHJlbmRlci5tYXJnaW4uYm90dG9tID0gMTA7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgcGFydElkOiB0aGlzLnByb3BzLnBhcnRJZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50Qm9keVBhcnRFbGVtZW50KCk7XG4gICAgICAgIGNsb25lLnByb3BzLnBhcnRJZCA9IHRoaXMucHJvcHMucGFydElkO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRCb2R5UGFydFJlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgY29uc3QgYmdDb2xvciA9ICh0aGlzLmVsZW1lbnQuaXNGb2N1c2VkIHx8IHRoaXMuZWxlbWVudC5pc01vdXNlZW50ZXIpID8gJyNkOWQ5ZDknIDogJyNmZmZmZmYnO1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KHBvc2l0aW9uLnggLSAyLCBwb3NpdGlvbi55IC0gMiwgdGhpcy5yZWN0LndpZHRoICsgNCwgdGhpcy5yZWN0LmhlaWdodCArIDQsIGJnQ29sb3IsIDUsICdibGFjaycpO1xuICAgIH1cblxuICAgIGNsb25lKGNsb25lRGF0YSA9IHRydWUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEb2N1bWVudEJvZHlQYXJ0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmVSZW5kZXIubWFyZ2luLnRvcCA9IHRoaXMubWFyZ2luLnRvcDtcbiAgICAgICAgY2xvbmVSZW5kZXIubWFyZ2luLmJvdHRvbSA9IHRoaXMubWFyZ2luLmJvdHRvbTtcbiAgICAgICAgaWYgKGNsb25lRGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlQYXJ0RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PEJvZHlQYXJ0UHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdib2R5LXBhcnQnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxCb2R5UGFydFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQ8YW55PiB7XG4gICAgICAgIGNvbnN0IGJvZHlQYXJ0ID0gZGF0YS5wcm9wcz8ucGFydElkIHx8ICcnO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERvY3VtZW50Qm9keVBhcnRFbGVtZW50KCk7XG4gICAgICAgIGVsZW1lbnQucHJvcHMucGFydElkID0gYm9keVBhcnQ7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxufSIsImltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tIFwiLi4vLi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7IFZpZXdPcHRpb25zLCBFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgRWxlbWVudEZhY3RvcnksIHJlYWRFbGVtZW50UHJvcHMsIFJlY3QgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IERhdGFFbGVNSFByb3BzLCBUZXh0UHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgSVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudExlYWYgfSBmcm9tIFwiLi4vZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcblxuLyoqXG4gKiDmnIjnu4/lj7JcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50TUggZXh0ZW5kcyBEYXRhRWxlbWVudExlYWY8RGF0YUVsZU1IUHJvcHM+IHtcbiAgICAvL3Byb3BzITogRGF0YUVsZU1IUHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1taCcpXG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZU1IUHJvcHMoKTtcbiAgICAgICAgLy90aGlzLmFkZFByb3BWYWx1ZUNoYW5nZWRTdWIodGhpcy5wcm9wcyk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsOiBEYXRhRWxlTUhQcm9wcyB8IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB2YWwuc3BsaXQoJzsnKTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPj0gNCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1oTGF5b3V0SXRlbSA9IGdldE1ISXRlbSh0aGlzLnByb3BzLmtpbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHNbbWhMYXlvdXRJdGVtLmxlZnQucHJvcF0gPSBpdGVtc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS50b3AucHJvcF0gPSBpdGVtc1sxXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS5ib3R0b20ucHJvcF0gPSBpdGVtc1syXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzW21oTGF5b3V0SXRlbS5yaWdodC5wcm9wXSA9IGl0ZW1zWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmFnZSA9IHZhbD8uYWdlID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5kYXlzID0gdmFsPy5kYXlzID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jeWNsZXMgPSB2YWw/LmN5Y2xlcyA/PyAnJztcbiAgICAgICAgICAgIHRoaXMucHJvcHMubGFzdERhdGUgPSB2YWw/Lmxhc3REYXRlID8/ICcnO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5jbG9zZUFnZSA9IHZhbD8uY2xvc2VBZ2UgPz8gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWYWx1ZSgpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0SXRlbSA9IGdldE1ISXRlbSh0aGlzLnByb3BzLmtpbmQpO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wcm9wc1tsYXlvdXRJdGVtLmxlZnQucHJvcF19OyR7dGhpcy5wcm9wc1tsYXlvdXRJdGVtLnRvcC5wcm9wXX07JHt0aGlzLnByb3BzW2xheW91dEl0ZW0uYm90dG9tLnByb3BdfTske3RoaXMucHJvcHNbbGF5b3V0SXRlbS5yaWdodC5wcm9wXX1gO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdDxFbGVtZW50PiB8IG51bGwge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRGF0YVJlbmRlck1IKHRoaXMpO1xuICAgICAgICBjb25zdCBtZWFzdXJlID0gcmVuZGVyTUgodGhpcywgcmVuZGVyQ3R4LCB7IHg6IDAsIHk6IDAgfSwgZmFsc2UpO1xuICAgICAgICBpZiAobWVhc3VyZSkge1xuICAgICAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSBtZWFzdXJlLndpZHRoO1xuICAgICAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gbWVhc3VyZS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERhdGFFbGVtZW50TUgoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShlbGVtZW50LnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudExheW91dEl0ZW0oKTogTUhMYXlvdXRUeXBlIHtcbiAgICAgICAgcmV0dXJuIGdldE1ISXRlbSh0aGlzLnByb3BzLmtpbmQpO1xuICAgIH1cblxufVxuXG50eXBlIE1ITGF5b3V0VHlwZSA9IHtcbiAgICBba2V5IGluICdsZWZ0JyB8ICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nXToge1xuICAgICAgICB0aXA6ICfliJ3mva7lubTpvoQnIHwgJ+ihjOe7j+acn+WkqeaVsCcgfCAn5pyr5qyh5pyI57uP5pe26Ze0JyB8ICfmnIjnu4/lkajmnJ/lpKnmlbAnIHwgJ+mXree7j+W5tOm+hCcsXG4gICAgICAgIHByb3A6ICdhZ2UnIHwgJ2RheXMnIHwgJ2N5Y2xlcycgfCAnbGFzdERhdGUnIHwgJ2Nsb3NlQWdlJ1xuICAgIH1cbn1cblxuY29uc3QgbWhMYXlvdXRJdGVtczogQXJyYXk8TUhMYXlvdXRUeXBlPiA9IFtcbiAgICB7XG4gICAgICAgIGxlZnQ6IHsgdGlwOiAn5Yid5r2u5bm06b6EJywgcHJvcDogJ2FnZScgfSxcbiAgICAgICAgdG9wOiB7IHRpcDogJ+ihjOe7j+acn+WkqeaVsCcsIHByb3A6ICdkYXlzJyB9LFxuICAgICAgICByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sXG4gICAgICAgIGJvdHRvbTogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIGxlZnQ6IHsgdGlwOiAn5Yid5r2u5bm06b6EJywgcHJvcDogJ2FnZScgfSxcbiAgICAgICAgdG9wOiB7IHRpcDogJ+mXree7j+W5tOm+hCcsIHByb3A6ICdjbG9zZUFnZScgfSxcbiAgICAgICAgcmlnaHQ6IHsgdGlwOiAn5pyr5qyh5pyI57uP5pe26Ze0JywgcHJvcDogJ2xhc3REYXRlJyB9LFxuICAgICAgICBib3R0b206IHsgdGlwOiAn6KGM57uP5pyf5aSp5pWwJywgcHJvcDogJ2RheXMnIH1cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbGVmdDogeyB0aXA6ICfpl63nu4/lubTpvoQnLCBwcm9wOiAnY2xvc2VBZ2UnIH0sXG4gICAgICAgIHRvcDogeyB0aXA6ICfooYznu4/mnJ/lpKnmlbAnLCBwcm9wOiAnZGF5cycgfSxcbiAgICAgICAgcmlnaHQ6IHsgdGlwOiAn5pyr5qyh5pyI57uP5pe26Ze0JywgcHJvcDogJ2xhc3REYXRlJyB9LFxuICAgICAgICBib3R0b206IHsgdGlwOiAn5pyI57uP5ZGo5pyf5aSp5pWwJywgcHJvcDogJ2N5Y2xlcycgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBsZWZ0OiB7IHRpcDogJ+WInea9ruW5tOm+hCcsIHByb3A6ICdhZ2UnIH0sXG4gICAgICAgIHRvcDogeyB0aXA6ICfmnIjnu4/lkajmnJ/lpKnmlbAnLCBwcm9wOiAnY3ljbGVzJyB9LFxuICAgICAgICByaWdodDogeyB0aXA6ICfmnKvmrKHmnIjnu4/ml7bpl7QnLCBwcm9wOiAnbGFzdERhdGUnIH0sXG4gICAgICAgIGJvdHRvbTogeyB0aXA6ICfooYznu4/mnJ/lpKnmlbAnLCBwcm9wOiAnZGF5cycgfVxuICAgIH0sXG4gICAge1xuICAgICAgICBsZWZ0OiB7IHRpcDogJ+WInea9ruW5tOm+hCcsIHByb3A6ICdhZ2UnIH0sXG4gICAgICAgIHRvcDogeyB0aXA6ICfpl63nu4/lubTpvoQnLCBwcm9wOiAnY2xvc2VBZ2UnIH0sXG4gICAgICAgIHJpZ2h0OiB7IHRpcDogJ+acq+asoeaciOe7j+aXtumXtCcsIHByb3A6ICdsYXN0RGF0ZScgfSxcbiAgICAgICAgYm90dG9tOiB7IHRpcDogJ+aciOe7j+WRqOacn+WkqeaVsCcsIHByb3A6ICdjeWNsZXMnIH1cbiAgICB9XG5dXG5cblxuZnVuY3Rpb24gZ2V0TUhJdGVtKGtpbmQ6IHN0cmluZyk6IE1ITGF5b3V0VHlwZSB7XG4gICAga2luZCA9IGtpbmQgPz8gJ0EnO1xuICAgIGtpbmQgPSBraW5kLnRvVXBwZXJDYXNlKCk7XG4gICAgbGV0IGtpbmRJbmRleCA9IFsnQScsICdCJywgJ0MnLCAnRCcsICdFJ10uaW5kZXhPZihraW5kKTtcbiAgICBraW5kSW5kZXggPSBraW5kSW5kZXggPCAwID8gMCA6IGtpbmRJbmRleDtcbiAgICByZXR1cm4gbWhMYXlvdXRJdGVtc1traW5kSW5kZXhdO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YVJlbmRlck1IIGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxEYXRhRWxlbWVudE1IPiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIHJlbmRlck1IKHRoaXMuZWxlbWVudCwgZS5yZW5kZXIsIGUucG9zaXRpb24sIHRydWUpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdDxFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFSZW5kZXJNSCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudE1IRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PERhdGFFbGVNSFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZGF0YS1lbGUtbWgnXG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERhdGFFbGVNSFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnRNSCgpO1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkRWxlQmFzZVByb3BzKGVsZS5wcm9wcywgZGF0YS5wcm9wcyBhcyBEYXRhRWxlTUhQcm9wcyk7XG4gICAgICAgIGVsZS5wcm9wcy5hZ2UgPSBkYXRhLnByb3BzPy5hZ2UgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5jeWNsZXMgPSBkYXRhLnByb3BzPy5jeWNsZXMgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5kYXlzID0gZGF0YS5wcm9wcz8uZGF5cyA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmxhc3REYXRlID0gZGF0YS5wcm9wcz8ubGFzdERhdGUgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5jbG9zZUFnZSA9IGRhdGEucHJvcHM/LmNsb3NlQWdlID8/ICcnO1xuICAgICAgICBlbGUucHJvcHMua2luZCA9IGRhdGEucHJvcHM/LmtpbmQgPz8gJ0EnO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxufVxuXG5mdW5jdGlvbiByZW5kZXJNSChlbGVtZW50OiBEYXRhRWxlbWVudE1ILCBjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSwgaXNQYWludDogYm9vbGVhbik6IHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfSB8IHZvaWQge1xuICAgIGxldCB7IHgsIHkgfSA9IHBvc2l0aW9uO1xuICAgIGNvbnN0IGRlZmF1bHRUZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKClcbiAgICBjb25zdCBwYWRkaW5nVmVyID0gMjtcbiAgICBjb25zdCBwYWRkaW5nSG9yID0gNTtcbiAgICBkZWZhdWx0VGV4dFByb3BzLmZvbnRTaXplID0gMTI7XG4gICAgZGVmYXVsdFRleHRQcm9wcy5mb250TmFtZSA9ICfku7/lrosnO1xuICAgIGRlZmF1bHRUZXh0UHJvcHMuY29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICBjb25zdCBjdXJyZW50TGF5b3V0ID0gZ2V0TUhJdGVtKGVsZW1lbnQucHJvcHMua2luZCk7XG4gICAgY29uc3QgbGVmdCA9IENvbW1vblV0aWwuZ2V0RW1wdHlWYWx1ZShlbGVtZW50LnByb3BzW2N1cnJlbnRMYXlvdXQubGVmdC5wcm9wXSwgY3VycmVudExheW91dC5sZWZ0LnRpcCk7XG4gICAgY29uc3QgdG9wID0gQ29tbW9uVXRpbC5nZXRFbXB0eVZhbHVlKGVsZW1lbnQucHJvcHNbY3VycmVudExheW91dC50b3AucHJvcF0sIGN1cnJlbnRMYXlvdXQudG9wLnRpcCk7XG4gICAgY29uc3QgYm90dG9tID0gQ29tbW9uVXRpbC5nZXRFbXB0eVZhbHVlKGVsZW1lbnQucHJvcHNbY3VycmVudExheW91dC5ib3R0b20ucHJvcF0sIGN1cnJlbnRMYXlvdXQuYm90dG9tLnRpcCk7XG4gICAgY29uc3QgcmlnaHQgPSBDb21tb25VdGlsLmdldEVtcHR5VmFsdWUoZWxlbWVudC5wcm9wc1tjdXJyZW50TGF5b3V0LnJpZ2h0LnByb3BdLCBjdXJyZW50TGF5b3V0LnJpZ2h0LnRpcCk7XG4gICAgY29uc3QgbGVmdFJlY3QgPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQobGVmdCwgZGVmYXVsdFRleHRQcm9wcylcbiAgICBjb25zdCB0b3BSZWN0ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KHRvcCwgZGVmYXVsdFRleHRQcm9wcylcbiAgICBjb25zdCBib3R0b21SZWN0ID0gY3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0KGJvdHRvbSwgZGVmYXVsdFRleHRQcm9wcylcbiAgICBjb25zdCByaWdodFJlY3QgPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQocmlnaHQsIGRlZmF1bHRUZXh0UHJvcHMpXG4gICAgbGV0IGhlaWdodCA9IHRvcFJlY3QuaGVpZ2h0ICsgYm90dG9tUmVjdC5oZWlnaHQ7XG4gICAgY29uc3QgbWlkZGxlV2lkdGggPSBNYXRoLm1heCh0b3BSZWN0LndpZHRoLCBib3R0b21SZWN0LndpZHRoKVxuICAgIGxldCB3aWR0aCA9IGxlZnRSZWN0LndpZHRoICsgbWlkZGxlV2lkdGggKyByaWdodFJlY3Qud2lkdGg7XG4gICAgaWYgKCFpc1BhaW50KSB7XG4gICAgICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCArIHBhZGRpbmdIb3IgKiAyLCBoZWlnaHQ6IGhlaWdodCArIHBhZGRpbmdWZXIgKiAyIH1cbiAgICB9XG4gICAgeCArPSBwYWRkaW5nSG9yO1xuICAgIHkgKz0gcGFkZGluZ1ZlcjtcbiAgICAvL+W5tOm+hFxuICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dChsZWZ0LCBkZWZhdWx0VGV4dFByb3BzLCB4LCB5ICsgKGhlaWdodCAtIGxlZnRSZWN0LmhlaWdodCkgLyAyLCBsZWZ0UmVjdC53aWR0aCwgbGVmdFJlY3QuaGVpZ2h0KVxuICAgIHggKz0gbGVmdFJlY3Qud2lkdGg7XG4gICAgLy/lpKnmlbBcbiAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQodG9wLCBkZWZhdWx0VGV4dFByb3BzLCB4ICsgKG1pZGRsZVdpZHRoIC0gdG9wUmVjdC53aWR0aCkgLyAyLCB5IC0gMiwgdG9wUmVjdC53aWR0aCwgdG9wUmVjdC5oZWlnaHQpO1xuICAgIC8v5YiG5Ymy57q/XG4gICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdIb3JpTGluZSh4LCB5ICsgdG9wUmVjdC5oZWlnaHQsIG1pZGRsZVdpZHRoKVxuICAgIC8v5ZGo5pyfXG4gICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KGJvdHRvbSwgZGVmYXVsdFRleHRQcm9wcywgeCArIChtaWRkbGVXaWR0aCAtIGJvdHRvbVJlY3Qud2lkdGgpIC8gMiwgeSArIHRvcFJlY3QuaGVpZ2h0ICsgMiwgYm90dG9tUmVjdC53aWR0aCwgYm90dG9tUmVjdC5oZWlnaHQpO1xuICAgIC8v5pyr5qyh5pe26Ze0XG4gICAgeCArPSBtaWRkbGVXaWR0aDtcbiAgICBjdHguY29udGVudENvbnRleHQuZHJhd1RleHQocmlnaHQsIGRlZmF1bHRUZXh0UHJvcHMsIHgsIHkgKyAoaGVpZ2h0IC0gbGVmdFJlY3QuaGVpZ2h0KSAvIDIsIHJpZ2h0UmVjdC53aWR0aCwgcmlnaHRSZWN0LmhlaWdodClcblxuICAgIGlmIChjdHguZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICBsZXQgeyB4LCB5IH0gPSBwb3NpdGlvbjtcbiAgICAgICAgd2lkdGggPSB3aWR0aCArIHBhZGRpbmdIb3IgKiAyO1xuICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKyBwYWRkaW5nVmVyICogMjtcbiAgICAgICAgLy9jb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMucmVjdDtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoID0gMztcbiAgICAgICAgY29uc3QgcGFpbnRDb2xvciA9ICcjMDA1MGIzJztcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHggKyBsaW5lV2lkdGgsIHkgfSwgeyB4LCB5IH0sIHsgeCwgeTogeSArIGhlaWdodCB9LCB7XG4gICAgICAgICAgICB4OiB4ICsgbGluZVdpZHRoLFxuICAgICAgICAgICAgeTogeSArIGhlaWdodFxuICAgICAgICB9XSwgMSwgcGFpbnRDb2xvcik7XG4gICAgICAgIHggPSB4ICsgd2lkdGg7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiB4IC0gbGluZVdpZHRoLCB5IH0sIHsgeCwgeSB9LCB7IHgsIHk6IHkgKyBoZWlnaHQgfSwge1xuICAgICAgICAgICAgeDogeCAtIGxpbmVXaWR0aCxcbiAgICAgICAgICAgIHk6IHkgKyBoZWlnaHRcbiAgICAgICAgfV0sIDEsIHBhaW50Q29sb3IpO1xuICAgIH1cbn1cblxuXG4iLCJpbXBvcnQge1xuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgSW1nTG9hZFN0YXR1cyxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBQb3NpdGlvbixcbiAgICBSZXNpemVMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtQaWN0dXJlUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LWNvbnRleHRcIjtcblxuXG5pbnRlcmZhY2UgSVJlc2l6ZUVsZW1lbnQge1xuICAgIHJlc2l6ZWFibGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBQaWN0dXJlRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PFBpY3R1cmVQcm9wcz4gaW1wbGVtZW50cyBJUmVzaXplRWxlbWVudCB7XG4gICAgLy9wcm9wczogUGljdHVyZVByb3BzO1xuICAgIHN0YXR1czogSW1nTG9hZFN0YXR1cyA9ICdubyc7XG4gICAgcmVzaXplYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2ltZycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFBpY3R1cmVQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ21vdmUnXG4gICAgICAgIHRoaXMuZm9jdXNhYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogTGVhZlJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBQaWN0dXJlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMud2lkdGggKyAyO1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLmhlaWdodCArIDI7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2ltZycsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMob3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUGljdHVyZUVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBsb2FkSW1hZ2UoY3R4OiBFZGl0b3JDb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAnbG9hZGluZyc7XG4gICAgICAgICAgICAvL3RoaXMuaW1hZ2VTb3VyY2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIC8vdGhpcy5pbWFnZVNvdXJjZS5zcmMgPSB0aGlzLnByb3BzLnNyYztcbiAgICAgICAgICAgIC8vIGNvbnN0IG9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlzTG9hZCA9ICdjb21wbGV0ZWQnO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMucmVmcmVzaFZpZXcoJ2FwcGVhcmFuY2UnKTtcbiAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgICAvLyBjb25zdCBvbmVycm9yID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMuaXNMb2FkID0gJ2Vycm9yJztcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICAgIGNvbnN0IG9uQ2FsbGJhY2sgPSAoc3RhdHVzOiBJbWdMb2FkU3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5pbWFnZUxvYWRlci5sb2FkSW1hZ2UodGhpcy5wcm9wcy5zcmMsIG9uQ2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpY3R1cmVSZW5kZXJPYmplY3QgZXh0ZW5kcyBSZXNpemVMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb24sZG9jQ3R4fSA9IGU7XG4gICAgICAgIGNvbnN0IHBpY0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQgYXMgUGljdHVyZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBpY1Byb3BzID0gcGljRWxlbWVudC5wcm9wcztcbiAgICAgICAgaWYgKHBpY0VsZW1lbnQuc3RhdHVzID09PSAnbm8nKSB7XG4gICAgICAgICAgICBwaWNFbGVtZW50LmxvYWRJbWFnZShkb2NDdHgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwaWNFbGVtZW50LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlU291cmNlID0gZG9jQ3R4LmltYWdlTG9hZGVyLmdldEltYWdlKHBpY1Byb3BzLnNyYyk7XG4gICAgICAgICAgICBpZiAoIWltYWdlU291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBpY1Byb3BzLmJvcmRlciA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICdibGFjaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdJbWFnZShpbWFnZVNvdXJjZSwgMCwgMCwgaW1hZ2VTb3VyY2UubmF0dXJhbFdpZHRoLCBpbWFnZVNvdXJjZS5uYXR1cmFsSGVpZ2h0LCBwb3NpdGlvbi54ICsgMiwgcG9zaXRpb24ueSArIDIsIHBpY1Byb3BzLndpZHRoLCBwaWNQcm9wcy5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUGljdHVyZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoZTpPbWl0PElSZW5kZXJEYXRhLCBcIm5leHRSZW5kZXJcIj4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtyZW5kZXIscG9zaXRpb246cG9zfT1lO1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zLngsIHBvcy55LCB3aWR0aCwgaGVpZ2h0LCAnIzE4OTBmZicsIDAuNSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHBvcy55ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSArIChNYXRoLmZsb29yKGhlaWdodCAvIDIpKSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSArIChNYXRoLmZsb29yKGhlaWdodCAvIDIpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdSZXNpemVDaXJjbGUoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3R4TmF0aXZlID0gY3R4LmNvbnRlbnRDb250ZXh0LmN0eDtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGxTdHlsZSA9ICcjNjljMGZmJztcbiAgICAgICAgY3R4TmF0aXZlLmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuYXJjKHgsIHksIE1hdGguZmxvb3IoNCAvIDUgKiA0KSwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICBjdHhOYXRpdmUuY2xvc2VQYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsKCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBQaWN0dXJlRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFBpY3R1cmVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2ltZyc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIFBpY3R1cmVQcm9wcztcbiAgICAgICAgY29uc3QgcGljID0gbmV3IFBpY3R1cmVFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHBpY1Byb3BzID0gcGljLnByb3BzO1xuICAgICAgICBwaWNQcm9wcy53aWR0aCA9IHByb3BzLndpZHRoO1xuICAgICAgICBwaWNQcm9wcy5oZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgICAgIHBpY1Byb3BzLnNyYyA9IHByb3BzLnNyYztcbiAgICAgICAgcGljUHJvcHMuYm9yZGVyID0gcHJvcHMuYm9yZGVyIHx8ICdhbGwnO1xuICAgICAgICBwaWNQcm9wcy50aXRsZSA9IHByb3BzLnRpdGxlO1xuICAgICAgICBwaWMucHJvcHMgPSBwaWNQcm9wcztcbiAgICAgICAgcmV0dXJuIHBpYztcbiAgICB9XG59XG4iLCJpbXBvcnQge0VsZW1lbnRGYWN0b3J5LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtSYWRpb0JveFByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0JveEVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxSYWRpb0JveFByb3BzPiB7XG4gICAgLy9wcm9wczogUmFkaW9Cb3hQcm9wcztcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3JkJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgUmFkaW9Cb3hQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ2RlZmF1bHQnXG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmFkaW9Cb3hSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgUmFkaW9Cb3hSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy5zaXplICsgNDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5zaXplO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIGNoYW5nZVN0YXRlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFJhZGlvQm94RWxlbWVudCAmJiBjaGlsZCAhPT0gdGhpcykge1xuICAgICAgICAgICAgICAgIGNoaWxkLnByb3BzLmlzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvcHMuaXNDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3JkJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmFkaW9Cb3hFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUmFkaW9Cb3hFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFkaW9Cb3hGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8UmFkaW9Cb3hQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3JkJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJhZGlvQm94RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHJkRWxlbWVudCA9IG5ldyBSYWRpb0JveEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIFJhZGlvQm94UHJvcHM7XG4gICAgICAgIGNvbnN0IGNrYlByb3BzID0gcmRFbGVtZW50LnByb3BzO1xuICAgICAgICBja2JQcm9wcy5zaXplID0gcHJvcHMuc2l6ZSA/PyAxNDtcbiAgICAgICAgY2tiUHJvcHMuaXNDaGVja2VkID0gcHJvcHMuaXNDaGVja2VkO1xuICAgICAgICByZEVsZW1lbnQucHJvcHMgPSBja2JQcm9wcztcbiAgICAgICAgcmV0dXJuIHJkRWxlbWVudDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYWRpb0JveFJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8UmFkaW9Cb3hFbGVtZW50PiB7XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdSYWRpb0JveChwb3NpdGlvbi54ICsgMiwgcG9zaXRpb24ueSwgdGhpcy5lbGVtZW50LnByb3BzLnNpemUsIHRoaXMuZWxlbWVudC5wcm9wcy5zaXplLCB0aGlzLmVsZW1lbnQucHJvcHMuaXNDaGVja2VkKTtcbiAgICB9XG5cbiAgICBjbG9uZShjbG9uZURhdGEgPSB0cnVlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUmFkaW9Cb3hSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge0VsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBMZWFmRWxlbWVudCwgU2VyaWFsaXplUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge1RleHRQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcblxuZXhwb3J0IGNsYXNzIEJyZWFrRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50IHtcbiAgICB0ZXh0UHJvcHM6IFRleHRQcm9wcztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignYnInKTtcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmZvbnRTaXplID0gMTQ7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmZvbnROYW1lID0gJ+Wui+S9kyc7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmNvbG9yID0gJyM1OTU5NTknO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gbmV3IEJyZWFrUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICBzeW1ib2wucmVjdC5oZWlnaHQgPSAxNDtcbiAgICAgICAgc3ltYm9sLnJlY3Qud2lkdGggPSA3O1xuICAgICAgICByZXR1cm4gc3ltYm9sO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnYnInLFxuICAgICAgICAgICAgcHJvcHM6IHt9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQnJlYWtFbGVtZW50KCk7XG4gICAgICAgIC8vY2xvbmUucmVuZGVyQ3R4ID0gdGhpcy5yZW5kZXJDdHg7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIEJyZWFrUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxCcmVha0VsZW1lbnQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgaWYgKHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ByaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3VGV4dCgn4oaTJywgdGhpcy5lbGVtZW50LnRleHRQcm9wcywgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgMjAsIHRoaXMucmVjdC5oZWlnaHQpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBCcmVha1JlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICByZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJyZWFrRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdicic7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IEJyZWFrRWxlbWVudCgpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxufVxuXG4iLCJleHBvcnQgaW50ZXJmYWNlIENvbHVtblBhcnRPZmZzZXQgZXh0ZW5kcyBDb2x1bW5QYXJ0IHtcbiAgICBvZmZzZXQ6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtblBhcnQge1xuICAgIGluZGV4OiBudW1iZXIsXG4gICAgd2lkdGg6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtblBhdGNoIHtcbiAgICB0eXBlOiAnbW9kaWZ5JyB8ICdpbnNlcnQnLFxuICAgIGRhdGE6IENvbHVtblBhcnRcbn1cblxuZXhwb3J0IGNsYXNzIENvbHVtblBhdGNoVXRpbCB7XG4gICAgc3RhdGljIGdldFBhdGNoUGFja3MoY29sczogQXJyYXk8Q29sdW1uUGFydD4sIHNwbGl0Q29sczogQXJyYXk8Q29sdW1uUGFydD4pOiBbQXJyYXk8eyBwYXJ0OiBDb2x1bW5QYXJ0T2Zmc2V0LCBwYXRjaHM6IEFycmF5PENvbHVtblBhdGNoPiB9PiwgQXJyYXk8QXJyYXk8Q29sdW1uUGFydD4+XSB7XG4gICAgICAgIGNvbnN0IG9sZExpbmVQb2ludE1hcCA9IHRoaXMuZ2V0TGluZVBvaW50TWFwKGNvbHMpO1xuICAgICAgICAvL+imgeWIhuWJsueahOWIl+WdkOagh1xuICAgICAgICBjb25zdCBuZXdMaW5lUG9pbnRNYXAgPSB0aGlzLmdldExpbmVQb2ludE1hcChzcGxpdENvbHMpO1xuICAgICAgICBjb25zdCByZXNBcnJheTogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IGFsbFBvaW50TWFwID0gb2xkTGluZVBvaW50TWFwLmNvbmNhdChuZXdMaW5lUG9pbnRNYXApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFBvaW50TWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gYWxsUG9pbnRNYXBbaV07XG4gICAgICAgICAgICByZXNBcnJheS5hZGQocGFydC5vZmZzZXQpO1xuICAgICAgICAgICAgcmVzQXJyYXkuYWRkKHBhcnQub2Zmc2V0ICsgcGFydC53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnRzID0gQXJyYXkuZnJvbShyZXNBcnJheSkuc29ydCgoZmlyc3QsIHNlY29uZCkgPT4gZmlyc3QgLSBzZWNvbmQpO1xuICAgICAgICBjb25zdCBwYXRjaHM6IEFycmF5PHsgcGFydDogQ29sdW1uUGFydE9mZnNldCwgcGF0Y2hzOiBBcnJheTxDb2x1bW5QYXRjaD4gfT4gPSBbXTtcbiAgICAgICAgLy/ojrflj5blhbbku5booYznmoTmi4bliIbooaXkuIFcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0U3RhcnRPZmZzZXQgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBwYXJ0RW5kT2Zmc2V0ID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGpvaW5QYXJ0ID0gb2xkTGluZVBvaW50TWFwLmZpbmQoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBpdGVtLm9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRPZmZzZXQgPSBpdGVtLm9mZnNldCArIGl0ZW0ud2lkdGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0ID49IHBhcnRTdGFydE9mZnNldCAmJiBzdGFydE9mZnNldCA8IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIChlbmRPZmZzZXQgPiBwYXJ0U3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0IDw9IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIChzdGFydE9mZnNldCA8PSBwYXJ0U3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0ID49IHBhcnRFbmRPZmZzZXQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoam9pblBhcnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoam9pblBhcnQub2Zmc2V0ID09PSBwYXJ0U3RhcnRPZmZzZXQgJiYgam9pblBhcnQub2Zmc2V0ICsgam9pblBhcnQud2lkdGggPT09IHBhcnRFbmRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoID0gcGF0Y2hzLmZpbmQoaXRlbSA9PiBpdGVtLnBhcnQgPT09IGpvaW5QYXJ0KTtcbiAgICAgICAgICAgICAgICBpZiAocGF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2gucGF0Y2hzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2luc2VydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7d2lkdGg6IHBhcnRFbmRPZmZzZXQgLSBwYXJ0U3RhcnRPZmZzZXQsIGluZGV4OiBqb2luUGFydC5pbmRleH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0OiBqb2luUGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbW9kaWZ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7d2lkdGg6IHBhcnRFbmRPZmZzZXQgLSBwYXJ0U3RhcnRPZmZzZXQsIGluZGV4OiBqb2luUGFydC5pbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v6I635Y+W5b2T5YmN6KGM55qE5ouG5YiG6KGl5LiBXG4gICAgICAgIGNvbnN0IGN1cnJSb3dQYXRoczogQXJyYXk8QXJyYXk8Q29sdW1uUGFydD4+ID0gW107XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbk1hcCA9IHRoaXMuZ2V0TGluZVBvaW50TWFwKHRoaXMuZ2V0Q29sdW1uKHBvaW50cykpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld0xpbmVQb2ludE1hcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0YXJ0T2Zmc2V0ID0gbmV3TGluZVBvaW50TWFwW2ldLm9mZnNldDtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRFbmRPZmZzZXQgPSBuZXdMaW5lUG9pbnRNYXBbaV0ub2Zmc2V0ICsgbmV3TGluZVBvaW50TWFwW2ldLndpZHRoO1xuICAgICAgICAgICAgY29uc3Qgam9pblBhcnRzID0gYWxsQ29sdW1uTWFwLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE9mZnNldCA9IGl0ZW0ub2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mZnNldCA9IGl0ZW0ub2Zmc2V0ICsgaXRlbS53aWR0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAoc3RhcnRPZmZzZXQgPj0gcGFydFN0YXJ0T2Zmc2V0ICYmIHN0YXJ0T2Zmc2V0IDwgcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGVuZE9mZnNldCA+IHBhcnRTdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPD0gcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0T2Zmc2V0IDw9IHBhcnRTdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPj0gcGFydEVuZE9mZnNldClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN1cnJSb3dQYXRocy5wdXNoKGpvaW5QYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtwYXRjaHMsIGN1cnJSb3dQYXRoc107XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDb2x1bW4ocG9pbnRzOiBBcnJheTxudW1iZXI+KTogQXJyYXk8Q29sdW1uUGFydD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8Q29sdW1uUGFydD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvaW50cy5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtpbmRleCwgd2lkdGg6IHBvaW50c1tpbmRleCArIDFdIC0gcG9pbnRzW2luZGV4XX0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTcGxpdENvbHMod2lkdGg6IG51bWJlciwgY29sczogbnVtYmVyKTogQXJyYXk8Q29sdW1uUGFydD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8Q29sdW1uUGFydD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe3dpZHRoOiBNYXRoLmZsb29yKHdpZHRoIC8gY29scyksIGluZGV4OiBpfSk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ud2lkdGggKz0gd2lkdGggLSBpdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLndpZHRoLCAwKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldExpbmVQb2ludE1hcChoTWVyZ2VDb2xzOiBBcnJheTxDb2x1bW5QYXJ0Pik6IEFycmF5PENvbHVtblBhcnRPZmZzZXQ+IHtcbiAgICAgICAgY29uc3QgbGluZVBvaW50TWFwOiBBcnJheTxDb2x1bW5QYXJ0T2Zmc2V0PiA9IFtdO1xuICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaE1lcmdlQ29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29sID0gaE1lcmdlQ29sc1tpXTtcbiAgICAgICAgICAgIGxpbmVQb2ludE1hcC5wdXNoKHtpbmRleDogY29sLmluZGV4LCB3aWR0aDogY29sLndpZHRoLCBvZmZzZXQ6IHh9KTtcbiAgICAgICAgICAgIHggKz0gY29sLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lUG9pbnRNYXA7XG4gICAgfVxufSIsImltcG9ydCB7U2VsZWN0aW9uU3RhdGV9IGZyb20gXCIuLi8uLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7VGFibGVDZWxsRWxlbWVudH0gZnJvbSBcIi4vdGFibGUtY2VsbC1pbXBsXCI7XG5pbXBvcnQge1RhYmxlRWxlbWVudH0gZnJvbSBcIi4vdGFibGUtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZVJvd0VsZW1lbnR9IGZyb20gXCIuL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQge0NvbHVtblBhcnQsIENvbHVtblBhcnRPZmZzZXQsIENvbHVtblBhdGNoLCBDb2x1bW5QYXRjaFV0aWx9IGZyb20gXCIuL3RhYmxlLXNwbGl0LWNlbGwtcGF0Y2hcIjtcbmltcG9ydCB7VGFibGVVdGlsfSBmcm9tIFwiLi90YWJsZS11dGlsXCI7XG5cbi8qKlxuICog5ouG5YiG5Y2V5YWD5qC8XG4gKiDonIDpgZPpmr7vvIzpmr7kuo7kuIrpnZLlpKnvvJvmi4bliIbljZXlhYPmoLzvvIzlpLTlj5Hnp4PvvIznsr7npZ7oobDvvIznnLznnZvmmI/vvIzouqvkvZPlup/jgIJcbiAqXG4gKiAxLuaLhuWIhuS4uuWkmuWIl+inhOWIme+8muS4jeW9seWTjeWFtuS7luWIl+WuveW6pu+8jOWwhuW9k+WJjeWIl+WuveW6puWdh+WIhlxuICovXG5leHBvcnQgY2xhc3MgVGFibGVTcGxpdENlbGwge1xuICAgIC8qKlxuICAgICAqXG4gICAgICog5pmu6YCa5Y2V5YWD5qC85Y+v5Lul5Lu75oSP5ouG5YiG6KGM5ZKM5YiXXG4gICAgICog5bey5ZCI5bm255qE5Y2V5YWD5qC877yM5Y+v5Lul5ouG5YiG5Lu75oSP5pWw6YeP55qE5YiX77yb5Y+v5Lul5ouG5YiG55qE5pWw6YeP5b+F6aG75Li65ZCI5bm25Y2V5YWD5qC85pWw6YeP55qE57qm5pWwXG4gICAgICovXG4gICAgc3RhdGljIHNwbGl0Q2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb2N1c0NlbGwucHJvcHMuaE1lcmdlICYmICFmb2N1c0NlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNwbGl0Tm9ybWFsQ2VsbChzcywgcm93cywgY29scyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNwbGl0TWVyZ2VDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlIGlmICghZm9jdXNDZWxsLmNlbGxQcm9wcy5oTWVyZ2UpIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHsgZW5kQ29sSW5kZXggfSA9IHRoaXMuaG9yU3BsaXRIb3JOb3JtYWxDZWxsKHNzLCByb3dzLCBjb2xzKTtcbiAgICAgICAgLy8gICAgIHRoaXMudmVyU3BsaXRWZXJNZXJnZUNlbGwoc3MsIHJvd3MsIGVuZENvbEluZGV4KTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyAvL+W9k+WJjeWNleWFg+agvOS4uuaoquWQkeWQiOW5tuWNleWFg+agvFxuICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHsgZW5kQ29sSW5kZXggfSA9IHRoaXMuaG9yU3BsaXRIb3JNZXJnZUNlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICAvLyAgICAgdGhpcy52ZXJTcGxpdFZlck1lcmdlQ2VsbChzcywgcm93cywgZW5kQ29sSW5kZXgpO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmi4bliIbmma7pgJrnmoTljZXlhYPmoLxcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBzcGxpdE5vcm1hbENlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHZvaWQge1xuICAgICAgICByb3dzID0gcm93cyA8IDEgPyAxIDogcm93cztcbiAgICAgICAgY29scyA9IGNvbHMgPCAxID8gMSA6IGNvbHM7XG4gICAgICAgIGlmIChyb3dzID09PSAxICYmIGNvbHMgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNDZWxsLCBUYWJsZVJvd0VsZW1lbnQpO1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c1JvdywgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwgfHwgIWZvY3VzUm93IHx8ICF0Yikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgfCBmb2N1c1JvdyB8IHRiIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGxJbmRleCA9IGZvY3VzUm93LmdldENoaWxkSW5kZXgoZm9jdXNDZWxsKTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3dJbmRleCA9IGZvY3VzUm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRiLmdldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgIGlmIChmb2N1c0NlbGwucHJvcHMuaE1lcmdlIHx8IGZvY3VzQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+aLhuWIhuS4uuWkmuWIl1xuICAgICAgICBpZiAoY29scyA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0Q2VsbFdpZHRocyA9IHRoaXMuZ2V0U3BsaXRDb2xzKGNlbGxXaWR0aCwgY29scyk7XG4gICAgICAgICAgICB0Yi5zZXRDZWxsV2lkdGgoZm9jdXNDZWxsSW5kZXgsIHNwbGl0Q2VsbFdpZHRoc1swXS53aWR0aCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNwbGl0Q2VsbFdpZHRocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRiLmluc2VydENvbChmb2N1c0NlbGxJbmRleCArIGksIHNwbGl0Q2VsbFdpZHRoc1tpXS53aWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8v6I635Y+W5Li75Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgY29uc3QgbWFzdGVyQ2VsbCA9IHJvdy5nZXRDaGlsZChmb2N1c0NlbGxJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGNvbHM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gbmV3IFRhYmxlQ2VsbEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcm93LmFkZENoaWxkKG5ld0NlbGwsIGZvY3VzQ2VsbEluZGV4ICsgaik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgZm9jdXNSb3dJbmRleCB8fCBpID4gZm9jdXNSb3dJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/nlLHmma7pgJrljZXlhYPmoLzovazlkJHlkIjlubbljZXlhYPmoLxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSA9ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwucHJvcHMuaE1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocm93cyA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gVGFibGVSb3dFbGVtZW50LmNyZWF0ZVJvdyh0Yi5nZXRDb2xzQ291bnQoKSk7XG4gICAgICAgICAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBmb2N1c1Jvd0luZGV4ICsgaSlcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5ld1Jvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gbmV3Um93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGopO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXN0ZXJDZWxsID0gZm9jdXNSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oailcbiAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBmb2N1c0NlbGxJbmRleCB8fCBqID4gZm9jdXNDZWxsSW5kZXggKyBjb2xzIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v57Sn5oyo5LiK57qn55qE5Y2V5YWD5qC85a2Y5Zyo5qiq5ZCR5ZCI5bm2XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc3RlckNlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDZWxsLnByb3BzLnZNZXJnZSA9ICdyZXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzdGVyQ2VsbC5wcm9wcy52TWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ2VsbC5wcm9wcy52TWVyZ2UgPSAncmVzdGFydCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSAnY29udGludWUnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRiLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ouG5YiG5ZCI5bm255qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHJvd3NcbiAgICAgKiBAcGFyYW0gY29sc1xuICAgICAqL1xuICAgIHN0YXRpYyBzcGxpdE1lcmdlQ2VsbChzczogU2VsZWN0aW9uU3RhdGUsIHJvd3M6IG51bWJlciwgY29sczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHJvd3MgPSByb3dzIDwgMSA/IDEgOiByb3dzO1xuICAgICAgICBjb2xzID0gY29scyA8IDEgPyAxIDogY29scztcbiAgICAgICAgaWYgKHJvd3MgPT09IDEgJiYgY29scyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c1JvdyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c0NlbGwsIFRhYmxlUm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzUm93LCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWZvY3VzQ2VsbCB8fCAhZm9jdXNSb3cgfHwgIXRiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZvY3VzQ2VsbCB8IGZvY3VzUm93IHwgdGIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzQ2VsbEluZGV4ID0gZm9jdXNSb3cuZ2V0Q2hpbGRJbmRleChmb2N1c0NlbGwpO1xuICAgICAgICBjb25zdCBmb2N1c1Jvd0luZGV4ID0gZm9jdXNSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY2VsbFdpZHRoID0gdGIuZ2V0Q2VsbFdpZHRoKGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwucHJvcHMuaE1lcmdlICYmICFmb2N1c0NlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VSb3dzID0gdGhpcy5nZXRWTWVyZ2VSb3dzQ291bnQodGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgbWVyZ2VDb2xzID0gdGhpcy5nZXRITWVyZ2VDb2xzQ291bnQodGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgLy/lj6rmnInmi4bliIbnmoTooYzmlbDpnIDopoHmu6HotrPmraTmnaHku7ZcbiAgICAgICAgaWYgKG1lcmdlUm93cyA+IDEgJiYgcm93cyA+IDEpIHtcbiAgICAgICAgICAgIGlmIChyb3dzICUgbWVyZ2VSb3dzICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDlvZPliY3lkIjlubbnmoTooYzmlbDkuLo6JHttZXJnZVJvd3N9LOW9k+WJjeWPr+aLhuWIhueahOihjOaVsOaYryR7bWVyZ2VSb3dzfeeahOe6puaVsGApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/mi4bliIbnmoTooYzmlbDjgIHliJfmlbDnrYnkuo7lkIjlubbnmoTooYzmlbDjgIHliJfmlbBcbiAgICAgICAgLy/miafooYzov5jljp9cbiAgICAgICAgaWYgKG1lcmdlQ29scyA9PT0gY29scyAmJiBtZXJnZVJvd3MgPT09IHJvd3MpIHtcbiAgICAgICAgICAgIFRhYmxlVXRpbC5yZXN0b3JlQ2VsbChzcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWVyZ2VDb2xzID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCB7ZW5kQ29sSW5kZXh9ID0gdGhpcy5ob3JTcGxpdEhvck5vcm1hbENlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgdGhpcy52ZXJTcGxpdFZlck1lcmdlQ2VsbChzcywgcm93cywgZW5kQ29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIC8v5b2T5YmN5Y2V5YWD5qC85Li65qiq5ZCR5ZCI5bm25Y2V5YWD5qC8XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge2VuZENvbEluZGV4fSA9IHRoaXMuaG9yU3BsaXRIb3JNZXJnZUNlbGwoc3MsIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgdGhpcy52ZXJTcGxpdFZlck1lcmdlQ2VsbChzcywgcm93cywgZW5kQ29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ouG5YiG5qiq5ZCR5q2j5bi455qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHJvd3NcbiAgICAgKiBAcGFyYW0gY29sc1xuICAgICAqL1xuICAgIHN0YXRpYyBob3JTcGxpdEhvck5vcm1hbENlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHsgc3RhcnRDb2xJbmRleDogbnVtYmVyLCBlbmRDb2xJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNDZWxsLCBUYWJsZVJvd0VsZW1lbnQpO1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c1JvdywgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwgfHwgIWZvY3VzUm93IHx8ICF0Yikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgfCBmb2N1c1JvdyB8IHRiIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGxJbmRleCA9IGZvY3VzUm93LmdldENoaWxkSW5kZXgoZm9jdXNDZWxsKTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3dJbmRleCA9IGZvY3VzUm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRiLmdldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCk7XG4gICAgICAgIGNvbnN0IHNwbGl0Q2VsbFdpZHRocyA9IHRoaXMuZ2V0U3BsaXRDb2xzKGNlbGxXaWR0aCwgY29scyk7XG4gICAgICAgIHRiLnNldENlbGxXaWR0aChmb2N1c0NlbGxJbmRleCwgc3BsaXRDZWxsV2lkdGhzWzBdLndpZHRoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzcGxpdENlbGxXaWR0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRiLmluc2VydENvbChmb2N1c0NlbGxJbmRleCArIGksIHNwbGl0Q2VsbFdpZHRoc1tpXS53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VSb3dzID0gdGhpcy5nZXRWTWVyZ2VSb3dzQ291bnQodGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4KTtcbiAgICAgICAgcm93cyA9IHJvd3MgPCBtZXJnZVJvd3MgPyBtZXJnZVJvd3MgOiByb3dzO1xuICAgICAgICAvL+WQkeaMh+WumueahOWIl+aPkuWFpeaLhuWIhuWNleWFg+agvFxuICAgICAgICBpZiAoY29scyA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8v6I635Y+W5Li75Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgY29uc3QgbWFzdGVyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoZm9jdXNDZWxsSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VsbCA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSb3cuYWRkQ2hpbGQobmV3Q2VsbCwgZm9jdXNDZWxsSW5kZXggKyBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBmb2N1c1Jvd0luZGV4IHx8IGkgPj0gZm9jdXNSb3dJbmRleCArIHJvd3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v55Sx5pmu6YCa5Y2V5YWD5qC86L2s5ZCR5ZCI5bm25Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc3RlckNlbGwucHJvcHMuaE1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ2VsbC5wcm9wcy5oTWVyZ2UgPSAncmVzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLnZNZXJnZSA9IG1hc3RlckNlbGwucHJvcHMudk1lcmdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5Zyo6YCJ5Lit6KGM5LiL5o+S5YWl5ouG5YiG6KGMXG4gICAgICAgIC8v5aaC5p6c5b2T5YmN5piv5pmu6YCa5Y2V5YWD5qC8XG4gICAgICAgIGlmICghZm9jdXNDZWxsLnByb3BzLnZNZXJnZSkge1xuICAgICAgICAgICAgZGVidWdnZXJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gVGFibGVSb3dFbGVtZW50LmNyZWF0ZVJvdyh0Yi5nZXRDb2xzQ291bnQoKSk7XG4gICAgICAgICAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBmb2N1c1Jvd0luZGV4ICsgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGIucHViT25DaGFuZ2UoJ3RvLWNoaWxkJyk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydENvbEluZGV4OiBmb2N1c0NlbGxJbmRleCxcbiAgICAgICAgICAgIGVuZENvbEluZGV4OiBmb2N1c0NlbGxJbmRleCArIGNvbHMgLSAxXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmqKrlkJHmi4bliIblkIjlubbnmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gcm93c1xuICAgICAqIEBwYXJhbSBjb2xzXG4gICAgICovXG4gICAgc3RhdGljIGhvclNwbGl0SG9yTWVyZ2VDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSwgcm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiB7IHN0YXJ0Q29sSW5kZXg6IG51bWJlciwgZW5kQ29sSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93ID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGZvY3VzQ2VsbCwgVGFibGVSb3dFbGVtZW50KTtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNSb3csIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIGlmICghZm9jdXNDZWxsIHx8ICFmb2N1c1JvdyB8fCAhdGIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9jdXNDZWxsIHwgZm9jdXNSb3cgfCB0YiBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNDZWxsSW5kZXggPSBmb2N1c1Jvdy5nZXRDaGlsZEluZGV4KGZvY3VzQ2VsbCk7XG4gICAgICAgIGNvbnN0IGZvY3VzUm93SW5kZXggPSBmb2N1c1Jvdy5nZXRJbmRleCgpO1xuICAgICAgICBjb25zdCBoTWVyZ2VDb2xzID0gdGhpcy5nZXRITWVyZ2VDb2xzKHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NlbGxJbmRleCwgY29scyk7XG4gICAgICAgIGNvbnN0IGNvbHNXaWR0aCA9IGhNZXJnZUNvbHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgMClcbiAgICAgICAgY29uc3Qgc3BsaXRDb2xzID0gdGhpcy5nZXRTcGxpdENvbHMoY29sc1dpZHRoLCBjb2xzKTtcbiAgICAgICAgY29uc3QgW290aGVyUGFja3MsIGN1cnJQYWNrc10gPSBDb2x1bW5QYXRjaFV0aWwuZ2V0UGF0Y2hQYWNrcyhoTWVyZ2VDb2xzLCBzcGxpdENvbHMpO1xuICAgICAgICB0aGlzLmFwcGx5SG9yU3BsaXRDb2x1bW5QYXRjaFBhY2tzKHRiLCBmb2N1c1Jvd0luZGV4LCAxLCBvdGhlclBhY2tzKTtcbiAgICAgICAgdGhpcy5hcHBseUhvclNwbGl0Q29sdW1uQ3VyclBhdGNoUGFja3ModGIsIGZvY3VzUm93SW5kZXgsIGZvY3VzQ2VsbEluZGV4LCByb3dzLCBjdXJyUGFja3MpO1xuICAgICAgICB0Yi5wdWJPbkNoYW5nZSgndG8tY2hpbGQnKTtcbiAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0Q29sSW5kZXg6IGZvY3VzQ2VsbEluZGV4LFxuICAgICAgICAgICAgZW5kQ29sSW5kZXg6IHRoaXMuZ2V0UHJlcGFyZU5ld0NvbENvdW50cyhvdGhlclBhY2tzLCBoTWVyZ2VDb2xzKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6ZyA6KaB5paw5Yib5bu655qE5YiX5pWw6YePXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UHJlcGFyZU5ld0NvbENvdW50cyhwYWNrczogQXJyYXk8eyBwYXJ0OiBDb2x1bW5QYXJ0T2Zmc2V0LCBwYXRjaHM6IEFycmF5PENvbHVtblBhdGNoPiB9PiwgaE1lcmdlQ29sczogQXJyYXk8Q29sdW1uUGFydD4pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBsYXN0Q29sSW5kZXggPSBoTWVyZ2VDb2xzW2hNZXJnZUNvbHMubGVuZ3RoIC0gMV0uaW5kZXg7XG4gICAgICAgIGlmIChwYWNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Q29sSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdENvbFBhY2sgPSBwYWNrcy5maW5kKHBhY2sgPT4gcGFjay5wYXJ0LmluZGV4ID09PSBsYXN0Q29sSW5kZXgpO1xuICAgICAgICBpZiAoIWxhc3RDb2xQYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdENvbEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0Q29sSW5kZXggKyBsYXN0Q29sUGFjay5wYXRjaHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnaW5zZXJ0JykubGVuZ3RoXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bqU55So5qiq5ZCR5ouG5YiG5Y2V5YWD5qC86KGl5LiBXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlIb3JTcGxpdENvbHVtblBhdGNoUGFja3ModGI6IFRhYmxlRWxlbWVudCwgZm9jdXNSb3dJbmRleDogbnVtYmVyLCBzcGxpdFJvd3M6IG51bWJlciwgcGFja3M6IEFycmF5PHsgcGFydDogQ29sdW1uUGFydE9mZnNldCwgcGF0Y2hzOiBBcnJheTxDb2x1bW5QYXRjaD4gfT4pOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhY2tzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBwYWNrID0gcGFja3NbaV07XG4gICAgICAgICAgICBjb25zdCBjb2xJbmRleCA9IHBhY2sucGFydC5pbmRleDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBwYWNrLnBhdGNocy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGNoID0gcGFjay5wYXRjaHNbal07XG4gICAgICAgICAgICAgICAgaWYgKHBhdGNoLnR5cGUgPT09ICdtb2RpZnknKSB7XG4gICAgICAgICAgICAgICAgICAgIHRiLnNldENlbGxXaWR0aChjb2xJbmRleCwgcGF0Y2guZGF0YS53aWR0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXRjaC50eXBlID09PSAnaW5zZXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICB0Yi5pbnNlcnRDb2woY29sSW5kZXggKyAxLCBwYXRjaC5kYXRhLndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgLy/lkJHmjIflrprnmoTliJfmj5LlhaXmi4bliIbljZXlhYPmoLxcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6I635Y+W5Li75Y2V5YWD5qC8XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXN0ZXJDZWxsID0gY3VyclJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyclJvdy5hZGRDaGlsZChuZXdDZWxsLCBjb2xJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXN0ZXJDZWxsLnByb3BzLmhNZXJnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNlbGwucHJvcHMuaE1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5wcm9wcy5oTWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5a2Y5Zyo5qiq5ZCR5ZCI5bm255qE5Y2V5YWD5qC877yM6L+b6KGM5Y2V5YWD5qC85YiG5ouG77yM5omT6KGl5LiBXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIGZvY3VzUm93SW5kZXhcbiAgICAgKiBAcGFyYW0gZm9jdXNDb2xJbmV4XG4gICAgICogQHBhcmFtIHNwbGl0Um93c1xuICAgICAqIEBwYXJhbSBwYWNrc1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGFwcGx5SG9yU3BsaXRDb2x1bW5DdXJyUGF0Y2hQYWNrcyh0YjogVGFibGVFbGVtZW50LCBmb2N1c1Jvd0luZGV4OiBudW1iZXIsIGZvY3VzQ29sSW5leDogbnVtYmVyLCBzcGxpdFJvd3M6IG51bWJlciwgcGFja3M6IEFycmF5PEFycmF5PENvbHVtblBhcnQ+Pik6IHZvaWQge1xuICAgICAgICAvL+iOt+WPluW9k+WJjeWIl+eahOWQiOW5tuihjOaVsFxuICAgICAgICBsZXQgdk1lcmdlUm93cyA9IHRoaXMuZ2V0Vk1lcmdlUm93c0NvdW50KHRiLCBmb2N1c1Jvd0luZGV4LCBmb2N1c0NvbEluZXgpO1xuICAgICAgICB2TWVyZ2VSb3dzID0gdk1lcmdlUm93cyA9PT0gMSA/IDAgOiB2TWVyZ2VSb3dzO1xuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHRiLmdldENoaWxkKGZvY3VzUm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgZW5kUm93ID0gdGIuZ2V0Q2hpbGQoZm9jdXNSb3dJbmRleCArIHZNZXJnZVJvd3MgLSAxKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlQ29scyA9IHBhY2tzW2ldO1xuICAgICAgICAgICAgaWYgKG1lcmdlQ29scy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBzdGFydFJvdy5nZXRDaGlsZChmb2N1c0NvbEluZXggKyBtZXJnZUNvbHNbMF0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kQ2VsbCA9IGVuZFJvdy5nZXRDaGlsZChmb2N1c0NvbEluZXggKyBtZXJnZUNvbHNbMF0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgVGFibGVVdGlsLmNvbWJpbmVDZWxscyh0Yiwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBtZXJnZUNvbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgY2VsbCA9IGZvY3VzUm93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1tqXS5pbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAvLyAgICAgY2VsbC5jZWxsUHJvcHMuaE1lcmdlID0gaiA9PT0gMCA/ICdyZXN0YXJ0JyA6ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHN0YXJ0Um93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1swXS5pbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRDZWxsID0gZW5kUm93LmdldENoaWxkKGZvY3VzQ29sSW5leCArIG1lcmdlQ29sc1ttZXJnZUNvbHMubGVuZ3RoIC0gMV0uaW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgVGFibGVVdGlsLmNvbWJpbmVDZWxscyh0Yiwgc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog57q15ZCR5ouG5YiG5ZCI5bm255qE5Y2V5YWD5qC8XG4gICAgICog5Zyo5oyH5a6a6KGM5LiL5o+S5YWl5aSN5Yi26KGMXG4gICAgICog5a2Y5ZyoXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgdmVyU3BsaXRWZXJNZXJnZUNlbGwoc3M6IFNlbGVjdGlvblN0YXRlLCByb3dzOiBudW1iZXIsIGVuZENvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvd3MgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZm9jdXNDZWxsLCBUYWJsZVJvd0VsZW1lbnQpO1xuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShmb2N1c1JvdywgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmb2N1c0NlbGwgfHwgIWZvY3VzUm93IHx8ICF0Yikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb2N1c0NlbGwgfCBmb2N1c1JvdyB8IHRiIGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c0NlbGxJbmRleCA9IGZvY3VzUm93LmdldENoaWxkSW5kZXgoZm9jdXNDZWxsKTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3dJbmRleCA9IGZvY3VzUm93LmdldEluZGV4KCk7XG4gICAgICAgIGxldCBtZXJnZVJvd3MgPSAwO1xuICAgICAgICBpZiAoZm9jdXNDZWxsLnByb3BzLnZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICBtZXJnZVJvd3MgPSB0aGlzLmdldFZNZXJnZVJvd3NDb3VudCh0YiwgZm9jdXNSb3dJbmRleCwgZm9jdXNDZWxsSW5kZXgpO1xuICAgICAgICAgICAgaWYgKG1lcmdlUm93cyAlIHJvd3MgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWPr+aLhuWIhueahOihjOaVsOW/hemhu+aYryR7bWVyZ2VSb3dzfeeahOe6puaVsGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5LiN5a2Y5Zyo5ZCI5bm26KGM77yM5YiZ5ZCR5LiL5paw5aKe6KGMXG4gICAgICAgIGlmIChtZXJnZVJvd3MgPT09IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cyAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IG5ldyBUYWJsZVJvd0VsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvY3VzUm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzUm93Q2VsbCA9IGZvY3VzUm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAvL+WFtuS7luWIl+imgee6teWQkeWQiOW5tlxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGZvY3VzQ2VsbEluZGV4IHx8IGkgPiBlbmRDb2xJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb2N1c1Jvd0NlbGwucHJvcHMudk1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNSb3dDZWxsLnByb3BzLnZNZXJnZSA9ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLmhNZXJnZSA9IGZvY3VzUm93Q2VsbC5wcm9wcy5oTWVyZ2U7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Jvdy5hZGRDaGlsZChjZWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBmb2N1c1Jvd0luZGV4ICsgaSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5a2Y5Zyo5ZCI5bm26KGM77yM5YiZ5oyJ54Wn57qm5pWw5Y2V5Liq5ZCI5bm25YiG5ouG5Li65aSa5Liq5ZCI5bm2XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy/mi4bliIbooYzlkozlkIjlubbooYznm7jnrYnvvIzliJnmiafooYzov5jljp9cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBtZXJnZVJvd3MpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lcmdlUm93czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGZvY3VzUm93SW5kZXggKyBpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBmb2N1c0NlbGxJbmRleDsgaiA8PSBlbmRDb2xJbmRleDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnByb3BzLnZNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVyZ2VSb3dzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgJSByb3dzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChmb2N1c1Jvd0luZGV4ICsgaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChmb2N1c0NlbGxJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMudk1lcmdlID0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTcGxpdENvbHMod2lkdGg6IG51bWJlciwgY29sczogbnVtYmVyKTogQXJyYXk8Q29sdW1uUGFydD4ge1xuICAgICAgICBjb25zdCBpdGVtczogQXJyYXk8Q29sdW1uUGFydD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe3dpZHRoOiBNYXRoLmZsb29yKHdpZHRoIC8gY29scyksIGluZGV4OiBpfSk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ud2lkdGggKz0gd2lkdGggLSBpdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLndpZHRoLCAwKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaoquWQkeWQiOW5tueahOWIl1xuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSBjdXJyUm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY3VyckNvbEluZGV4XG4gICAgICogQHBhcmFtIHNwbGl0Q29sc1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldEhNZXJnZUNvbHModGI6IFRhYmxlRWxlbWVudCwgY3VyclJvd0luZGV4OiBudW1iZXIsIGN1cnJDb2xJbmRleDogbnVtYmVyLCBzcGxpdENvbHM6IG51bWJlcik6IEFycmF5PENvbHVtblBhcnQ+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoY3VyclJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxDb2x1bW5QYXJ0PiA9IFt7d2lkdGg6IHRiLmdldENlbGxXaWR0aChjdXJyQ29sSW5kZXgpLCBpbmRleDogY3VyckNvbEluZGV4fV07XG4gICAgICAgIGZvciAobGV0IGkgPSBjdXJyQ29sSW5kZXggKyAxOyBpIDwgdGIuZ2V0Q29sc0NvdW50KCk7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7d2lkdGg6IHRiLmdldENlbGxXaWR0aChpKSwgaW5kZXg6IGl9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue6teWQkeWQiOW5tueahOihjOaVsFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldFZNZXJnZVJvd3NDb3VudCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gPFRhYmxlQ2VsbEVsZW1lbnQ+KDxUYWJsZVJvd0VsZW1lbnQ+dGIuZ2V0Q2hpbGQocm93SW5kZXgpKS5nZXRDaGlsZChjb2xJbmRleClcbiAgICAgICAgaWYgKHN0YXJ0Q2VsbC5wcm9wcy52TWVyZ2UgIT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKGkgPSByb3dJbmRleCArIDE7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpIC0gcm93SW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkgLSByb3dJbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnurXlkJHlkIjlubbnmoTooYzmlbBcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRITWVyZ2VDb2xzQ291bnQodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4ocm93SW5kZXgpO1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSByb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oY29sSW5kZXgpXG4gICAgICAgIGlmIChzdGFydENlbGwucHJvcHMuaE1lcmdlICE9PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChpID0gY29sSW5kZXggKyAxOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgIT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAtIGNvbEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpIC0gY29sSW5kZXg7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi9mcmFtZXdvcmsvZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0RvY3VtZW50Q3Vyc29yLCBTZWxlY3Rpb25TdGF0ZX0gZnJvbSBcIi4vZnJhbWV3b3JrL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtQb3NpdGlvbiwgVmlld09wdGlvbnN9IGZyb20gXCIuL2ZyYW1ld29yay9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtIaXRFdmVudEluZm99IGZyb20gXCIuL2ZyYW1ld29yay9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vZnJhbWV3b3JrL2ltcGxcIjtcbmltcG9ydCB7UGFyYWdyYXBoRWxlbWVudCwgUGFyYWdyYXBoUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9mcmFtZXdvcmsvaW1wbFwiO1xuaW1wb3J0IHtUYWJsZUNlbGxSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ZyYW1ld29yay9pbXBsXCI7XG5pbXBvcnQge1RhYmxlUm93UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9mcmFtZXdvcmsvaW1wbFwiO1xuaW1wb3J0IHtSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ZyYW1ld29yay9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gXCIuL2ZyYW1ld29yay9kb2N1bWVudC1jb250ZXh0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZU9wdGlvbnMge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgcGFnZVBMOiBudW1iZXI7XG4gICAgcGFnZVBSOiBudW1iZXI7XG4gICAgZG9jTGVmdDogbnVtYmVyO1xuXG59XG5cbmV4cG9ydCBjbGFzcyBEb2NSdWxlIHtcbiAgICBwcml2YXRlIGN0eCE6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICBwcml2YXRlIG9wdGlvbnM6IFJ1bGVPcHRpb25zO1xuICAgIC8v5qCH5bC66auY5bqmXG4gICAgcHJpdmF0ZSBydWxlSGVpZ2h0ID0gMzA7XG4gICAgLy/lvZPliY3moIflsLrnmoTkvY3nva5cbiAgICBwcml2YXRlIHRodW1iWDoge1xuICAgICAgICBpbmRlbnQ6IG51bWJlcixcbiAgICAgICAgaGFuZ2luZzogbnVtYmVyXG4gICAgfVxuICAgIHByaXZhdGUgbW91c2VEb3duUG9zITogUG9zaXRpb24gfCBudWxsO1xuICAgIHByaXZhdGUgaW5kZW50VGh1bWJQb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgIHByaXZhdGUgaGFuZ1RodW1iUG9pbnRzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICBwcml2YXRlIG1vdXNlRG93blRodW1iVHlwZTogJ25vbmUnIHwgJ2luZGVudCcgfCAnaGFuZycgPSAnbm9uZSc7XG4gICAgcHVibGljIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBwdWJsaWMgc3M6IFNlbGVjdGlvblN0YXRlXG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLnNzID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgcGFnZVBMOiAwLFxuICAgICAgICAgICAgcGFnZVBSOiAwLFxuICAgICAgICAgICAgZG9jTGVmdDogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRodW1iWCA9IHtcbiAgICAgICAgICAgIGluZGVudDogMCxcbiAgICAgICAgICAgIGhhbmdpbmc6IDBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoZXZ0KSA9PiB0aGlzLmNhbnZhc01vdXNlZG93bihldnQpKTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZXZ0KSA9PiB0aGlzLmNhbnZhc01vdXNlbW92ZShldnQpKTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgKGV2dCkgPT4gdGhpcy5jYW52YXNNb3VzZXVwKGV2dCkpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdGhpcy5jYW52YXNNb3VzZWRvd24pO1xuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRoaXMuY2FudmFzTW91c2Vtb3ZlKTtcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5jYW52YXNNb3VzZXVwKTtcbiAgICB9XG5cbiAgICBzZXRSdWxlT3B0aW9ucyhvcHRpb25zOiBSdWxlT3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBjb252ZXJ0UmF0aW8gPSB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbztcbiAgICAgICAgdGhpcy5vcHRpb25zLnBhZ2VQTCA9IE1hdGguZmxvb3IodGhpcy5vcHRpb25zLnBhZ2VQTCAqIGNvbnZlcnRSYXRpbyk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5wYWdlUFIgPSBNYXRoLmZsb29yKHRoaXMub3B0aW9ucy5wYWdlUFIgKiBjb252ZXJ0UmF0aW8pO1xuICAgICAgICAvL3RoaXMuc2NhbGVWaWV3KCk7XG4gICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKHRoaXMuY2FudmFzLCB0aGlzLmN0eCwge3dpZHRoOiB0aGlzLmdldFBhcmVudFdpZHRoKCksIGhlaWdodDogdGhpcy5ydWxlSGVpZ2h0fSk7XG4gICAgICAgIC8vdGhpcy5jYW52YXMuc3R5bGUubGVmdCA9IHRoaXMub3B0aW9ucy5kb2NMZWZ0ICsgJ3B4JztcbiAgICB9XG5cbiAgICBnZXRQYXJlbnRXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmNhbnZhcy5wYXJlbnRFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICByZXR1cm4gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsbFJlY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjb2xvcjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnNjYWxlKHNjYWxlLCAxKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3SW5kZW50VGh1bWIoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBBcnJheTxQb3NpdGlvbj4ge1xuICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICB4IC09IDQ7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5OiB5ICsgM30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDQsIHk6IHkgKyA3fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgOCwgeTogeSArIDN9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA4LCB5fSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4LCB5fSk7XG4gICAgICAgIHRoaXMuZHJhd0xpbmUocG9pbnRzKTtcbiAgICAgICAgcmV0dXJuIHBvaW50cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdIYW5nVGh1bWIoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBBcnJheTxQb3NpdGlvbj4ge1xuICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfT4gPSBbXTtcbiAgICAgICAgeCAtPSA0O1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeX0pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeTogeSAtIDN9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA0LCB5OiB5IC0gN30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDgsIHk6IHkgLSAzfSk7XG4gICAgICAgIHBvaW50cy5wdXNoKHt4OiB4ICsgOCwgeX0pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeX0pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCwgeTogeSArIDN9KTtcbiAgICAgICAgcG9pbnRzLnB1c2goe3g6IHggKyA4LCB5OiB5ICsgM30pO1xuICAgICAgICBwb2ludHMucHVzaCh7eDogeCArIDgsIHk6IHl9KTtcbiAgICAgICAgdGhpcy5kcmF3TGluZShwb2ludHMpO1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVhc3VyZVRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSBcIjhweCAnVGltZXMgTmV3IFJvbWFuJ1wiO1xuICAgICAgICBjb25zdCBtZWFzdXJlID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGV4dCk7XG4gICAgICAgIHJldHVybiBtZWFzdXJlLndpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd0xpbmUocG9pbnRzOiBBcnJheTxQb3NpdGlvbj4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnNjYWxlKHNjYWxlLCAxKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gXCJ3aGl0ZVwiO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAwLjU7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcG9pbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBsZXQge3gsIHl9ID0gcG9pbnRzW2pdO1xuICAgICAgICAgICAgeCArPSAwLjU7XG4gICAgICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyYXdUZXh0KHRleHQ6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHggPSB4ICogc2NhbGU7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gXCJyZ2IoMCwwLDApXCI7XG4gICAgICAgIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9IFwiYWxwaGFiZXRpY1wiO1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gXCI4cHggJ1RpbWVzIE5ldyBSb21hbidcIjtcbiAgICAgICAgdGhpcy5jdHguZmlsbFRleHQodGV4dCwgeCwgeSArIDggLSAxKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIt+aWsOaWsOeahOeKtuaAgVxuICAgICAqL1xuICAgIHJlZnJlc2hSdWxlKCk6IHZvaWQge1xuICAgICAgICAvLyBpZiAoIXRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCkge1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5ydWxlSGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUodGhpcy5vcHRpb25zLmRvY0xlZnQgKiB0aGlzLnZpZXdPcHRpb25zLnNjYWxlLCAwKTtcbiAgICAgICAgdGhpcy5kcmF3UnVsZSgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW52YXNNb3VzZWRvd24oZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNsaWNrUG9zID0gdGhpcy5nZXRNb3VzZVBvcyhldnQpO1xuICAgICAgICBpZiAodGhpcy5wb2ludEluUG9seShjbGlja1BvcywgdGhpcy5pbmRlbnRUaHVtYlBvaW50cykpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duVGh1bWJUeXBlID0gJ2luZGVudCc7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IGNsaWNrUG9zO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucG9pbnRJblBvbHkoY2xpY2tQb3MsIHRoaXMuaGFuZ1RodW1iUG9pbnRzKSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZURvd25UaHVtYlR5cGUgPSAnaGFuZyc7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IGNsaWNrUG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnKrngrnlh7vlnKjph4zpnaJcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1vdXNlUG9zKGV2dDogTW91c2VFdmVudCk6IFBvc2l0aW9uIHtcbiAgICAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiAoZXZ0Lm9mZnNldFggLyBzY2FsZSAtIHRoaXMub3B0aW9ucy5kb2NMZWZ0KSxcbiAgICAgICAgICAgIHk6IGV2dC5vZmZzZXRZIC8gc2NhbGVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FudmFzTW91c2Vtb3ZlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoWydpbmRlbnQnLCAnaGFuZyddLmluZGV4T2YodGhpcy5tb3VzZURvd25UaHVtYlR5cGUpIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb3VzZURvd25Qb3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmdldE1vdXNlUG9zKGV2dCk7XG4gICAgICAgIGxldCBtb3ZlWCA9IGNhbnZhc1Bvcy54IC0gdGhpcy5tb3VzZURvd25Qb3MueDtcbiAgICAgICAgLy/oh7PlsJHnp7vliqg1cHjlho3ov5vooYzkv67mlLlcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gbW92ZVggJSA1O1xuICAgICAgICBpZiAoTWF0aC5hYnMocmVtYWluZGVyKSA8IDMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZW1haW5kZXIgPCAwKSB7XG4gICAgICAgICAgICAgICAgbW92ZVggLT0gNSArIHJlbWFpbmRlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW92ZVggKz0gNSAtIHJlbWFpbmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobW92ZVggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYW52YXNQb3MueCA9IHRoaXMubW91c2VEb3duUG9zLnggKyBtb3ZlWDtcbiAgICAgICAgY29uc3QgcGFyYSA9IHRoaXMuZ2V0Q3VyclBhcmEoKTtcbiAgICAgICAgaWYgKCFwYXJhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmEgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW91c2VEb3duVGh1bWJUeXBlID09PSAnaW5kZW50Jykge1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ICs9IG1vdmVYO1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ID0gdGhpcy50aHVtYlguaW5kZW50IDwgMCA/IDAgOiB0aGlzLnRodW1iWC5pbmRlbnQ7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5pbmRlbnQgPSB0aGlzLnRodW1iWC5pbmRlbnQgPiB0aGlzLm9wdGlvbnMud2lkdGggPyB0aGlzLm9wdGlvbnMud2lkdGggOiB0aGlzLnRodW1iWC5pbmRlbnQ7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IGNhbnZhc1BvcztcbiAgICAgICAgICAgIHBhcmEucHJvcHMuaW5kZW50ICs9IG1vdmVYO1xuICAgICAgICAgICAgdGhpcy5kcmF3UnVsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdXNlRG93blRodW1iVHlwZSA9PT0gJ2hhbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5oYW5naW5nICs9IG1vdmVYO1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaGFuZ2luZyA9IHRoaXMudGh1bWJYLmhhbmdpbmcgPCAwID8gMCA6IHRoaXMudGh1bWJYLmhhbmdpbmc7XG4gICAgICAgICAgICB0aGlzLnRodW1iWC5oYW5naW5nID0gdGhpcy50aHVtYlguaGFuZ2luZyA+IHRoaXMub3B0aW9ucy53aWR0aCA/IHRoaXMub3B0aW9ucy53aWR0aCA6IHRoaXMudGh1bWJYLmhhbmdpbmc7XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93blBvcyA9IGNhbnZhc1BvcztcbiAgICAgICAgICAgIHBhcmEucHJvcHMuaGFuZ2luZyArPSBtb3ZlWDtcbiAgICAgICAgICAgIHRoaXMuZHJhd1J1bGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2FudmFzTW91c2V1cChldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3VzZURvd25UaHVtYlR5cGUgPSAnbm9uZSc7XG4gICAgICAgIHRoaXMubW91c2VEb3duUG9zID0gbnVsbDtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgcG9pbnRJblBvbHkocHQ6IFBvc2l0aW9uLCBwb2x5OiBBcnJheTxQb3NpdGlvbj4pOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IC0xLCBsID0gcG9seS5sZW5ndGgsIGogPSBsIC0gMTsgKytpIDwgbDsgaiA9IGkpIHtcbiAgICAgICAgICAgIGlmICgoKHBvbHlbaV0ueSA8PSBwdC55ICYmIHB0LnkgPCBwb2x5W2pdLnkpIHx8IChwb2x5W2pdLnkgPD0gcHQueSAmJiBwdC55IDwgcG9seVtpXS55KSkgJiYgcHQueCA8ICgocG9seVtqXS54IC0gcG9seVtpXS54KSAqIChwdC55IC0gcG9seVtpXS55KSkgLyAocG9seVtqXS55IC0gcG9seVtpXS55KSArIHBvbHlbaV0ueCkge1xuICAgICAgICAgICAgICAgIGMgPSAhY1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog57uY5Yi2XG4gICAgICovXG4gICAgcHJpdmF0ZSBkcmF3UnVsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRSdWxlTWFya3NQb3MoKTtcbiAgICAgICAgY29uc3Qge3NjYWxlfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIC8vdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAvL3RoaXMuY3R4LnNjYWxlKHNjYWxlLCBzY2FsZSk7XG4gICAgICAgIHRoaXMuZmlsbFJlY3QoMCwgMCwgdGhpcy5vcHRpb25zLnBhZ2VQTCwgdGhpcy5ydWxlSGVpZ2h0LCBcInJnYigxOTgsMTk4LDE5OClcIik7XG4gICAgICAgIHRoaXMuZmlsbFJlY3QodGhpcy5vcHRpb25zLndpZHRoIC0gdGhpcy5vcHRpb25zLnBhZ2VQUiwgMCwgdGhpcy5vcHRpb25zLnBhZ2VQUiwgdGhpcy5ydWxlSGVpZ2h0LCBcInJnYigxOTgsMTk4LDE5OClcIik7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNTA7IGorKykge1xuICAgICAgICAgICAgY29uc3QgZ2FudFdpZHRoID0gMjA7XG4gICAgICAgICAgICBjb25zdCBwb2ludHM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgY29uc3QgeCA9IGogKiBnYW50V2lkdGg7XG4gICAgICAgICAgICBpZiAoeCA+IHRoaXMub3B0aW9ucy53aWR0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeSA9IDEwO1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goe3gsIHl9LCB7eCwgeTogeSArIDEwfSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdMaW5lKHBvaW50cyk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSB0aGlzLm1lYXN1cmVUZXh0KGogKyBcIlwiKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1RleHQoaiArICcnLCB4ICsgTWF0aC5mbG9vcigoZ2FudFdpZHRoIC0gdGV4dFdpZHRoKSAvIDIpLCB5ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRlbnRUaHVtYlBvaW50cyA9IHRoaXMuZHJhd0luZGVudFRodW1iKHRoaXMudGh1bWJYLmluZGVudCwgNik7XG4gICAgICAgIHRoaXMuaGFuZ1RodW1iUG9pbnRzID0gdGhpcy5kcmF3SGFuZ1RodW1iKHRoaXMudGh1bWJYLmhhbmdpbmcsIDI1KTtcbiAgICAgICAgLy90aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlTWFya3NQb3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBzdGFydEhpdEluZm99ID0gdGhpcy5zcztcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wgfHwgIXN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ID0gMDtcbiAgICAgICAgICAgIHRoaXMudGh1bWJYLmhhbmdpbmcgPSAwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBjb25zdCBpbmRlbnQgPSBwYXJhLnByb3BzLmluZGVudDtcbiAgICAgICAgY29uc3QgaGFuZ2luZyA9IHBhcmEucHJvcHMuaGFuZ2luZztcbiAgICAgICAgY29uc3Qge3N0YXJ0UmVnaW9uLCBoaXREb2NJbmRleH0gPSB0aGlzLnNzLnN0YXJ0SGl0SW5mbyBhcyBIaXRFdmVudEluZm87XG4gICAgICAgIGNvbnN0IGN1cnNvclBvc2kgPSBEb2N1bWVudEN1cnNvci5nZXRFbGVtZW50Q3Vyc29yUG9zKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIHN0YXJ0UmVnaW9uLCBoaXREb2NJbmRleCk7XG4gICAgICAgIC8v5b2T5YmN5q616JC9XG4gICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoY3Vyc29yUG9zaS5yZW5kZXIsIFBhcmFncmFwaFJlbmRlck9iamVjdCkgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuICAgICAgICAvL+W9k+WJjeauteiQveS9jee9rlxuICAgICAgICBjb25zdCBwYXJhUmVuZGVyUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhwYXJhUmVuZGVyKVxuICAgICAgICAvL+W9k+WJjeaWh+aho1xuICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIocGFyYVJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAvL+W9k+WJjeaWh+aho+S9jee9rlxuICAgICAgICBjb25zdCBkb2NSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlcilcbiAgICAgICAgdGhpcy50aHVtYlguaW5kZW50ID0gcGFyYVJlbmRlclBvcy54IC0gZG9jUmVuZGVyUG9zLnggKyBpbmRlbnQ7XG4gICAgICAgIHRoaXMudGh1bWJYLmhhbmdpbmcgPSBwYXJhUmVuZGVyUG9zLnggLSBkb2NSZW5kZXJQb3MueCArIGhhbmdpbmc7XG4gICAgICAgIHRoaXMub3B0aW9ucy5kb2NMZWZ0ID0gZG9jUmVuZGVyLnJlY3QueCArIGRvY1JlbmRlci5wYXJlbnQucmVjdC54O1xuICAgICAgICB0aGlzLnNldFBhcmVudE1hcmtzUG9zKHBhcmFSZW5kZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VyclBhcmEoKTogUGFyYWdyYXBoRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldH0gPSB0aGlzLnNzO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UGFyZW50TWFya3NQb3MoY2hpbGRSZW5kZXI6IFJlbmRlck9iamVjdCk6IEFycmF5PHsgcG9zOiBQb3NpdGlvbiB9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTx7IHBvczogUG9zaXRpb24gfT4gPSBbXTtcbiAgICAgICAgY29uc3QgcGFyZW50UmVuZGVyID0gY2hpbGRSZW5kZXIucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudFJlbmRlciB8fCBwYXJlbnRSZW5kZXIgaW5zdGFuY2VvZiBEb2N1bWVudFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJlbnRSZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHBhcmVudFJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgZG9jUmVuZGVyUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIpXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudFJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSBwYXJlbnRSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoY2VsbFJlbmRlcilcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdDZWxsTWFyayhwb3MueCAtIGRvY1JlbmRlclBvcy54LCAwLCBjZWxsUmVuZGVyLnBhZGRpbmcubGVmdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXRlbXMucHVzaCguLi50aGlzLnNldFBhcmVudE1hcmtzUG9zKHBhcmVudFJlbmRlcikpO1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3Q2VsbE1hcmsoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgeCArPSAwLjU7XG4gICAgICAgIHkgKz0gMC41O1xuICAgICAgICB0aGlzLmZpbGxSZWN0KHgsIHksIHdpZHRoLCB0aGlzLnJ1bGVIZWlnaHQsICdyZ2IoMTk4LDE5OCwxOTgsMC4yKScpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAwLjM7XG4gICAgICAgICAgICB0aGlzLmN0eC5zZXRMaW5lRGFzaChbMC41LCAwLjUsIDAuNV0pO1xuICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHggKyBpLCB5KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgaSwgeSArIHRoaXMucnVsZUhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2NhbGVWaWV3KCk6IHZvaWQge1xuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gICAgIGNvbnN0IHtzY2FsZX0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgIC8vICAgICAvL3RoaXMuY2FudmFzLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9ICdjZW50ZXIgY2VudGVyJztcbiAgICAvLyAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5jYW52YXMucGFyZW50RWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAvLyAgICAgaWYgKHNjYWxlID09PSAxKSB7XG4gICAgLy8gICAgICAgICBwYXJlbnQuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBwYXJlbnQuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7dGhpcy52aWV3T3B0aW9ucy5zY2FsZX0pYDtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvL1xuXG59XG4iLCJpbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBUZXh0UHJvcHMgfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCwgVGV4dEdyb3VwUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRVbml0cyB7XG4gICAgc291cmNlU2l6ZTogbnVtYmVyLFxuICAgIGFjdHVhbFNpemU6IG51bWJlcixcbiAgICBjaGFyOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVuZGVyQ29udGV4dENvbnRyYWN0IHtcbiAgICBjb250ZW50Q29udGV4dDogUGFpbnRDb250ZW50O1xuICAgIG92ZXJsYXlzQ29udGV4dDogUGFpbnRDb250ZW50O1xuICAgIG1haW5Db250ZXh0OiBQYWludENvbnRlbnQ7XG4gICAgZHJhd01vZGU6ICd2aWV3JyB8ICdwcmludCc7XG4gICAgY2xlYXIoKTogdm9pZDtcbiAgICBjb21taXQocGFnZVNldHRpbmc6IElTZXRDYW52YXNQYWdlUHJvcHMpOiB2b2lkXG4gICAgaW5pdChwYWdlU2V0dGluZzogSVNldENhbnZhc1BhZ2VQcm9wcyk6IHZvaWRcbiAgICB0cmFuKGVmZmVjdDogKCkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgdXBkYXRlKHBhZ2VTZXR0aW5nOiBJU2V0Q2FudmFzUGFnZVByb3BzKTogdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyQ29udGV4dFR5cGUgPSBJUmVuZGVyQ29udGV4dENvbnRyYWN0O1xuXG5leHBvcnQgdHlwZSBJU2V0Q2FudmFzUGFnZVByb3BzID1cbiAgICB7XG4gICAgICAgIHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyBzY2FsZTogbnVtYmVyO1xuICAgIH07XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJDb250ZXh0IGltcGxlbWVudHMgSVJlbmRlckNvbnRleHRDb250cmFjdCB7XG4gICAgY29udGVudENvbnRleHQhOiBQYWludENvbnRlbnQ7XG4gICAgb3ZlcmxheXNDb250ZXh0ITogUGFpbnRDb250ZW50O1xuICAgIGRyYXdNb2RlOiAndmlldycgfCAncHJpbnQnID0gJ3ZpZXcnO1xuICAgIHByaXZhdGUgY29udGVudE9mZkNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xuICAgIHByaXZhdGUgb3ZlcmxheU9mZkNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG1haW5Db250ZXh0OiBQYWludENvbnRlbnQpIHsgfVxuXG4gICAgLy/liJ3lp4vljJbliJvlu7rnu5jliLbnsbtcbiAgICBpbml0KHBhZ2VTZXR0aW5nOiBJU2V0Q2FudmFzUGFnZVByb3BzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGVudE9mZkNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB0aGlzLm92ZXJsYXlPZmZDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgdGhpcy5jb250ZW50Q29udGV4dCA9IG5ldyBQYWludENvbnRlbnQodGhpcy5jb250ZW50T2ZmQ2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICAgICAgdGhpcy5vdmVybGF5c0NvbnRleHQgPSBuZXcgUGFpbnRDb250ZW50KHRoaXMub3ZlcmxheU9mZkNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgICAgIHRoaXMudXBkYXRlKHBhZ2VTZXR0aW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDnu5jliLbnlLvluIPlpKflsI9cbiAgICAgKi9cbiAgICB1cGRhdGUocGFnZVNldHRpbmc6IElTZXRDYW52YXNQYWdlUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHModGhpcy5jb250ZW50T2ZmQ2FudmFzLCB0aGlzLmNvbnRlbnRDb250ZXh0LmN0eCwgcGFnZVNldHRpbmcpXG4gICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKHRoaXMub3ZlcmxheU9mZkNhbnZhcywgdGhpcy5vdmVybGF5c0NvbnRleHQuY3R4LCBwYWdlU2V0dGluZylcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHModGhpcy5tYWluQ29udGV4dC5jdHguY2FudmFzLCB0aGlzLm1haW5Db250ZXh0LmN0eCwgcGFnZVNldHRpbmcpXG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGVudENvbnRleHQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5c0NvbnRleHQuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5tYWluQ29udGV4dC5jbGVhcigpO1xuICAgIH1cblxuICAgIGNvbW1pdChwYWdlU2V0dGluZzogSVNldENhbnZhc1BhZ2VQcm9wcyk6IHZvaWQge1xuICAgICAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0IH0gPSBwYWdlU2V0dGluZztcbiAgICAgICAgLy90aGlzLm1haW5DdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMubWFpbkN0eC5jYW52YXMud2lkdGgsIHRoaXMubWFpbkN0eC5jYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlPZmZDYW52YXMud2lkdGggfHwgIXRoaXMub3ZlcmxheU9mZkNhbnZhcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+S/ruWkjeeUseS6juWBj+enu+mHj+eahOmXrumimO+8jOWvvOiHtOm7kei+ueeahOmXrumimFxuICAgICAgICB0aGlzLm1haW5Db250ZXh0LmZpbGxSZWN0KC0xLCAtMSwgd2lkdGggKyAyLCBoZWlnaHQgKyAyLCAnI2ZmZicpXG4gICAgICAgIHRoaXMubWFpbkNvbnRleHQuZHJhd0ltYWdlKHRoaXMub3ZlcmxheU9mZkNhbnZhcywgMCwgMCwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKHdpZHRoKSwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKGhlaWdodCkpO1xuICAgICAgICAvL2NvbnNvbGUudGltZSgnZHJhd0ltYWdlJyk7XG4gICAgICAgIHRoaXMubWFpbkNvbnRleHQuZHJhd0ltYWdlKHRoaXMuY29udGVudE9mZkNhbnZhcywgMCwgMCwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKHdpZHRoKSwgRWxlbWVudFV0aWwuZ2V0RHByTnVtYmVyKGhlaWdodCkpO1xuICAgICAgICAvL2NvbnNvbGUudGltZUVuZCgnZHJhd0ltYWdlJyk7XG4gICAgfVxuXG4gICAgdHJhbihlZmZlY3Q6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudENvbnRleHQuc2F2ZSgpO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5c0NvbnRleHQuc2F2ZSgpO1xuICAgICAgICAgICAgZWZmZWN0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRDb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheXNDb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgUGFpbnRDb250ZW50IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHgudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xuICAgIH1cblxuICAgIHNldEdsb2JhbEFscGhhKGFscGhhOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSBhbHBoYTtcbiAgICB9XG5cbiAgICBnZXRHbG9iYWxBbHBoYSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHguZ2xvYmFsQWxwaGE7XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmN0eC5jYW52YXMud2lkdGgsIHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBkcmF3VGV4dCh0ZXh0OiBzdHJpbmcsIHRleHRQcm9wczogVGV4dFByb3BzLCB4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRleHRQcm9wcy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRQcm9wcy5iYWNrZ3JvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRleHRQcm9wcy5jb2xvcjtcbiAgICAgICAgdGhpcy5jdHguZm9udCA9IHRleHRQcm9wcy5nZXRGb250KCk7XG4gICAgICAgIGNvbnN0IHZlcnRIZWlnaHQgPSB0ZXh0UHJvcHMudmVydEFsaWduID09PSAnc3VwZXJzY3JpcHQnID8gMCA6IGhlaWdodDtcbiAgICAgICAgdGhpcy5jdHguZmlsbFRleHQodGV4dCwgeCwgeSArIHZlcnRIZWlnaHQgLSBoZWlnaHQgLyA3KTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICBpZiAodGV4dFByb3BzLmxpbmV0aHJvdWdoKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5ICsgKE1hdGguY2VpbChoZWlnaHQgLyAyKSksIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0UHJvcHMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5ICsgaGVpZ2h0LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLm92ZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbGxDaXJjdWxhcih4OiBudW1iZXIsIHk6IG51bWJlciwgcjogbnVtYmVyLCBjb2xvcjogc3RyaW5nID0gJ2JsYWNrJyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgdGhpcy5jdHguYXJjKHgsIHksIHIsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgZHJhd1RleHRVbml0cyh0ZXh0R3JvdXBSZW5kZXI6IFRleHRHcm91cFJlbmRlck9iamVjdCwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGV4dEVsZSA9IHRleHRHcm91cFJlbmRlci5lbGVtZW50IGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IHRleHRFbGUucHJvcHM7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGV4dEdyb3VwUmVuZGVyLnJlY3Q7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgLy/moLnmja7kuIrnuqfnu6fmib/ov5vooYznu5jliLZcbiAgICAgICAgaWYodGV4dFByb3BzLmNvbG9yKXtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRleHRQcm9wcy5jb2xvcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5mb250ID0gdGV4dFByb3BzLmdldEZvbnQoKTtcbiAgICAgICAgaWYgKHRleHRQcm9wcy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHRleHRQcm9wcy5iYWNrZ3JvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLmxpbmV0aHJvdWdoKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5ICsgKE1hdGguY2VpbChoZWlnaHQgLyAyKSksIHdpZHRoLCB0ZXh0UHJvcHMuY29sb3IsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0UHJvcHMudW5kZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5ICsgaGVpZ2h0LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dFByb3BzLm92ZXJsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdIb3JpTGluZSh4LCB5LCB3aWR0aCwgdGV4dFByb3BzLmNvbG9yLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaG9yWCA9IDA7XG4gICAgICAgIGxldCB2ZXJ0SGVpZ2h0ID0gaGVpZ2h0IC0gKGhlaWdodCAvIDcpO1xuICAgICAgICBpZiAodGV4dFByb3BzLnZlcnRBbGlnbiA9PT0gJ3N1cGVyc2NyaXB0Jykge1xuICAgICAgICAgICAgLy/liLB0b3BcbiAgICAgICAgICAgIHZlcnRIZWlnaHQgLT0gdGV4dFByb3BzLmZvbnRTaXplICogMiAvIDU7XG4gICAgICAgICAgICAvL3RvcOWcqOWQkeS4iuaUtue8qSAtdG9w6KGM6Ze06LedXG4gICAgICAgICAgICAvL3ZlcnRIZWlnaHQgLT0gdGV4dFByb3BzLmZvbnRTaXplICogdGhpcy5nZXRQYXJhTGluZUhlaWdodCh0ZXh0RWxlKSAvIDIwXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0R3JvdXBSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB1bml0ID0gdGV4dEdyb3VwUmVuZGVyLnRleHRNZWFzdXJlc1tpXTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxUZXh0KHVuaXQuY2hhciwgeCArIGhvclgsIHkgKyB2ZXJ0SGVpZ2h0KTtcbiAgICAgICAgICAgIGhvclggKz0gdW5pdC5hY3R1YWxTaXplO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBnZXRQYXJhTGluZUhlaWdodCh0ZXh0RWxlOiBUZXh0R3JvdXBFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZSh0ZXh0RWxlLCBQYXJhZ3JhcGhFbGVtZW50KTtcbiAgICAgICAgaWYgKCFwYXJhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquiDveaJvuWIsOeItue6p+auteiQveWFg+e0oCcpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmEucHJvcHMubGluZUhlaWdodDtcbiAgICB9XG5cbiAgICBtZWFzdXJlVGV4dCh0ZXh0OiBzdHJpbmcsIHRleHRQcm9wczogVGV4dFByb3BzKTogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gdGV4dFByb3BzLmNvbG9yO1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gdGV4dFByb3BzLmdldEZvbnQoKTtcbiAgICAgICAgY29uc3QgdGV4dE1lYXN1cmUgPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCh0ZXh0KTtcbiAgICAgICAgcmV0dXJuIHsgd2lkdGg6IHRleHRNZWFzdXJlLndpZHRoLCBoZWlnaHQ6IHRleHRQcm9wcy5mb250U2l6ZSB9O1xuICAgIH1cblxuXG4gICAgbWVhc3VyZVRleHRVbml0cyh1bml0czogQXJyYXk8VGV4dFVuaXRzPiwgdGV4dFByb3BzOiBUZXh0UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguZm9udCA9IHRleHRQcm9wcy5nZXRGb250KCk7XG4gICAgICAgIGNvbnN0IGxldHRlclNwYWNlID0gdGV4dFByb3BzLmxldHRlclNwYWNlID8/IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSB1bml0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRNZWFzdXJlID0gdGhpcy5jdHgubWVhc3VyZVRleHQoY2hhci5jaGFyKTtcbiAgICAgICAgICAgIGNoYXIuYWN0dWFsU2l6ZSA9IHRleHRNZWFzdXJlLndpZHRoICsgbGV0dGVyU3BhY2U7XG4gICAgICAgICAgICBjaGFyLnNvdXJjZVNpemUgPSB0ZXh0TWVhc3VyZS53aWR0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cblxuICAgIHNhdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICB9XG5cbiAgICByZXN0b3JlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgc2NhbGUocmF0aW86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5zY2FsZShyYXRpbywgcmF0aW8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWMheijheS7u+WKoeaJp+ihjO+8mnNhdmUtPmV4ZWMtPnJlc3RvcmVcbiAgICAgKiBAcGFyYW0gZWZmZWN0XG4gICAgICovXG4gICAgdHJhbihlZmZlY3Q6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlZmZlY3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3Ryb2tlUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHN0cm9rZUNvbG9yID0gJ2JsYWNrJywgc3Ryb2tlV2lkdGggPSAxKTogdm9pZCB7XG4gICAgICAgIHggPSBNYXRoLmNlaWwoeCk7XG4gICAgICAgIHkgPSBNYXRoLmNlaWwoeSk7XG4gICAgICAgIHggKz0gMC41O1xuICAgICAgICB5ICs9IDAuNTtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSBzdHJva2VXaWR0aDtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJva2VDb2xvcjtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICAvL3RoaXMuc3Ryb2tlTGluZXMoW3sgeCwgeSB9LCB7IHg6IHggKyB3aWR0aCwgeSB9LCB7IHg6IHggKyB3aWR0aCwgeTogeSArIGhlaWdodCB9LCB7IHgsIHk6IHkgKyBoZWlnaHQgfSwgeyB4LCB5IH1dLCBzdHJva2VXaWR0aCwgc3Ryb2tlQ29sb3IpO1xuICAgIH1cblxuICAgIC8vc3Ryb2tlUmVjdEltYWdlRGF0YSh4Om51bWJlcilcblxuICAgIC8qKlxuICAgICAqIOe7mOWItuawtOW5s+e6v1xuICAgICAqIEBwYXJhbSB4IFxuICAgICAqIEBwYXJhbSB5IFxuICAgICAqIEBwYXJhbSB3aWR0aCBcbiAgICAgKiBAcGFyYW0gbGluZUNvbG9yIFxuICAgICAqIEBwYXJhbSBsaW5lV2lkdGggXG4gICAgICovXG4gICAgZHJhd0hvcmlMaW5lKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBsaW5lQ29sb3IgPSAnYmxhY2snLCBsaW5lV2lkdGggPSAxKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Ryb2tlTGluZXMoW3sgeCwgeSB9LCB7IHg6IHggKyB3aWR0aCwgeSB9XSwgbGluZVdpZHRoLCBsaW5lQ29sb3IpO1xuICAgIH1cblxuICAgIGZpbGxSZWN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZmlsbENvbG9yID0gJ3doaXRlJywgc2hhZG93Qmx1ciA9IDAsIHNoYWRvd0NvbG9yID0gJ2JsYWNrJyk6IHZvaWQge1xuICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICB5ID0gTWF0aC5jZWlsKHkpO1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gZmlsbENvbG9yO1xuICAgICAgICB0aGlzLmN0eC5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjtcbiAgICAgICAgdGhpcy5jdHguc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSArIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHN0cm9rZUxpbmVzKGxpbmVzOiBBcnJheTxQb3NpdGlvbj4sIHdpZHRoID0gMSwgc3Ryb2tlQ29sb3IgPSAnYmxhY2snKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJva2VDb2xvcjtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVDYXAgPSAncm91bmQnO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgeCwgeSB9ID0gbGluZXNbaV07XG4gICAgICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICAgICAgeSA9IE1hdGguY2VpbCh5KTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIGZpbGxMaW5lcyhsaW5lczogQXJyYXk8UG9zaXRpb24+LCB3aWR0aCA9IDEsIGZpbGxDb2xvciA9ICdibGFjaycpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gZmlsbENvbG9yO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHsgeCwgeSB9ID0gbGluZXNbaV07XG4gICAgICAgICAgICB4ID0gTWF0aC5jZWlsKHgpO1xuICAgICAgICAgICAgeSA9IE1hdGguY2VpbCh5KTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuXG4gICAgZHJhd0NoZWNrQm94KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Ryb2tlUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCAnYmxhY2snLCAxKTtcbiAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgY29uc3QgbGluZXM6IEFycmF5PFBvc2l0aW9uPiA9IFtdO1xuICAgICAgICAgICAgbGluZXMucHVzaCh7IHg6IHggKyAoTWF0aC5jZWlsKHdpZHRoIC8gNCkpLCB5OiB5ICsgKE1hdGguY2VpbChoZWlnaHQgLyAyKSkgfSk7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHsgeDogeCArIChNYXRoLmNlaWwod2lkdGggLyAyKSksIHk6IHkgKyAoTWF0aC5mbG9vcihoZWlnaHQgKiAzIC8gNCkpIH0pO1xuICAgICAgICAgICAgbGluZXMucHVzaCh7IHg6IHggKyAoTWF0aC5jZWlsKHdpZHRoICogMyAvIDQpKSwgeTogeSArIChNYXRoLmNlaWwoaGVpZ2h0IC8gNCkpIH0pO1xuICAgICAgICAgICAgdGhpcy5zdHJva2VMaW5lcyhsaW5lcywgMiwgJ3JlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd1JhZGlvQm94KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHggPSB4ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpO1xuICAgICAgICB5ID0geSArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMik7XG4gICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCAvIDIpO1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gJ2JsYWNrJztcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIHRoaXMuY3R4LmFyYyh4LCB5LCB3aWR0aCwgMCwgMiAqIE1hdGguUEkpO1xuICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9ICdibGFjayc7XG4gICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmFyYyh4LCB5LCBNYXRoLmZsb29yKHdpZHRoIC8gNSAqIDMpLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG5cbiAgICBkcmF3SW1hZ2UoaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLCBzeDogbnVtYmVyLCBzeTogbnVtYmVyKTogdm9pZDtcbiAgICBkcmF3SW1hZ2UoaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLCBzeDogbnVtYmVyLCBzeTogbnVtYmVyLCBzdzogbnVtYmVyLCBzaDogbnVtYmVyKTogdm9pZDtcbiAgICBkcmF3SW1hZ2UoaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLCBzeDogbnVtYmVyLCBzeTogbnVtYmVyLCBzdzogbnVtYmVyLCBzaDogbnVtYmVyLCBkeDogbnVtYmVyLCBkeTogbnVtYmVyLCBkdzogbnVtYmVyLCBkaDogbnVtYmVyKTogdm9pZDtcbiAgICBkcmF3SW1hZ2UoaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLCBzeDogbnVtYmVyLCBzeTogbnVtYmVyLCBzdz86IG51bWJlciwgc2g/OiBudW1iZXIsIGR4PzogbnVtYmVyLCBkeT86IG51bWJlciwgZHc/OiBudW1iZXIsIGRoPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBzaCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGR4ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZHkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCBzeCwgc3ksIHN3LCBzaCwgZHgsIGR5LCBkdywgZGgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNoICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCBzeCwgc3ksIHN3LCBzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHN4LCBzeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3RGFzaExpbmUocG9pbnRzOiBBcnJheTxQb3NpdGlvbj4sIGxpbmVEYXNoOiBBcnJheTxudW1iZXI+LCBsaW5lQ29sb3IgPSAnYmxhY2snLCBsaW5lV2lkdGggPSAxKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguc2V0TGluZURhc2gobGluZURhc2gpO1xuICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IGxpbmVDb2xvcjtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCB7IHgsIHkgfSA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIHggKz0gMC41O1xuICAgICAgICAgICAgeSArPSAwLjU7XG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIHJvdW5kUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHJhZGl1czogbnVtYmVyIHwgeyB0bDogbnVtYmVyLCB0cjogbnVtYmVyLCBicjogbnVtYmVyLCBibDogbnVtYmVyIH0sIGZpbGw6IGJvb2xlYW4sIHN0cm9rZTogYm9vbGVhbikge1xuICAgICAgICB4ICs9IDAuNTtcbiAgICAgICAgeSArPSAwLjU7XG4gICAgICAgIGlmICh0eXBlb2Ygc3Ryb2tlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgc3Ryb2tlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJhZGl1cyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJhZGl1cyA9IHsgdGw6IHJhZGl1cywgdHI6IHJhZGl1cywgYnI6IHJhZGl1cywgYmw6IHJhZGl1cyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRSYWRpdXMgPSB7IHRsOiAwLCB0cjogMCwgYnI6IDAsIGJsOiAwIH07XG4gICAgICAgICAgICBmb3IgKHZhciBzaWRlIGluIGRlZmF1bHRSYWRpdXMpIHtcbiAgICAgICAgICAgICAgICByYWRpdXNbc2lkZV0gPSByYWRpdXNbc2lkZV0gfHwgZGVmYXVsdFJhZGl1c1tzaWRlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gMTtcbiAgICAgICAgdGhpcy5jdHgubW92ZVRvKHggKyByYWRpdXMudGwsIHkpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHdpZHRoIC0gcmFkaXVzLnRyLCB5KTtcbiAgICAgICAgdGhpcy5jdHgucXVhZHJhdGljQ3VydmVUbyh4ICsgd2lkdGgsIHksIHggKyB3aWR0aCwgeSArIHJhZGl1cy50cik7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQgLSByYWRpdXMuYnIpO1xuICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCArIHdpZHRoIC0gcmFkaXVzLmJyLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyByYWRpdXMuYmwsIHkgKyBoZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKHgsIHkgKyBoZWlnaHQsIHgsIHkgKyBoZWlnaHQgLSByYWRpdXMuYmwpO1xuICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSArIHJhZGl1cy50bCk7XG4gICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8oeCwgeSwgeCArIHJhZGl1cy50bCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICBpZiAoZmlsbCkge1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJva2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBjbGlwKHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHgucmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHguY2xpcCgpO1xuICAgIH1cblxufVxuXG5cbiIsImltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIFZpZXdPcHRpb25zLCBFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQsIHRleHRMaW5lUmVuZGVyTW9kZSB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHsgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcblxuLyoqXG4qIOaWh+Wtl+ihjOa4suafk+aooeW8j1xu55So5LqO5Yy75Zix5omT5Y2w5qih5byPXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blRleHRMaW5lUmVuZGVyKGVsZTogRWxlbWVudCwgb3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMudGV4dFJvd0xpbmVNb2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVsZSBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCkge1xuICAgICAgICB0ZXh0TGluZVJlbmRlck1vZGUoZWxlLCBvcHRpb25zLCByZW5kZXJDdHgpO1xuICAgICAgICByZW1lYXN1cmVQYXJlbnRSZW5kZXJzKGVsZS5tZWFzdXJlUmVuZGVyKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBydW5UZXh0TGluZVJlbmRlcihlbGUuZ2V0Q2hpbGQoaSksIG9wdGlvbnMsIHJlbmRlckN0eCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbWVhc3VyZVBhcmVudFJlbmRlcnMocmVuZGVyOiBSZW5kZXJPYmplY3QgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIgYXMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QpXG4gICAgcmVtZWFzdXJlUGFyZW50UmVuZGVycyhyZW5kZXIucGFyZW50KVxuXG59IiwiaW1wb3J0IHsgcnVuVGV4dExpbmVSZW5kZXIgfSBmcm9tIFwiLi9kb2N1bWVudC10ZXh0bGluZS1tb2RlXCI7XG5pbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBCbG9ja0NvbnRlbnRFbGVtZW50LFxuICAgIEJyYW5jaEVsZW1lbnQsXG4gICAgRWxlbWVudCxcbiAgICBJbmxpbmVHcm91cEVsZW1lbnQsXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgTW9kaWZ5RmxhZyxcbiAgICBWaWV3T3B0aW9uc1xufSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZUJhc2VQcm9wcywgRGF0YUVsZUJhc2VUZXh0UHJvcHMsIFRleHRQcm9wcyB9IGZyb20gXCIuL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IHN1cHByZXNzVHJhY2tpbmcgfSBmcm9tIFwiLi9lbGVtZW50LXRyYWNlLXRyYWNraW5nXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQsIERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCwgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QsIFBhcmFncmFwaFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQsIFRleHRHcm91cFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsXG4gICAgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0LFxuICAgIEJyYW5jaFJlbmRlck9iamVjdCxcbiAgICBJbmxpbmVHcm91cFJlbmRlck9iamVjdCxcbiAgICBMZWFmUmVuZGVyT2JqZWN0LFxuICAgIFJlbmRlck9iamVjdFxufSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbnRlcmZhY2UgSUN1dExpbmVEYXRhIHsgZmlyc3RJdGVtOiBSZW5kZXJPYmplY3QgfCBudWxsLCBsYXN0SXRlbTogUmVuZGVyT2JqZWN0IHwgbnVsbCwgYnI/OiBib29sZWFuIH1cbi8qKlxuICog5rWL6YeP6Zi25q6177yM55Sf5oiQUmVuZGVyLVVJXG4gKi9cbmV4cG9ydCBjbGFzcyBFbGVtZW50TWVhc3VyZSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zOiBWaWV3T3B0aW9ucywgcHJpdmF0ZSByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKSB7IH1cblxuICAgIG1lYXN1cmVEb2N1bWVudChkb2N1bWVudDogRG9jdW1lbnRFbGVtZW50KTogRG9jdW1lbnRSZW5kZXJPYmplY3Qge1xuICAgICAgICAvL+a1i+mHj+mYtuaute+8jOWvueS6juepuuauteiQveS8muaPkuWFpeauteiQveespuWPt++8jOaWsOihqOagvOS8muaPkuWFpeepuuauteiQve+8jOatpOaXtuS4jemcgOimgeiusOW9leiKgueCueeahOabtOaUue+8jOS7peacgOWkp+eahOiKgueCuei/m+ihjOiusOW9lVxuICAgICAgICByZXR1cm4gc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyUGFpbnRDYWNoZShkb2N1bWVudCk7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSB0aGlzLm1lYXN1cmVDb250cm9sKGRvY3VtZW50LCB0aGlzLm9wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoKSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIHRoaXMuc2V0TWVhc3VyZUNvbXBsZXRlZE1vZGlmeUZsYWcoZG9jdW1lbnQpO1xuICAgICAgICAgICAgcnVuVGV4dExpbmVSZW5kZXIoZG9jdW1lbnQsIHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICAgICAgcmV0dXJuIGRvY1JlbmRlcjtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBtZWFzdXJlQ29udHJvbChlbGVtZW50OiBFbGVtZW50LCBtYXhXaWR0aDogbnVtYmVyKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGlmIChlbGVtZW50Lm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQubWVhc3VyZVJlbmRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJsb2NrQ29udGVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDdHgpIGFzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGVsZW1lbnQubWVhc3VyZVJlbmRlciA9IHJlbmRlcjtcbiAgICAgICAgICAgIC8v5rWL6YeP6Zi25q6177yM5Y+q6ZmQ5Yi25pyA5aSn5a695bqm5Y2z5Y+vXG4gICAgICAgICAgICByZW5kZXIuc2V0UmVuZGVyV2lkdGgobWF4V2lkdGgpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBQYXJhZ3JhcGhFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZWFzdXJlUGFyYWdyYXBoKGVsZW1lbnQsIHJlbmRlciBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcjtcblxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBCbG9ja0NvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLmZpeEJsb2NrQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IHJlbmRlcjogQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm1vZGlmeUZsYWcgPT09IE1vZGlmeUZsYWcuTW9kaWZ5IHx8IGVsZW1lbnQubW9kaWZ5RmxhZyA9PT0gTW9kaWZ5RmxhZy5UcmFjaykge1xuICAgICAgICAgICAgICAgIEVsZW1lbnRVdGlsLmZpeEJsb2NrQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQubWVhc3VyZVJlbmRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmVuZGVyID0gZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCkgYXMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tZWFzdXJlUmVuZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXIucmVjdC5tYXhXaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuc2V0UmVuZGVyV2lkdGgobWF4V2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZW5kZXIgaXMgbnVsbCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50Lm1lYXN1cmVSZW5kZXIgPSByZW5kZXI7XG4gICAgICAgICAgICBjb25zdCBpbm5lck1heFdpZHRoID0gcmVuZGVyLmdldElubmVyTWF4V2lkdGgoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gZWxlbWVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0NvbnRlbnRFTGVtZW50ID0gY2hpbGQgYXMgQmxvY2tDb250ZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJlbmRlciA9IHRoaXMubWVhc3VyZUNvbnRyb2woYmxvY2tDb250ZW50RUxlbWVudCwgaW5uZXJNYXhXaWR0aCkgYXMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGlmICghY2hpbGRSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlci5hZGRDaGlsZChjaGlsZFJlbmRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocmVuZGVyKTtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog55Sf5oiQ5q616JC9IFVJIOagkVxuICAgICAqIEBwYXJhbSBwYXJhIFxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICovXG4gICAgbWVhc3VyZVBhcmFncmFwaChwYXJhOiBQYXJhZ3JhcGhFbGVtZW50LCByZW5kZXI6IFBhcmFncmFwaFJlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICBFbGVtZW50VXRpbC5maXhQYXJhZ3JhcGhDb250ZW50KHBhcmEpO1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RzOiBBcnJheTxSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJhLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2hpbGQubWVhc3VyZVJlbmRlciA9IHRoaXMuZ2V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubWVhc3VyZVJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJPYmplY3RzLnB1c2goY2hpbGQubWVhc3VyZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNoaWxkLm1lYXN1cmVSZW5kZXIgPSBjaGlsZC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0cy5wdXNoKGNoaWxkLm1lYXN1cmVSZW5kZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lYXN1cmVJbm5lclBhcmFncmFwaChyZW5kZXIsIHBhcmEsIHJlbmRlck9iamVjdHMpO1xuICAgIH1cblxuXG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7mrrXokL1VSeWFg+e0oO+8jOi/m+ihjOaOkuWIl1xuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHBhcmFtIHBhcmFncmFwaCBcbiAgICAgKiBAcGFyYW0gcmVuZGVyT2JqZWN0cyBcbiAgICAgKi9cbiAgICBtZWFzdXJlSW5uZXJQYXJhZ3JhcGgocmVuZGVyOiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QsIHBhcmFncmFwaDogUGFyYWdyYXBoRWxlbWVudCwgcmVuZGVyT2JqZWN0czogQXJyYXk8UmVuZGVyT2JqZWN0Pikge1xuICAgICAgICBsZXQgbGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgLy/ooYzlhoXmoYZcbiAgICAgICAgY29uc3QgaW5uZXJMaW5lUmVjdHM6IEFycmF5PFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBjb25zdCBhZGRJbm5lckxpbmVGdW5jID0gKGxpbmVSZWN0OiBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaW5uZXJMaW5lUmVjdHMucHVzaChsaW5lUmVjdCk7XG4gICAgICAgICAgICBpZiAobGluZVJlY3QucmVjdC5tYXhXaWR0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsaW5lUmVjdC5yZWN0Lm1heFdpZHRoIGlzICcgKyBsaW5lUmVjdC5yZWN0Lm1heFdpZHRoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlubmVyTGluZVJlY3RzLmluZGV4T2YobGluZVJlY3QpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaC5wcm9wcy5pbmRlbnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVSZWN0LnJlY3QubWF4V2lkdGggLT0gcGFyYWdyYXBoLnByb3BzLmluZGVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0LnJlY3QubWF4V2lkdGggLT0gcGFyYWdyYXBoLnByb3BzLmhhbmdpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGFkZElubmVyTGluZUZ1bmMobGluZVJlY3QpO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGxldCBjdXJySXRlbSA9IHJlbmRlck9iamVjdHNbaSsrXTtcbiAgICAgICAgY29uc3QgaW5DbG9zZUJvZHkgPSBwYXJhZ3JhcGgucGFyZW50LnR5cGUgPT09ICdib2R5JztcbiAgICAgICAgd2hpbGUgKGN1cnJJdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IGxpbmVSZWN0LnJlY3QubWF4V2lkdGggYXMgbnVtYmVyO1xuICAgICAgICAgICAgY29uc3QgbmV4dEl0ZW0gPSByZW5kZXJPYmplY3RzW2ldO1xuICAgICAgICAgICAgY29uc3QgeyBmaXJzdEl0ZW0sIGxhc3RJdGVtLCBiciB9ID0gdGhpcy5jdXRSZW5kZXJJdGVtKGN1cnJJdGVtLCBuZXh0SXRlbSwgbWF4V2lkdGggLSBsaW5lUmVjdC5yZWN0LndpZHRoLCBsaW5lUmVjdC5sZW5ndGggPT09IDAsIGluQ2xvc2VCb2R5KTtcbiAgICAgICAgICAgIGlmIChmaXJzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAobGFzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyT2JqZWN0cy5zcGxpY2UoaSwgMCwgbGFzdEl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJySXRlbSA9IGZpcnN0SXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgICAgICAgICBhZGRJbm5lckxpbmVGdW5jKGxpbmVSZWN0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVSZWN0LmFkZENoaWxkKGN1cnJJdGVtKTtcbiAgICAgICAgICAgIGN1cnJJdGVtLnJlY3QueCA9IGxpbmVSZWN0LnJlY3Qud2lkdGg7XG4gICAgICAgICAgICBpZiAoY3Vyckl0ZW0ucmVjdC5oZWlnaHQgPiBsaW5lUmVjdC5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0LnJlY3QuaGVpZ2h0ID0gY3Vyckl0ZW0ucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lUmVjdC5yZWN0LndpZHRoICs9IGN1cnJJdGVtLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICBpZiAoYnIpIHtcbiAgICAgICAgICAgICAgICAvL2xpbmVSZWN0LnJlY3QubWF4V2lkdGggPSBsaW5lUmVjdC5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIGxpbmVSZWN0ID0gcmVuZGVyLmNyZWF0ZUxpbmVSZWN0KCk7XG4gICAgICAgICAgICAgICAgYWRkSW5uZXJMaW5lRnVuYyhsaW5lUmVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJySXRlbSA9IHJlbmRlck9iamVjdHNbaSsrXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubmVyTGluZVJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckxpbmVSZWN0ID0gaW5uZXJMaW5lUmVjdHNbaV0gYXMgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpbm5lckxpbmVSZWN0LnJlY3QueCA9IHRoaXMuZ2V0UGFyYUxpbmVSZWN0U3RhcnRYKGlubmVyTGluZVJlY3RzLmxlbmd0aCwgaSwgcGFyYWdyYXBoLCByZW5kZXIsIGlubmVyTGluZVJlY3QpO1xuICAgICAgICAgICAgLy/pmZDliLbmnIDlpKfooYzpq5hcbiAgICAgICAgICAgIGNvbnN0IG1heExpbmVIZWlnaHQgPSBNYXRoLmZsb29yKDE0ICogMS4zKTtcbiAgICAgICAgICAgIC8vZmlsbExpbmVIZWlnaHTloavlhYXooYzpq5hcbiAgICAgICAgICAgIGxldCBmaWxsTGluZUhlaWdodCA9IE1hdGguY2VpbChpbm5lckxpbmVSZWN0LnJlY3QuaGVpZ2h0ICogKHBhcmFncmFwaC5wcm9wcy5saW5lSGVpZ2h0IC0gMSkpO1xuICAgICAgICAgICAgZmlsbExpbmVIZWlnaHQgPSBmaWxsTGluZUhlaWdodCA+IG1heExpbmVIZWlnaHQgPyBtYXhMaW5lSGVpZ2h0IDogZmlsbExpbmVIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gaW5uZXJMaW5lUmVjdC5yZWN0LmhlaWdodCArIGZpbGxMaW5lSGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IE1hdGguY2VpbChmaWxsTGluZUhlaWdodCAvIDIpO1xuICAgICAgICAgICAgaW5uZXJMaW5lUmVjdC5yZWN0LmhlaWdodCA9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlubmVyTGluZVJlY3QubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWFmID0gaW5uZXJMaW5lUmVjdC5nZXRDaGlsZChqKTtcbiAgICAgICAgICAgICAgICBsZWFmLnJlY3QueSA9IGlubmVyTGluZVJlY3QucmVjdC5oZWlnaHQgLSBwYWRkaW5nQm90dG9tIC0gbGVhZi5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vcmVuZGVyLnJlY3QuaGVpZ2h0ICs9IGxpbmVSZWN0LnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgb3V0dGVyTGluZVJlY3QgPSByZW5kZXIuY3JlYXRlTGluZVJlY3QoKTtcbiAgICAgICAgICAgIG91dHRlckxpbmVSZWN0LnJlY3Qud2lkdGggPSBvdXR0ZXJMaW5lUmVjdC5yZWN0Lm1heFdpZHRoIGFzIG51bWJlcjtcbiAgICAgICAgICAgIG91dHRlckxpbmVSZWN0LmFkZENoaWxkKGlubmVyTGluZVJlY3QpO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKG91dHRlckxpbmVSZWN0LCBmYWxzZSk7XG4gICAgICAgICAgICByZW5kZXIuYWRkQ2hpbGQob3V0dGVyTGluZVJlY3QpO1xuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyZW5kZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluauteiQveihjOW4g+WxgOaoquWQkeWdkOagh+i1t+Wni+S9jee9ru+8jOiiq+auteiQvXRleHQtYWxpZ27lvbHlk41cbiAgICAgKi9cbiAgICBnZXRQYXJhTGluZVJlY3RTdGFydFgoY291bnRlcjogbnVtYmVyLCBwYXJhTGluZUluZGV4OiBudW1iZXIsIHBhcmFFbGVtZW50OiBQYXJhZ3JhcGhFbGVtZW50LCBwYXJhUmVuZGVyT2JqZWN0OiBQYXJhZ3JhcGhSZW5kZXJPYmplY3QsIHBhcmFMaW5lUmVuZGVyOiBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIC8v5bem5a+56b2Q77yM6aaW6KGM57yp6L+bXG4gICAgICAgIGxldCBpbmRlbnQgPSBwYXJhRWxlbWVudC5wcm9wcy5pbmRlbnQ7XG4gICAgICAgIC8v5a2Y5Zyo6aG555uu56ym5Y+3XG4gICAgICAgIGlmIChwYXJhTGluZUluZGV4ID4gMCkge1xuICAgICAgICAgICAgaW5kZW50ID0gcGFyYUVsZW1lbnQucHJvcHMuaGFuZ2luZztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYUVsZW1lbnQucHJvcHMudGV4dEFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluU3BhY2UgPSBwYXJhUmVuZGVyT2JqZWN0LnJlY3Qud2lkdGggLSBwYXJhTGluZVJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChyZW1haW5TcGFjZSAvIDIpICsgaW5kZW50O1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFFbGVtZW50LnByb3BzLnRleHRBbGlnbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluU3BhY2UgPSBwYXJhUmVuZGVyT2JqZWN0LnJlY3Qud2lkdGggLSBwYXJhTGluZVJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgcmV0dXJuIHJlbWFpblNwYWNlICsgaW5kZW50O1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFFbGVtZW50LnByb3BzLnRleHRBbGlnbiA9PT0gJ2p1c3RpZnknKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJVbml0Q291bnQgPSB0aGlzLmdldFJlbmRlclVuaXRMZW5ndGgocGFyYUxpbmVSZW5kZXIpO1xuICAgICAgICAgICAgaWYgKHBhcmFMaW5lSW5kZXggPT09IGNvdW50ZXIgLSAxIHx8IHJlbmRlclVuaXRDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGFjZVdpZHRoID0gKDxudW1iZXI+cGFyYUxpbmVSZW5kZXIucmVjdC5tYXhXaWR0aCAtIHBhcmFMaW5lUmVuZGVyLnJlY3Qud2lkdGgpIC8gKHJlbmRlclVuaXRDb3VudCAtIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXRBbGlnbkp1c3RpZnkocGFyYUxpbmVSZW5kZXIsIDAsIHNwYWNlV2lkdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGluZGVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuKTnq6/lr7npvZBcbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEBwYXJhbSBjb3VudCBcbiAgICAgKiBAcGFyYW0gc3BhY2VXaWR0aCBcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFsaWduSnVzdGlmeShyZW5kZXI6IFJlbmRlck9iamVjdCwgY291bnQ6IG51bWJlciwgc3BhY2VXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclJlbmRlciA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb3VudCArPSB0aGlzLnNldEFsaWduSnVzdGlmeShjdXJyUmVuZGVyLCBjb3VudCwgc3BhY2VXaWR0aCk7XG4gICAgICAgICAgICAgICAgY3VyclJlbmRlci5yZWN0LnggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICB3aWR0aCArPSBjdXJyUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHdpZHRoO1xuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUZXh0R3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgaSA9IGNvdW50ID09PSAwID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgZm9yICg7IGkgPCByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci50ZXh0TWVhc3VyZXNbaV0uYWN0dWFsU2l6ZSA9IHJlbmRlci50ZXh0TWVhc3VyZXNbaV0uYWN0dWFsU2l6ZSArIHNwYWNlV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIucmVjdC53aWR0aCArPSBzcGFjZVdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmrrXokL3ooYzmuLLmn5PljZXkvY3kuKrmlbAs5a2X56ym6ZyA6KaB6K6h566X5Li65a2X56ym6ZW/5bqmXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSZW5kZXJVbml0TGVuZ3RoKHBhcmFMaW5lOiBSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICBpZiAocGFyYUxpbmUgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocGFyYUxpbmUgaW5zdGFuY2VvZiBUZXh0R3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYUxpbmUudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYUxpbmUgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFMaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY291bnQgKz0gdGhpcy5nZXRSZW5kZXJVbml0TGVuZ3RoKHBhcmFMaW5lLmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWIsOi+vuiuoeeul+S9jee9ricpXG4gICAgfVxuXG5cbiAgICBnZXRJbmxpbmVHcm91cFJlbmRlckl0ZW0oaXRlbTogSW5saW5lR3JvdXBFbGVtZW50KTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGlubGluZUdyb3VwUmVuZGVyID0gaXRlbS5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCkgYXMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgIGlmICghaW5saW5lR3JvdXBSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBpdGVtLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY2hpbGQuYmVnaW5NZWFzdXJlKCk7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNoaWxkLm1lYXN1cmVSZW5kZXIgPSBjaGlsZC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm1lYXN1cmVSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5saW5lR3JvdXBSZW5kZXIuYWRkQ2hpbGQoY2hpbGQubWVhc3VyZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZVJlbmRlciA9IHRoaXMuZ2V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5tZWFzdXJlUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlubGluZUdyb3VwUmVuZGVyLmFkZENoaWxkKGl0ZW0ubWVhc3VyZVJlbmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmVJbmxpbmVHcm91cFJlbmRlcihpbmxpbmVHcm91cFJlbmRlcik7XG4gICAgICAgIC8v6ZmQ5Yi25pyA5bCP6ZW/5bqmXG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkge1xuICAgICAgICAgICAgLy/pnIDopoHloavlhYVudWxsLXRleHRcbiAgICAgICAgICAgIGlmIChpdGVtLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bGxUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBudWxsVGV4dC5pc0RlY29yYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBudWxsVGV4dC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VUZXh0UHJvcHMgPSAoPGFueT5pdGVtKS5wcm9wcyBhcyBEYXRhRWxlQmFzZVRleHRQcm9wcztcbiAgICAgICAgICAgICAgICBudWxsVGV4dC50ZXh0ID0gYmFzZVRleHRQcm9wcy5udWxsVGV4dCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgYmFzZVRleHRQcm9wcy5udWxsVGV4dFByb3BzLmNsb25lKG51bGxUZXh0LnByb3BzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBudWxsVGV4dFJlbmRlciA9IG51bGxUZXh0LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KTtcbiAgICAgICAgICAgICAgICBpbmxpbmVHcm91cFJlbmRlci5pbnNlcnRDaGlsZChudWxsVGV4dFJlbmRlciwgMSk7XG4gICAgICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIoaW5saW5lR3JvdXBSZW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSAoPGFueT5pdGVtKS5wcm9wcyBhcyBEYXRhRWxlQmFzZVByb3BzO1xuICAgICAgICAgICAgbGV0IG1pbkxlbmd0aCA9IHByb3BzLm1pbkxlbmd0aCA/PyAxNDtcbiAgICAgICAgICAgIG1pbkxlbmd0aCA9IG1pbkxlbmd0aCA8IDE0ID8gMTQgOiBtaW5MZW5ndGg7XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXAgJiYgaW5saW5lR3JvdXBSZW5kZXIucmVjdC53aWR0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGxOdWxsU3BhY2UgPSBuZXcgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCgpO1xuICAgICAgICAgICAgICAgIGZpbGxOdWxsU3BhY2UucmVjdC53aWR0aCA9IG1pbkxlbmd0aCAtIGlubGluZUdyb3VwUmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgZmlsbE51bGxTcGFjZS5yZWN0LmhlaWdodCA9IGlubGluZUdyb3VwUmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlubGluZUdyb3VwUmVuZGVyLmluc2VydENoaWxkKGZpbGxOdWxsU3BhY2UsIGlubGluZUdyb3VwUmVuZGVyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIoaW5saW5lR3JvdXBSZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmxpbmVHcm91cFJlbmRlcjtcbiAgICB9XG5cblxuICAgIGN1dFJlbmRlckl0ZW0ocmVuZGVyOiBSZW5kZXJPYmplY3QsIG5leHRSZW5kZXI6IFJlbmRlck9iamVjdCwgbGltaXRXaWR0aDogbnVtYmVyLCBsaW5lRW1wdHk6IGJvb2xlYW4sIGluQ2xvc2VCb2R5OiBib29sZWFuKTogSUN1dExpbmVEYXRhIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXIucmVjdC53aWR0aCA+IGxpbWl0V2lkdGggJiYgcmVuZGVyIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3V0VGV4dFJlbmRlcihyZW5kZXIsIG5leHRSZW5kZXIsIGxpbWl0V2lkdGgsIGxpbmVFbXB0eSwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXRGaWxsTnVsbFJlbmRlcihyZW5kZXIsIGxpbWl0V2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlci5yZWN0LndpZHRoIDwgbGltaXRXaWR0aCB8fCBsaW5lRW1wdHkgfHwgcmVuZGVyLmVsZW1lbnQudHlwZSA9PT0gJ2JyJyB8fCByZW5kZXIuZWxlbWVudC50eXBlID09PSAncHN5bScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IHJlbmRlciwgbGFzdEl0ZW06IG51bGwsIGJyOiByZW5kZXIuZWxlbWVudC50eXBlID09PSAnYnInIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH07XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyIGluc3RhbmNlb2YgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1dElubGluZUdyb3VwUmVuZGVySXRlbShyZW5kZXIsIGxpbWl0V2lkdGgsIGxpbmVFbXB0eSwgaW5DbG9zZUJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5Yiw6L6+6K6h566X6L6555WMJylcbiAgICB9XG5cbiAgICBjdXRUZXh0UmVuZGVyKHJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCBuZXh0UmVuZGVyOiBSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlciwgbGluZUVtcHR5OiBib29sZWFuLCBpbkNsb3NlQm9keTogYm9vbGVhbik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGxldCBzdW1XaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGN1dFJlbmRlciA9IHJlbmRlci5jbG9uZSgpIGFzIFRleHRHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgY3V0UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggPSAwO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoOyBpIDwgcmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3VtV2lkdGggKz0gcmVuZGVyLnRleHRNZWFzdXJlc1tpXS5hY3R1YWxTaXplO1xuICAgICAgICAgICAgaWYgKHN1bVdpZHRoID4gbGltaXRXaWR0aCkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lRW1wdHkgJiYgaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lkI7nva7moIfngrnlpITnkIZcbiAgICAgICAgaSA9IHRoaXMucGF0Y2hIYW5kbGVQb3N0UHVuY3R1YXRpb24ocmVuZGVyLCBuZXh0UmVuZGVyLCBpLCBpbkNsb3NlQm9keSwgbGluZUVtcHR5KTtcbiAgICAgICAgLy/liY3nva7moIfngrnlpITnkIZcbiAgICAgICAgaSA9IHRoaXMucGF0Y2hIYW5kbGVMZWFkaW5nUHVuY3R1YXRpb24ocmVuZGVyLCBpLCBsaW5lRW1wdHkpO1xuICAgICAgICBpZiAoaSA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH07XG4gICAgICAgIH1cblxuICAgICAgICBjdXRSZW5kZXIudGV4dE1lYXN1cmVzID0gcmVuZGVyLnRleHRNZWFzdXJlcy5zcGxpY2UoMCwgaSk7XG4gICAgICAgIHJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgIGN1dFJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogY3V0UmVuZGVyLCBsYXN0SXRlbTogcmVuZGVyLCBicjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhuWJjee9ruagh+eCuSzliY3nva7moIfngrnkuI3og73lh7rnjrDlnKjmnKvlsL5cbiAgICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICAqIEBwYXJhbSBpIFxuICAgICAqL1xuICAgIHByaXZhdGUgcGF0Y2hIYW5kbGVMZWFkaW5nUHVuY3R1YXRpb24ocmVuZGVyOiBUZXh0R3JvdXBSZW5kZXJPYmplY3QsIGk6IG51bWJlciwgbGluZUVtcHR5OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGkgPT09IDEgJiYgbGluZUVtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250YWluTGVhZGluZ1B1bmN0dWF0aW9uKHJlbmRlci50ZXh0TWVhc3VyZXNbaV0/LmNoYXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gaS0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhuWQjue9ruagh+eCue+8jOWQjue9ruagh+eCueS4jeiDveWHuueOsOWcqOihjOmmllxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHBhcmFtIGkgXG4gICAgICogQHBhcmFtIGxpbmVFbXB0eSBcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhdGNoSGFuZGxlUG9zdFB1bmN0dWF0aW9uKHJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCBuZXh0UmVuZGVyOiBSZW5kZXJPYmplY3QsIGk6IG51bWJlciwgaW5DbG9zZUJvZHk6IGJvb2xlYW4sIGxpbmVFbXB0eTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIGlmIChpID09PSByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8v57Sn6Lef552A55qE5a2X56ym5YyF5ZCr5ZCO572u5qCH54K5XG4gICAgICAgICAgICBpZiAodGhpcy5jb250YWluZXJTdGFydFN5bWJvbEluVGV4dFN0YXJ0KG5leHRSZW5kZXIpKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbkNsb3NlQm9keSAmJiB0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpXT8uY2hhcikpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpICsgMV0/LmNoYXIpKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSA8PSAxKSB7XG4gICAgICAgICAgICAgICAgLy9kZWJ1Z2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpID4gMSAmJiB0aGlzLmNvbnRhaW5Qb3N0UHVuY3R1YXRpb24ocmVuZGVyLnRleHRNZWFzdXJlc1tpXT8uY2hhcikpIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5YyF5ZCr5ZCO572u5qCH54K5XG4gICAgICogQHBhcmFtIHN0ciBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbnRhaW5Qb3N0UHVuY3R1YXRpb24oc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICchKSwuOjs/XX3CqMK3y4fLieKAleKAluKAmeKAneKApuKItuOAgeOAguOAg+OAheOAieOAi+OAjeOAj+OAkeOAleOAl++8ge+8gu+8h++8ie+8jO+8ju+8mu+8m++8n++8ve+9gO+9nO+9ne+9nu+/oCcuaW5kZXhPZihzdHIpID4gLTE7XG4gICAgfVxuXG4gICAgLy/mmK/lkKbljIXlkKvliY3nva7moIfngrlcbiAgICBwcml2YXRlIGNvbnRhaW5MZWFkaW5nUHVuY3R1YXRpb24oc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICfigJjigJzjgIjjgIrjgIzjgI7jgJDjgJTjgJbvvIjvvLvvvZvvv6EnLmluZGV4T2Yoc3RyKSA+IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWh+acrOW8gOWktOaYr+WQpuWMheWQq+WQjue9ruagh+eCuVxuICAgICAqIEBwYXJhbSByZW5kZXIgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb250YWluZXJTdGFydFN5bWJvbEluVGV4dFN0YXJ0KHJlbmRlcjogUmVuZGVyT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIC8vcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGV4dEdyb3VwUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpblBvc3RQdW5jdHVhdGlvbihyZW5kZXIudGV4dE1lYXN1cmVzWzBdLmNoYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjdXRGaWxsTnVsbFJlbmRlcihyZW5kZXI6IEZpbGxOdWxsU3BhY2VSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlcik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGlmIChsaW1pdFdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IG51bGwsIGxhc3RJdGVtOiBudWxsIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyLnJlY3Qud2lkdGggPiBsaW1pdFdpZHRoKSB7XG4gICAgICAgICAgICBjb25zdCBjdXRSZW5kZXIgPSBuZXcgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCgpO1xuICAgICAgICAgICAgY3V0UmVuZGVyLnJlY3Qud2lkdGggPSBsaW1pdFdpZHRoO1xuICAgICAgICAgICAgY3V0UmVuZGVyLnJlY3QuaGVpZ2h0ID0gcmVuZGVyLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSByZW5kZXIucmVjdC53aWR0aCAtIGxpbWl0V2lkdGg7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IGN1dFJlbmRlciwgbGFzdEl0ZW06IHJlbmRlciB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBmaXJzdEl0ZW06IHJlbmRlciwgbGFzdEl0ZW06IG51bGwgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGM5YaF57yW57uE5YWD57Sg6LaF5Ye66KGM5YaF5Y+v55So56m66Ze077yM6ZyA6KaB5qC55o2u5Ymp5L2Z56m66Ze06ZW/5bqm6L+b6KGM5oiq5patXG4gICAgICovXG4gICAgY3V0SW5saW5lR3JvdXBSZW5kZXJJdGVtKHJlbmRlcjogSW5saW5lR3JvdXBSZW5kZXJPYmplY3QsIGxpbWl0V2lkdGg6IG51bWJlciwgZW1wdHlMaW5lOiBib29sZWFuLCBpbkNsb3NlQm9keTogYm9vbGVhbik6IElDdXRMaW5lRGF0YSB7XG4gICAgICAgIGNvbnN0IGN1dFJlbmRlciA9IHJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ3R4KSBhcyBJbmxpbmVHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICBsZXQgYnIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4ucmVuZGVyLmdldEl0ZW1zKCldO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmICh4ICsgY2hpbGQucmVjdC53aWR0aCA+IGxpbWl0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaXJzdEl0ZW0sIGxhc3RJdGVtLCBicjogY2hpbGRCciB9ID0gdGhpcy5jdXRSZW5kZXJJdGVtKGNoaWxkLCBpdGVtc1tpICsgMV0sIGxpbWl0V2lkdGggLSB4LCBlbXB0eUxpbmUgJiYgY3V0UmVuZGVyLmxlbmd0aCA9PT0gMCwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXRSZW5kZXIuYWRkQ2hpbGQoZmlyc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXRlbXMucHVzaChsYXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pdGVtcy5zcGxpY2UoaSArIDEsIDAsIGxhc3RJdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyID0gY2hpbGRCciB8fCBicjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgY3V0UmVuZGVyLmFkZENoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy/ova/mjaLooYznrKZcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudCAmJiBjaGlsZC5lbGVtZW50LnR5cGUgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICAgICAgYnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoeCArIGNoaWxkLnJlY3Qud2lkdGggPiBsaW1pdFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlyc3RJdGVtLCBicjogY2hpbGRCciB9ID0gdGhpcy5jdXRJbmxpbmVHcm91cFJlbmRlckl0ZW0oY2hpbGQsIGxpbWl0V2lkdGggLSB4LCBlbXB0eUxpbmUgJiYgY3V0UmVuZGVyLmxlbmd0aCA9PT0gMCwgaW5DbG9zZUJvZHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXRSZW5kZXIuYWRkQ2hpbGQoZmlyc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBiciA9IGNoaWxkQnIgfHwgYnI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGN1dFJlbmRlci5hZGRDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCArPSBjaGlsZC5yZWN0LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3V0UmVuZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZmlyc3RJdGVtOiBudWxsLCBsYXN0SXRlbTogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKGN1dFJlbmRlcik7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZUlubGluZUdyb3VwUmVuZGVyKHJlbmRlcik7XG4gICAgICAgIHJldHVybiB7IGZpcnN0SXRlbTogY3V0UmVuZGVyLCBsYXN0SXRlbTogcmVuZGVyLmxlbmd0aCA/IHJlbmRlciA6IG51bGwsIGJyIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5pS55rWL6YeP5a6M5q+V5ZCO55qE5YWD57Sg54q25oCBXG4gICAgICogQHBhcmFtIGVsZSBcbiAgICAgKi9cbiAgICBzZXRNZWFzdXJlQ29tcGxldGVkTW9kaWZ5RmxhZyhlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNZWFzdXJlQ29tcGxldGVkTW9kaWZ5RmxhZyhlbGUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsZS5tb2RpZnlGbGFnID0gTW9kaWZ5RmxhZy5Ob25lO1xuICAgIH1cblxuICAgIGNsZWFyUGFpbnRDYWNoZShlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgZWxlLmJlZ2luTWVhc3VyZSgpO1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyUGFpbnRDYWNoZShlbGUuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5kTWVhc3VyZXMoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kTWVhc3VyZXMoZWxlLmdldENoaWxkKGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbiIsImltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQsIExlYWZFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0VsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGUgfSBmcm9tICcuL2RvY3VtZW50LXNlbGVjdGlvbidcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5cblxuZXhwb3J0IGNsYXNzIFJhbmdlVXRpbCB7XG5cbiAgICBzdGF0aWMgZ2V0U2VsY3Rpb25SYW5nZShzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyLCBlbmRDb250cm9sOiBMZWFmRWxlbWVudCwgZW5kT2Zmc2V0OiBudW1iZXIsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGlmIChhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgfHwgYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0YkVsZW1lbnQgPSBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQgPyBhbmNlc3RvckNvbW1vbkNvbnRyb2wgOiBhbmNlc3RvckNvbW1vbkNvbnRyb2wucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhYmxlU2VsZWN0aW9uUmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCB0YkVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgPT09IGVuZENvbnRyb2wgJiYgc3RhcnRDb250cm9sLnBhcmVudCA9PT0gYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb2xsYXBzZWRSYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSYW5nZSA9IHRoaXMuZ2V0U3RhcnRGb3JiYWNrVHJlZURhdGEoc3RhcnRDb250cm9sLCBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIG51bGwsIHN0YXJ0T2Zmc2V0KS5zZWxlY3RlZENoaWxkcmVuWzBdO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IHRoaXMuZ2V0RW5kRm9yd2FyZFRyZWVEYXRhKGVuZENvbnRyb2wsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgbnVsbCwgZW5kT2Zmc2V0KS5zZWxlY3RlZENoaWxkcmVuWzBdO1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gYW5jZXN0b3JDb21tb25Db250cm9sLmdldENoaWxkSW5kZXgoc3RhcnRSYW5nZS50YXJnZXQpO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5nZXRDaGlsZEluZGV4KGVuZFJhbmdlLnRhcmdldCk7XG4gICAgICAgIGNvbnN0IGNvbW1vblJhbmdlID0gdGhpcy5nZXRDaGlsZFRyZWVEYXRhKGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRJbmRleCArIDEsIGVuZEluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMucmFuZ2VFcXVhbHMoc3RhcnRSYW5nZSwgZW5kUmFuZ2UpKSB7XG4gICAgICAgICAgICBjb21tb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLnVuc2hpZnQoc3RhcnRSYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21tb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLnVuc2hpZnQoc3RhcnRSYW5nZSk7XG4gICAgICAgICAgICBjb21tb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goZW5kUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQoY29tbW9uUmFuZ2UpO1xuICAgICAgICByZXR1cm4gY29tbW9uUmFuZ2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldENvbGxhcHNlZFJhbmdlKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZE9mZnNldDogbnVtYmVyLCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgIHRhcmdldDogYW5jZXN0b3JDb21tb25Db250cm9sLFxuICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpLFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIDEsXG4gICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbdGhpcy5nZXRDaGlsZFRyZWVEYXRhKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCldXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChyYW5nZSk7XG4gICAgICAgIHJldHVybiByYW5nZTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluihqOagvOmAieWMuueahOWGheWuuVxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2wgXG4gICAgICogQHBhcmFtIHN0YXJ0T2Zmc2V0IFxuICAgICAqIEBwYXJhbSBlbmRDb250cm9sIFxuICAgICAqIEBwYXJhbSBlbmRPZmZzZXQgXG4gICAgICogQHBhcmFtIHRiIFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWJsZVNlbGVjdGlvblJhbmdlKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIGVuZENvbnRyb2w6IExlYWZFbGVtZW50LCBlbmRPZmZzZXQ6IG51bWJlciwgdGI6IFRhYmxlRWxlbWVudCk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBlbmRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVuZENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoc3RhcnRDZWxsICYmIGVuZENlbGwgJiYgc3RhcnRDZWxsLnBhcmVudC5wYXJlbnQgPT09IHRiICYmIGVuZENlbGwucGFyZW50LnBhcmVudCA9PT0gdGIpIHtcbiAgICAgICAgICAgIGxldCBzdGFydFJvd0luZGV4ID0gc3RhcnRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICAgICAgbGV0IGVuZFJvd0luZGV4ID0gZW5kQ2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgICAgIGxldCBzdGFydENvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICBsZXQgZW5kQ29sSW5kZXggPSBlbmRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDb2xJbmRleCA+IGVuZENvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgW3N0YXJ0Q29sSW5kZXgsIGVuZENvbEluZGV4XSA9IFtlbmRDb2xJbmRleCwgc3RhcnRDb2xJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhcnRSb3dJbmRleCA+IGVuZFJvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgW3N0YXJ0Um93SW5kZXgsIGVuZFJvd0luZGV4XSA9IFtlbmRSb3dJbmRleCwgc3RhcnRSb3dJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZWdpb24gPSB7IHN0YXJ0Um93OiBzdGFydFJvd0luZGV4LCBlbmRSb3c6IGVuZFJvd0luZGV4LCBzdGFydENvbDogc3RhcnRDb2xJbmRleCwgZW5kQ29sOiBlbmRDb2xJbmRleCB9Oy8vdGhpcy5nZXRUYWJsZVJlY3RTZWxlY3RlZFJlZ2lvbih0YiwgeyBzdGFydFJvdzogc3RhcnRSb3dJbmRleCwgZW5kUm93OiBlbmRSb3dJbmRleCwgc3RhcnRDb2w6IHN0YXJ0Q29sSW5kZXgsIGVuZENvbDogZW5kQ29sSW5kZXggfSk7XG4gICAgICAgICAgICBzdGFydFJvd0luZGV4ID0gcmVnaW9uLnN0YXJ0Um93O1xuICAgICAgICAgICAgZW5kUm93SW5kZXggPSByZWdpb24uZW5kUm93O1xuICAgICAgICAgICAgc3RhcnRDb2xJbmRleCA9IHJlZ2lvbi5zdGFydENvbDtcbiAgICAgICAgICAgIGVuZENvbEluZGV4ID0gcmVnaW9uLmVuZENvbDtcbiAgICAgICAgICAgIGNvbnN0IHJvd1JhbmdlczogQXJyYXk8U2VsZWN0aW9uQ29udGVudFJhbmdlPiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0Um93SW5kZXg7IGkgPD0gZW5kUm93SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSYW5nZXM6IEFycmF5PFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0Q29sSW5kZXg7IGogPD0gZW5kQ29sSW5kZXg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxGaXJzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChjZWxsKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbExhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChjZWxsKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsRmlyc3RMZWFmRWxlbWVudCAmJiAhY2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogY2VsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFJhbmdlID0gdGhpcy5nZXRTZWxjdGlvblJhbmdlKGNlbGxGaXJzdExlYWZFbGVtZW50LCAwLCBjZWxsTGFzdExlYWZFbGVtZW50LCAxLCBjZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSYW5nZXMucHVzaChjZWxsUmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1JhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogcm93LFxuICAgICAgICAgICAgICAgICAgICBpc0Z1bGxTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydENvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGVuZENvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbLi4uY2VsbFJhbmdlc11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJvd1JhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRDb2xJbmRleCA9PT0gMCAmJiBlbmRDb2xJbmRleCA9PT0gcm93Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgcm93UmFuZ2VzLnB1c2gocm93UmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGFibGVSYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlID0ge1xuICAgICAgICAgICAgICAgIHRhcmdldDogdGIsXG4gICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydFJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGVuZE9mZnNldDogZW5kUm93SW5kZXgsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbjogWy4uLnJvd1Jhbmdlc11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJsZVJhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRSb3dJbmRleCA9PT0gMCAmJiBlbmRSb3dJbmRleCA9PT0gdGIubGVuZ3RoIC0gMSAmJiB0YWJsZVJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4uZXZlcnkoaXRlbSA9PiBpdGVtLmlzRnVsbFNlbGVjdGVkKTtcbiAgICAgICAgICAgIHJldHVybiB0YWJsZVJhbmdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCflvZPliY3ljZXlhYPmoLzlkozooajmoLzkuI3lr7nlupQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTdGFydEZvcmJhY2tUcmVlRGF0YShjb250cm9sOiBFbGVtZW50LCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQsIGNoaWxkRGF0YTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbCwgb2Zmc2V0OiBudW1iZXIpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ICE9PSBhbmNlc3RvckNvbW1vbkNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRDaGlsZFRyZWVEYXRhKHBhcmVudCwgcGFyZW50LmdldENoaWxkSW5kZXgoY29udHJvbCkgKyAxLCAtMSk7XG4gICAgICAgICAgICBpZiAoY2hpbGREYXRhKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi51bnNoaWZ0KGNoaWxkRGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4udW5zaGlmdCh0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgb2Zmc2V0LCAtMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChyYW5nZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFydEZvcmJhY2tUcmVlRGF0YShwYXJlbnQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgcmFuZ2UsIC05OSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvclJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBhbmNlc3RvckNvbW1vbkNvbnRyb2wsXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZE9mZnNldDogLTEsXG4gICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjaGlsZERhdGEgPSB0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgb2Zmc2V0LCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvclJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ucHVzaChjaGlsZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZUZ1bGxTZWxlY3RlZChhbmNlc3RvclJhbmdlKTtcbiAgICAgICAgICAgIHJldHVybiBhbmNlc3RvclJhbmdlO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEVuZEZvcndhcmRUcmVlRGF0YShjb250cm9sOiBFbGVtZW50LCBhbmNlc3RvckNvbW1vbkNvbnRyb2w6IEJyYW5jaEVsZW1lbnQsIGNoaWxkRGF0YTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbCwgb2Zmc2V0OiBudW1iZXIpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCAhPT0gYW5jZXN0b3JDb21tb25Db250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShwYXJlbnQsIDAsIHBhcmVudC5nZXRDaGlsZEluZGV4KGNvbnRyb2wpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goY2hpbGREYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShjb250cm9sLCAwLCBvZmZzZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQocmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW5kRm9yd2FyZFRyZWVEYXRhKHBhcmVudCwgYW5jZXN0b3JDb21tb25Db250cm9sLCByYW5nZSwgLTk5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yUmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSA9IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGFuY2VzdG9yQ29tbW9uQ29udHJvbCxcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogMCxcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFjaGlsZERhdGEpIHtcbiAgICAgICAgICAgICAgICBjaGlsZERhdGEgPSB0aGlzLmdldENoaWxkVHJlZURhdGEoY29udHJvbCwgMCwgb2Zmc2V0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5jZXN0b3JSYW5nZS5zZWxlY3RlZENoaWxkcmVuLnB1c2goY2hpbGREYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VGdWxsU2VsZWN0ZWQoYW5jZXN0b3JSYW5nZSk7XG4gICAgICAgICAgICByZXR1cm4gYW5jZXN0b3JSYW5nZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldENoaWxkVHJlZURhdGEoY29udHJvbDogRWxlbWVudCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2Uge1xuICAgICAgICBjb25zdCByYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiBjb250cm9sLFxuICAgICAgICAgICAgaXNGdWxsU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0LFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBlbmQsXG4gICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuOiBbXVxuICAgICAgICB9O1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5lbmRPZmZzZXQgPSBlbmQgPT09IC0xID8gY29udHJvbC50ZXh0Lmxlbmd0aCA6IGVuZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID0gZW5kID09PSAtMSA/IDEgOiBlbmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZW5kID0gZW5kID09PSAtMSA/IGNvbnRyb2wubGVuZ3RoIDogZW5kO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKHRoaXMuZ2V0Q2hpbGRUcmVlRGF0YShjaGlsZCwgMCwgLTEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFJhbmdlRnVsbFNlbGVjdGVkKHJhbmdlKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNldFJhbmdlRnVsbFNlbGVjdGVkKHNlbGVjdGlvblJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfSA9IHNlbGVjdGlvblJhbmdlO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IHN0YXJ0T2Zmc2V0ID09PSAwICYmIGVuZE9mZnNldCA9PT0gc2VsZWN0aW9uUmFuZ2UudGFyZ2V0LnRleHQubGVuZ3RoXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmlzRnVsbFNlbGVjdGVkID0gc3RhcnRPZmZzZXQgPT09IDAgJiYgZW5kT2Zmc2V0ID09PSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHNlbGVjdGlvblJhbmdlLnRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2hpbGRyZW4gPSBzZWxlY3Rpb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuO1xuICAgICAgICAgICAgLy/ooqvlkIjlubbnmoR0YWJsZS1jZWxs77yM5YaF5a655Li6ZW1wdHlcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCA9PT0gMCAmJiBzZWxlY3Rpb25SYW5nZS5lbmRPZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmlzRnVsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXRlbSA9IHNlbGVjdGVkQ2hpbGRyZW5bMF07XG4gICAgICAgICAgICBjb25zdCBmaXJzdEl0ZW1JbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGZpcnN0SXRlbS50YXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBzZWxlY3RlZENoaWxkcmVuW3NlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbUluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgobGFzdEl0ZW0udGFyZ2V0KTtcbiAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5lbmRPZmZzZXQgPSBsYXN0SXRlbUluZGV4O1xuICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSBmaXJzdEl0ZW1JbmRleCA9PT0gMCAmJiBmaXJzdEl0ZW0uaXNGdWxsU2VsZWN0ZWQgJiYgbGFzdEl0ZW1JbmRleCA9PT0gcGFyZW50Lmxlbmd0aCAtIDEgJiYgbGFzdEl0ZW0uaXNGdWxsU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZ2VFcXVhbHMoc2VsUmFuZ2UxOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIHNlbFJhbmdlMjogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzZWxSYW5nZTEudGFyZ2V0ID09PSBzZWxSYW5nZTIudGFyZ2V0ICYmIHNlbFJhbmdlMS5zdGFydE9mZnNldCA9PT0gc2VsUmFuZ2UyLnN0YXJ0T2Zmc2V0ICYmIHNlbFJhbmdlMS5lbmRPZmZzZXQgPT09IHNlbFJhbmdlMi5lbmRPZmZzZXQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7pgInljLrojIPlm7Tmm7TmraPpgInljLrlhoXlrrnnirbmgIFcbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWRSYW5nZSBcbiAgICAgKiBAcGFyYW0gc2VsZWN0aW9uU3RhdGUgXG4gICAgICovXG4gICAgc3RhdGljIGZpeFNlbGVjdGlvblN0YXRlQnlSYW5nZShzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIHNlbGVjdGVkUmFuZ2UgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSB0aGlzLmdldFN0YXJ0UmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IHRoaXMuZ2V0RW5kUmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICBpZiAoc3RhcnRSYW5nZS50YXJnZXQgIT09IHN0YXJ0Q29udHJvbCB8fCBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0ICE9PSBzdGFydE9mZnNldCB8fCBlbmRSYW5nZS50YXJnZXQgIT09IGVuZENvbnRyb2wgfHwgZW5kUmFuZ2UuZW5kT2Zmc2V0ICE9PSBlbmRPZmZzZXQpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBzc1JhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgICAgICBzc1JhbmdlLnNldFN0YXJ0KHN0YXJ0UmFuZ2UudGFyZ2V0LCBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgIHNzUmFuZ2Uuc2V0RW5kKGVuZFJhbmdlLnRhcmdldCwgZW5kUmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKHNzUmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRTdGFydFJhbmdlVGFyZ2V0KHBhcmVudFJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfCBudWxsIHtcbiAgICAgICAgaWYgKHBhcmVudFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50UmFuZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudFJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldFN0YXJ0UmFuZ2VUYXJnZXQocGFyZW50UmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RW5kUmFuZ2VUYXJnZXQocGFyZW50UmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB8IG51bGwge1xuICAgICAgICBpZiAocGFyZW50UmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRSYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBwYXJlbnRSYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRFbmRSYW5nZVRhcmdldChwYXJlbnRSYW5nZS5zZWxlY3RlZENoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICog5b6q546v6YCS5b2S5omn6KGM6YCJ5Yy65a+56LGh5pa55rOVXG4gICAgKiBAcGFyYW0gcmFuZ2UgXG4gICAgKiBAcGFyYW0gaGFuZGxlciBcbiAgICAqL1xuICAgIHN0YXRpYyByZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgaGFuZGxlcjogKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgaGFuZGxlcihyYW5nZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbltpXSwgaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3lhYPntKDmmK/lkKbooqvlrozlhajpgInkuK1cbiAgICAgKiBAcGFyYW0gcmFuZ2UgXG4gICAgICovXG4gICAgc3RhdGljIGNoZWNrRWxlbWVudEZ1bGxJblJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIGVsZTogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVjdXJzaW9uVHJhdmVyc2FsUmFuZ2VIYW5kbGVyKHJhbmdlLCAoY2hpbGRSYW5nZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkUmFuZ2UudGFyZ2V0ID09PSBlbGUgJiYgY2hpbGRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxufSIsImltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEVsZW1lbnQsIExlYWZFbGVtZW50LCBvbmNlVGFzaywgUG9zaXRpb24sIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgQnJhbmNoUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgQ29tbWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IENvbW1lbnRzVXRpbCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQsIFRleHRHcm91cFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFJhbmdlVXRpbCB9IGZyb20gXCIuL3JhbmdlLXV0aWxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcmludE9wdGlvbnMge1xuICAgIGJlZm9yZVByaW50UGFnZTogKHBhZ2VJbmRleDogbnVtYmVyLCBwYWdlQ291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgICBhZnRlclByaW50UGFnZTogKHBhZ2VJbmRleDogbnVtYmVyLCBwYWdlQ291bnQ6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRQYWludCB7XG4gICAgLy/lrZjlgqjlhYPntKDlkoznu5jliLblhYPntKDnmoTmmKDlsITlhbPns7tcbiAgICAvL3BhaW50RWxlbWVudE1hcDogTWFwPEVsZW1lbnQsIEFycmF5PFJlbmRlck9iamVjdD4+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc2VsZWN0ZWRTZXRzITogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT47XG4gICAgcHJpdmF0ZSBtZWFzdXJlQ29tbUNvbnRhaW5lciE6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgIHByaXZhdGUgcmVQYWludCE6IGJvb2xlYW47XG4gICAgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IGRvY0N0eC52aWV3T3B0aW9ucztcbiAgICB9XG5cbiAgICAvL+WuoemYheagh+iusOeahOS9jee9ruWvueW6lOWFs+ezu1xuICAgIHBhaW50Q29tbU1hcCE6IEFycmF5PHsgZWxlOiBDb21tZW50RWxlbWVudCwgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHBvczogUG9zaXRpb24gfT47XG4gICAgcGFpbnRQYWdlUG9zITogUG9zaXRpb247XG5cbiAgICBkcmF3UGFnZXMoZG9jQ29udGFpbmVyOiBEb2N1bWVudENvbnRhaW5lclJlbmRlciwgc2VsZWN0ZWRTZXRzOiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPiwgbWVhc3VyZUNvbW1Db250YWluZXI6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0LCByZVBhaW50OiBib29sZWFuKTogdm9pZCB7XG5cbiAgICAgICAgdGhpcy5yZVBhaW50ID0gcmVQYWludDtcbiAgICAgICAgdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lciA9IG1lYXN1cmVDb21tQ29udGFpbmVyO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2V0cyA9IHNlbGVjdGVkU2V0cztcbiAgICAgICAgY29uc3QgcGFnZUNvdW50ID0gZG9jQ29udGFpbmVyLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY29udGFpbmVyUG9zID0geyB4OiBkb2NDb250YWluZXIucmVjdC54LCB5OiBkb2NDb250YWluZXIucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZIH07XG4gICAgICAgIGNvbnN0IG5leHRSZW5kZXJGbiA9IG9uY2VUYXNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBkb2NDb250YWluZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB4OiByeCwgeTogcnksIHdpZHRoOiBydywgaGVpZ2h0OiByaCB9ID0gZG9jLnJlY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBvc2l0aW9uID0geyB4OiByeCArIGNvbnRhaW5lclBvcy54LCB5OiByeSArIGNvbnRhaW5lclBvcy55IH07XG4gICAgICAgICAgICAgICAgbGV0IGluVmlld1BvcnQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSAoY3VyclBvc2l0aW9uLnkgPj0gMCAmJiBjdXJyUG9zaXRpb24ueSA8PSB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQgLyB0aGlzLnZpZXdPcHRpb25zLnNjYWxlKSB8fCAoY3VyclBvc2l0aW9uLnkgPCAwICYmIGN1cnJQb3NpdGlvbi55ICsgcmggPiAwKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9pblZpZXdQb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50Q29tbU1hcCA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRQYWdlUG9zID0gY3VyclBvc2l0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1JlbmRlck9iamVjdChkb2MsIGNvbnRhaW5lclBvcywgaW5WaWV3UG9ydCk7XG4gICAgICAgICAgICAgICAgaWYgKGluVmlld1BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VkUGFnZVBhaW50Q29tcGxldGVkKGRvYywgY29udGFpbmVyUG9zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGRvY0NvbnRhaW5lci5yZW5kZXIoe1xuICAgICAgICAgICAgcmVuZGVyOiB0aGlzLnJlbmRlckN0eCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgICAgIG5leHRSZW5kZXI6IG5leHRSZW5kZXJGbixcbiAgICAgICAgICAgIGRvY0N0eDogdGhpcy5kb2NDdHhcbiAgICAgICAgfSlcbiAgICAgICAgbmV4dFJlbmRlckZuKCk7XG4gICAgICAgIGNvbnN0IHsgc2NhbGUsIHZpZXdTZXR0aW5nczogeyB3aWR0aCwgaGVpZ2h0IH0gfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMucmVuZGVyQ3R4LmNvbW1pdCh7IHdpZHRoLCBoZWlnaHQsIHNjYWxlIH0pO1xuICAgIH1cblxuICAgIGRyYXdSZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3Q8YW55PiwgcGFyZW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0sIHBhcmVudEluVmlld1BvcnQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcmVuZGVyT2JqZWN0LmVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLnJlUGFpbnQgJiYgZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5wYWludFJlbmRlcnMucHVzaChyZW5kZXJPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgeDogcngsIHk6IHJ5LCB3aWR0aDogcncsIGhlaWdodDogcmggfSA9IHJlbmRlck9iamVjdC5yZWN0O1xuICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgcGFyZW50LngsIHk6IHJ5ICsgcGFyZW50LnkgfTtcbiAgICAgICAgLy/liKTmlq3lvZPliY3nu5jliLblhYPntKDmmK/lkKblnKjop4bnqpflhoVcbiAgICAgICAgbGV0IGluVmlld1BvcnQ6IGJvb2xlYW4gPSBwYXJlbnRJblZpZXdQb3J0O1xuICAgICAgICBpZiAocGFyZW50SW5WaWV3UG9ydCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmlld09wdGlvbnMuZnVsbFBhZ2VWaWV3KSB7XG4gICAgICAgICAgICBpblZpZXdQb3J0ID0gKGN1cnJQb3NpdGlvbi55ID49IDAgJiYgY3VyclBvc2l0aW9uLnkgPD0gdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MuaGVpZ2h0KSB8fCAoY3VyclBvc2l0aW9uLnkgPCAwICYmIGN1cnJQb3NpdGlvbi55ICsgcmggPiAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaW5WaWV3UG9ydCB8fCB0aGlzLnJlUGFpbnQpIHtcbiAgICAgICAgICAgICAgICAvL+WuoemYheeql+WPo+mHjeaWsOiuoeeul+S9jee9rlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cgJiYgcmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZWFzdXJlQ29tbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHNVdGlsLnJlbWVhc3VyZUNvbW1lbnRzKHRoaXMucmVuZGVyQ3R4LCByZW5kZXJPYmplY3QsIHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIsIHRoaXMucGFpbnRDb21tTWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdC5pc01lYXN1cmVDb21tID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0UmVuZGVyRm4gPSBvbmNlVGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd1JlbmRlck9iamVjdChjaGlsZCwgY3VyclBvc2l0aW9uLCBpblZpZXdQb3J0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJEYXRhOiBJUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGN1cnJQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJlbmRlcjogbmV4dFJlbmRlckZuLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHRoaXMucmVuZGVyQ3R4LFxuICAgICAgICAgICAgICAgICAgICBkb2NDdHg6IHRoaXMuZG9jQ3R4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdC5yZW5kZXIocmVuZGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgbmV4dFJlbmRlckZuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGluVmlld1BvcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJEYXRhOiBJUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGN1cnJQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJlbmRlcjogKCkgPT4geyB9LFxuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHRoaXMucmVuZGVyQ3R4LFxuICAgICAgICAgICAgICAgICAgICBkb2NDdHg6IHRoaXMuZG9jQ3R4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlbmRlck9iamVjdC5yZW5kZXIocmVuZGVyRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+WuoemYheS/oeaBr1xuICAgICAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdyAmJiBlbGVtZW50ICYmIGVsZW1lbnQudHlwZSA9PT0gJ2NvbW0nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbUVsZW1lbnQgPSBlbGVtZW50IGFzIENvbW1lbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChjb21tRWxlbWVudC5wcm9wcy5tYXJrVHlwZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICAvL+iOt+WPluW9k+WJjee7mOWItuWFg+e0oOebuOWvueS6juW9k+WJjemhteeahOWdkOagh1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50Q29tbU1hcC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZTogY29tbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvczogeyB4OiBjdXJyUG9zaXRpb24ueCAtIHRoaXMucGFpbnRQYWdlUG9zLngsIHk6IGN1cnJQb3NpdGlvbi55IC0gdGhpcy5wYWludFBhZ2VQb3MueSB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+WkhOeQhumAieS4reaLluiTnVxuICAgICAgICBpZiAoaW5WaWV3UG9ydCAmJiB0aGlzLnNlbGVjdGVkU2V0cy5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3RlZFNldHMuZ2V0KGVsZW1lbnQpIGFzIFNlbGVjdGlvbkNvbnRlbnRSYW5nZTtcbiAgICAgICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmxheVJlY3QgPSB7IHg6IGN1cnJQb3NpdGlvbi54LCB5OiBjdXJyUG9zaXRpb24ueSwgd2lkdGg6IHJ3LCBoZWlnaHQ6IHJoIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYUxpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyhyZW5kZXJPYmplY3QsIHsgeDogY3VyclBvc2l0aW9uLngsIHk6IGN1cnJQb3NpdGlvbi55IH0pO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3Qob3ZlcmxheVJlY3QueCwgcGFyYUxpbmVQb3MueSwgb3ZlcmxheVJlY3Qud2lkdGgsIHBhcmFMaW5lUG9zLmhlaWdodCwgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQgJiYgcmFuZ2UuZW5kT2Zmc2V0ID4gcmFuZ2Uuc3RhcnRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kWFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9IEVsZW1lbnRVdGlsLmdldFRleHRSZW5kZXJIb3JYKDxUZXh0R3JvdXBSZW5kZXJPYmplY3Q+cmVuZGVyT2JqZWN0LCByYW5nZS5zdGFydE9mZnNldCwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlSZWN0LndpZHRoID0gZW5kWCAtIHN0YXJ0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlSZWN0LnggKz0gc3RhcnRYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KG92ZXJsYXlSZWN0LngsIHBhcmFMaW5lUG9zLnksIG92ZXJsYXlSZWN0LndpZHRoLCBwYXJhTGluZVBvcy5oZWlnaHQsIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmlzRnVsbFNlbGVjdGVkICYmIGVsZW1lbnQudHlwZSA9PT0gJ3RiYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckN0eC5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QoY3VyclBvc2l0aW9uLngsIGN1cnJQb3NpdGlvbi55LCByZW5kZXJPYmplY3QucmVjdC53aWR0aCwgcmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0LCB0aGlzLnZpZXdPcHRpb25zLnNlbGVjdGlvbk92ZXJsYXlzQ29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpblZpZXdQb3J0ICYmIHRoaXMudmlld09wdGlvbnMuc2hvd1Jldmlld1dpbmRvdyAmJiB0aGlzLm1lYXN1cmVDb21tQ29udGFpbmVyLnNlbGVjdGVkU2V0LmhhcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QgfHwgcmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIuc2VsZWN0ZWRTZXQuZ2V0KGVsZW1lbnQpIGFzIFNlbGVjdGlvbkNvbnRlbnRSYW5nZTtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRSYW5nZVBhaW50Q29sb3IgPSAnI2ZmZDU5MSc7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tZWFzdXJlQ29tbUNvbnRhaW5lci5jb21tZW50UmFuZ2VTdGF0dXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRSYW5nZVN0YXR1cyA9IHRoaXMubWVhc3VyZUNvbW1Db250YWluZXIuY29tbWVudFJhbmdlU3RhdHVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRSYW5nZVN0YXR1cy5jb21tQ29udGVudC5mb2N1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSYW5nZVV0aWwuY2hlY2tFbGVtZW50RnVsbEluUmFuZ2UoY29tbWVudFJhbmdlU3RhdHVzLnJhbmdlLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50UmFuZ2VQYWludENvbG9yID0gJyNmYThjMTYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5UmVjdCA9IHsgeDogY3VyclBvc2l0aW9uLngsIHk6IGN1cnJQb3NpdGlvbi55LCB3aWR0aDogcncsIGhlaWdodDogcmggfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYUxpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyhyZW5kZXJPYmplY3QsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGN1cnJQb3NpdGlvbi54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY3VyclBvc2l0aW9uLnlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdChvdmVybGF5UmVjdC54LCBwYXJhTGluZVBvcy55LCBvdmVybGF5UmVjdC53aWR0aCwgcGFyYUxpbmVQb3MuaGVpZ2h0LCBjb21tZW50UmFuZ2VQYWludENvbG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkemhtemdoue7mOWItue7k+adn+S6i+S7tlxuICAgICAqL1xuICAgIGludm9rZWRQYWdlUGFpbnRDb21wbGV0ZWQocmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3QsIHBhcmVudDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgeDogcngsIHk6IHJ5LCB3aWR0aDogcncsIGhlaWdodDogcmggfSA9IHJlbmRlck9iamVjdC5yZWN0O1xuICAgICAgICBjb25zdCBjdXJyUG9zaXRpb24gPSB7IHg6IHJ4ICsgcGFyZW50LngsIHk6IHJ5ICsgcGFyZW50LnkgfTtcbiAgICAgICAgcmVuZGVyT2JqZWN0LnBhZ2VQYWludENvbXBsZXRlZCh7IHJlbmRlcjogdGhpcy5yZW5kZXJDdHgsIHBvc2l0aW9uOiBjdXJyUG9zaXRpb24sIGRvY0N0eDogdGhpcy5kb2NDdHggfSlcbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZWRQYWdlUGFpbnRDb21wbGV0ZWQocmVuZGVyT2JqZWN0LmdldENoaWxkKGkpLCBjdXJyUG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGRyYXdQYWdlKHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUsIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3QsIHBhcmVudDogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgeDogcngsIHk6IHJ5IH0gPSByZW5kZXJPYmplY3QucmVjdDtcbiAgICAgICAgY29uc3QgY3VyclBvc2l0aW9uID0geyB4OiByeCArIHBhcmVudC54LCB5OiByeSArIHBhcmVudC55IH07XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZW5kZXJGbiA9IG9uY2VUYXNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHJlbmRlck9iamVjdC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3UGFnZShyZW5kZXJDdHgsIGRvY0N0eCwgY2hpbGQsIGN1cnJQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJEYXRhOiBJUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogY3VyclBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIG5leHRSZW5kZXI6IG5leHRSZW5kZXJGbixcbiAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlckN0eCxcbiAgICAgICAgICAgICAgICBkb2NDdHhcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbmRlck9iamVjdC5yZW5kZXIocmVuZGVyRGF0YSk7XG4gICAgICAgICAgICBuZXh0UmVuZGVyRm4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJEYXRhOiBJUmVuZGVyRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogY3VyclBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIG5leHRSZW5kZXI6ICgpID0+IHsgfSxcbiAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlckN0eCxcbiAgICAgICAgICAgICAgICBkb2NDdHg6IGRvY0N0eFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyT2JqZWN0LnJlbmRlcihyZW5kZXJEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5cbiIsImltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaGVhZGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCwgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsIEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3QsIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBSZWN0LCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBUYWJsZVJvd0VsZW1lbnQsIFRhYmxlUm93UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCwgVGFibGVDZWxsUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCwgVGFibGVSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvcGFyYWdyYXBoL3AtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudFJlbmRlckN1dCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zOiBWaWV3T3B0aW9ucywgcHJpdmF0ZSByZW5kZXJDb250ZXh0OiBSZW5kZXJDb250ZXh0VHlwZSkgeyB9XG5cbiAgICBjdXRQYWdlKGRvY3VtZW50UmVuZGVyOiBEb2N1bWVudFJlbmRlck9iamVjdCwgZG9jdW1lbnRFbGVtZW50OiBEb2N1bWVudEVsZW1lbnQpOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZ1bGxQYWdlVmlldykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnVsbFZpZXdEb2NSZW5kZXIoZG9jdW1lbnRSZW5kZXIsIGRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVyUmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMCkgYXMgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGJvZHlSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgxKS5jbG9uZSgpIGFzIERvY3VtZW50Qm9keVJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgZm9vdGVyUmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMikgYXMgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRzUmVuZGVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMykgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVyTGluZSwgZm9vdGVyTGluZSB9ID0gZG9jdW1lbnRSZW5kZXI7XG4gICAgICAgIGxldCBib2R5TWFyZ2luVG9wID0gaGVhZGVyTGluZSArIGhlYWRlclJlbmRlci5yZWN0LmhlaWdodCArIDY7XG4gICAgICAgIGxldCBib2R5TWFyZ2luQm90dG9tID0gZm9vdGVyTGluZSArIGZvb3RlclJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgeyB0b3A6IGJvZHlUb3AsIGJvdHRvbTogYm9keUJvdHRvbSB9ID0gZG9jdW1lbnRSZW5kZXIucGFkZGluZztcbiAgICAgICAgYm9keU1hcmdpblRvcCA9IGJvZHlNYXJnaW5Ub3AgPiBib2R5VG9wID8gYm9keU1hcmdpblRvcCA6IGJvZHlUb3A7XG4gICAgICAgIGJvZHlNYXJnaW5Cb3R0b20gPSBib2R5TWFyZ2luQm90dG9tID4gYm9keUJvdHRvbSA/IGJvZHlNYXJnaW5Cb3R0b20gOiBib2R5Qm90dG9tO1xuICAgICAgICBkb2N1bWVudFJlbmRlci5wYWRkaW5nLnRvcCA9IGJvZHlNYXJnaW5Ub3A7XG4gICAgICAgIGRvY3VtZW50UmVuZGVyLnBhZGRpbmcuYm90dG9tID0gYm9keU1hcmdpbkJvdHRvbTtcbiAgICAgICAgY29uc3QgYm9keUxpbWl0UmVjdCA9IGRvY3VtZW50UmVuZGVyLmdldElubmVyUmVjdCgpO1xuICAgICAgICBjb25zdCBib2R5QXJyYXk6IEFycmF5PERvY3VtZW50Qm9keVJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgbGV0IHsgZW1wdHlCb2R5OiBwYWdlQm9keVJlbmRlciwgaW5uZXJSZWN0OiBib2R5SW5uZXJMaW1pdFJlY3QgfSA9IHRoaXMuY3JlYXRlRW1wdHlCb2R5UmVuZGVyKGJvZHlSZW5kZXIsIGJvZHlMaW1pdFJlY3QpO1xuICAgICAgICBib2R5QXJyYXkucHVzaChwYWdlQm9keVJlbmRlcik7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlQm9keUhvbGRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZW1wdHlCb2R5LCBpbm5lclJlY3QgfSA9IHRoaXMuY3JlYXRlRW1wdHlCb2R5UmVuZGVyKGJvZHlSZW5kZXIsIGJvZHlMaW1pdFJlY3QpO1xuICAgICAgICAgICAgcGFnZUJvZHlSZW5kZXIgPSBlbXB0eUJvZHk7XG4gICAgICAgICAgICBib2R5SW5uZXJMaW1pdFJlY3QgPSBpbm5lclJlY3Q7XG4gICAgICAgICAgICBib2R5QXJyYXkucHVzaChwYWdlQm9keVJlbmRlcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYXBwZW5kVG9Cb2R5ID0gKGl0ZW06IEJsb2NrQ29udGVudFJlbmRlck9iamVjdCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5yZWN0LnkgPSBib2R5SW5uZXJMaW1pdFJlY3QuaGVpZ2h0ICsgaXRlbS5tYXJnaW4udG9wO1xuICAgICAgICAgICAgcGFnZUJvZHlSZW5kZXIuYWRkQ2hpbGQoaXRlbSk7XG4gICAgICAgICAgICBib2R5SW5uZXJMaW1pdFJlY3QuaGVpZ2h0ICs9IGl0ZW0ucmVjdC5oZWlnaHQgKyBpdGVtLm1hcmdpbi50b3AgKyBpdGVtLm1hcmdpbi5ib3R0b207XG4gICAgICAgICAgICAvL+S4iuS4gOS4quWFg+e0oOeahGJvdHRvbS1tYXJnaW5cbiAgICAgICAgICAgIC8vYm9keUlubmVyTGltaXRSZWN0LnByZXZNYXJnaW4gPSBpdGVtLm1hcmdpbi5ib3R0b207XG4gICAgICAgICAgICBFbGVtZW50VXRpbC51cGRhdGVSZW5kZXJIZWlnaHRCeUlubmVyUmVjdChwYWdlQm9keVJlbmRlciwgYm9keUlubmVyTGltaXRSZWN0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrUGFnZUJyZWFrKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlQm9keUhvbGRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXI6IG51bGwgfCBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QgPSBib2R5UmVuZGVyLmdldENoaWxkKGkpIGFzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdDtcbiAgICAgICAgd2hpbGUgKGNsb25lQmxvY2tDb250ZW50UmVuZGVyKSB7XG4gICAgICAgICAgICBpZiAoYm9keUlubmVyTGltaXRSZWN0Lm1heEhlaWdodCAtIGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5yZWN0LmhlaWdodCAtIGNsb25lQmxvY2tDb250ZW50UmVuZGVyLm1hcmdpbi5ib3R0b20gLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5tYXJnaW4udG9wIDwgMCkge1xuICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5aSW5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keUF2YWlsSGVpZ2h0ID0gYm9keUlubmVyTGltaXRSZWN0Lm1heEhlaWdodCAtIGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgLSBjbG9uZUJsb2NrQ29udGVudFJlbmRlci5tYXJnaW4uYm90dG9tIC0gY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIubWFyZ2luLnRvcDtcbiAgICAgICAgICAgICAgICAvL+mZkOWItueahOWGheahhuWwuuWvuFxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVuZGVySW5udGVySGVpZ2h0ID0gRWxlbWVudFV0aWwuaW5uZXJSZWN0TWF4SGVpZ2h0KGNsb25lQmxvY2tDb250ZW50UmVuZGVyLCBib2R5QXZhaWxIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1dFJlbmRlck9iamVjdCA9IHRoaXMuY3V0UmVuZGVySXRlbShjbG9uZUJsb2NrQ29udGVudFJlbmRlciwgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQpO1xuICAgICAgICAgICAgICAgIC8v6Iez5bCR5pyJ5LiA5Liq5Z2X57qn6KGM5YWD57Sg6KKr5YiH5Ymy5Ye65p2lXG4gICAgICAgICAgICAgICAgaWYgKGN1dFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb0JvZHkoY3V0UmVuZGVyT2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3JlYXRlQm9keUhvbGRlcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcHBlbmRUb0JvZHkoY2xvbmVCbG9ja0NvbnRlbnRSZW5kZXIpO1xuICAgICAgICAgICAgICAgIGlmICgrK2kgPCBib2R5UmVuZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZUJsb2NrQ29udGVudFJlbmRlciA9IGJvZHlSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lQmxvY2tDb250ZW50UmVuZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb2NQYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGxldCBwYWdlWTogbnVtYmVyID0gdGhpcy5vcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGJvZHlBcnJheVtpXTtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50UmVuZGVyID0gZG9jdW1lbnRFbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgZG9jUGFnZXMucHVzaChkb2N1bWVudFJlbmRlcik7XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5yZWN0LnkgPSBwYWdlWTtcbiAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVjdCA9IGRvY3VtZW50UmVuZGVyLmdldElubmVyUmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgY2xvbmVIZWFkZXJSZW5kZXIgPSBoZWFkZXJSZW5kZXIuY2xvbmUoKTtcbiAgICAgICAgICAgIGNsb25lSGVhZGVyUmVuZGVyLnJlY3QueCA9IGxpbWl0UmVjdC54O1xuICAgICAgICAgICAgY2xvbmVIZWFkZXJSZW5kZXIucmVjdC55ID0gaGVhZGVyTGluZTtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLmFkZENoaWxkKGNsb25lSGVhZGVyUmVuZGVyKTtcbiAgICAgICAgICAgIGJvZHkucmVjdC54ID0gbGltaXRSZWN0Lng7XG4gICAgICAgICAgICBib2R5LnJlY3QueSA9IGJvZHlNYXJnaW5Ub3A7XG4gICAgICAgICAgICBib2R5LnJlY3QuaGVpZ2h0ID0gYm9keUlubmVyTGltaXRSZWN0Lm1heEhlaWdodDtcbiAgICAgICAgICAgIGRvY3VtZW50UmVuZGVyLmFkZENoaWxkKGJvZHkpO1xuICAgICAgICAgICAgcGFnZVkgKz0gZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQgKyB0aGlzLm9wdGlvbnMuZG9jU3BhY2U7XG4gICAgICAgICAgICBjb25zdCBjbG9uZUZvb3RlclJlbmRlciA9IGZvb3RlclJlbmRlci5jbG9uZSgpO1xuICAgICAgICAgICAgY2xvbmVGb290ZXJSZW5kZXIucmVjdC54ID0gbGltaXRSZWN0Lng7XG4gICAgICAgICAgICBjbG9uZUZvb3RlclJlbmRlci5yZWN0LnkgPSBkb2N1bWVudFJlbmRlci5yZWN0LmhlaWdodCAtIGJvZHlNYXJnaW5Cb3R0b207XG4gICAgICAgICAgICBkb2N1bWVudFJlbmRlci5hZGRDaGlsZChjbG9uZUZvb3RlclJlbmRlcik7XG4gICAgICAgICAgICAvL+WuoemYheaooeW8j++8jOa3u+WKoOWuoemYheeql+WPo1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93UmV2aWV3V2luZG93ICYmIGNvbW1lbnRzUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWVudHNDb250YWluZXIgPSBjb21tZW50c1JlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCkgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29tbWVudHNDb250YWluZXIucGFkZGluZy50b3AgPSBib2R5TWFyZ2luVG9wO1xuICAgICAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnJlY3QuaGVpZ2h0ID0gZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIuYWRkQ2hpbGQoY29tbWVudHNDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnJlY3QueCA9IGRvY3VtZW50UmVuZGVyLnJlY3QueCArIGRvY3VtZW50UmVuZGVyLnJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIucmVjdC53aWR0aCArPSB0aGlzLm9wdGlvbnMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvY1BhZ2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tQYWdlQnJlYWsoaXRlbTogUmVuZGVyT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChpdGVtLmVsZW1lbnQgJiYgaXRlbS5lbGVtZW50LnR5cGUgPT09ICdwJykge1xuICAgICAgICAgICAgY29uc3QgcCA9IGl0ZW0uZWxlbWVudCBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHAucHJvcHMucGFnZUJyZWFrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldEZ1bGxWaWV3RG9jUmVuZGVyKGRvY3VtZW50UmVuZGVyOiBEb2N1bWVudFJlbmRlck9iamVjdCwgZG9jdW1lbnRFbGVtZW50OiBEb2N1bWVudEVsZW1lbnQpOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4ge1xuICAgICAgICBjb25zdCBjb21tZW50c1JlbmRlciA9IGRvY3VtZW50UmVuZGVyLmdldENoaWxkKDMpIGFzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBjb21tZW50c0NvbnRhaW5lciA9IGNvbW1lbnRzUmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KHRoaXMub3B0aW9ucywgdGhpcy5yZW5kZXJDb250ZXh0KSBhcyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdDtcbiAgICAgICAgZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQgLT0gY29tbWVudHNDb250YWluZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGJvZHlSZW5kZXIgPSBkb2N1bWVudFJlbmRlci5nZXRDaGlsZCgxKSBhcyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3Q7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1Jldmlld1dpbmRvdykge1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIucmVtb3ZlQ2hpbGQoY29tbWVudHNSZW5kZXIpO1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIuYWRkQ2hpbGQoY29tbWVudHNDb250YWluZXIpO1xuICAgICAgICAgICAgY29tbWVudHNDb250YWluZXIucGFkZGluZy50b3AgPSBib2R5UmVuZGVyLnJlY3QueTtcbiAgICAgICAgICAgIGNvbW1lbnRzQ29udGFpbmVyLnJlY3QuaGVpZ2h0ID0gZG9jdW1lbnRSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBjb21tZW50c0NvbnRhaW5lci5yZWN0LnggPSBkb2N1bWVudFJlbmRlci5yZWN0LnggKyBkb2N1bWVudFJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgZG9jdW1lbnRSZW5kZXIucmVjdC53aWR0aCArPSB0aGlzLm9wdGlvbnMucmV2aWV3V2luZG93V2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtkb2N1bWVudFJlbmRlciBhcyBEb2N1bWVudFJlbmRlck9iamVjdF1cbiAgICB9XG5cbiAgICBjcmVhdGVFbXB0eUJvZHlSZW5kZXIoYm9keVJlbmRlcjogRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0LCBsaW1pdFJlY3Q6IFJlY3QpOiB7IGVtcHR5Qm9keTogRG9jdW1lbnRCb2R5UmVuZGVyT2JqZWN0LCBpbm5lclJlY3Q6IFJlY3QgJiB7IHByZXZNYXJnaW46IG51bWJlciB9IH0ge1xuICAgICAgICBjb25zdCBwYWdlQm9keVJlbmRlciA9IGJvZHlSZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpIGFzIERvY3VtZW50Qm9keVJlbmRlck9iamVjdDtcbiAgICAgICAgRWxlbWVudFV0aWwuc2V0QmxvY2tFbGVtZW50TGltaXRTaXplKHBhZ2VCb2R5UmVuZGVyLCBsaW1pdFJlY3QpO1xuICAgICAgICBjb25zdCBib2R5SW5uZXJMaW1pdFJlY3QgPSBwYWdlQm9keVJlbmRlci5nZXRJbm5lclJlY3QoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mdWxsUGFnZVZpZXcpIHtcbiAgICAgICAgICAgIGJvZHlJbm5lckxpbWl0UmVjdC5oZWlnaHQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGVtcHR5Qm9keTogcGFnZUJvZHlSZW5kZXIsIGlubmVyUmVjdDogeyAuLi5ib2R5SW5uZXJMaW1pdFJlY3QsIHByZXZNYXJnaW46IDAgfSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+WJsua4suafk+WFg+e0oFxuICAgICAqIEBwYXJhbSByZW5kZXIg6KKr5YiH5Ymy55qE5a+56LGhXG4gICAgICogQHBhcmFtIGxpbWl0SGVpZ2h0IFxuICAgICAqIEBwYXJhbSBhZGRGdW5jIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGN1dFJlbmRlckl0ZW0ocmVuZGVyOiBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsIGxpbWl0SGVpZ2h0OiBudW1iZXIpOiBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXRSb3dSZW5kZXJJdGVtKHJlbmRlciwgbGltaXRIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3V0VGFibGUocmVuZGVyLCBsaW1pdEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSByZW5kZXIuZWxlbWVudC5jcmVhdGVSZW5kZXJPYmplY3QodGhpcy5vcHRpb25zLCB0aGlzLnJlbmRlckNvbnRleHQpIGFzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0O1xuICAgICAgICBjbG9uZVJlbmRlci5zZXRSZW5kZXJXaWR0aChyZW5kZXIucmVjdC53aWR0aCk7XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgbGV0IHN1bUhlaWdodCA9IDA7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFsuLi5yZW5kZXIuZ2V0SXRlbXMoKV07XG4gICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICBsZXQgYmxvY2tMaW5lID0gY2hpbGRyZW5bal07XG4gICAgICAgICAgICB3aGlsZSAoYmxvY2tMaW5lKSB7XG4gICAgICAgICAgICAgICAgLy9zdW1IZWlnaHQgPSBFbGVtZW50VXRpbC5yZW1lYXN1cmUoY2xvbmVSZW5kZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGNCbG9ja0xpbmVIZWlnaHQgPSB0aGlzLmdldEJsb2NrTGluZUhlaWdodChibG9ja0xpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxjQmxvY2tMaW5lSGVpZ2h0ICsgc3VtSGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrTGluZSBpbnN0YW5jZW9mIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+mZkOWItueahOWkluahhuWwuuWvuFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXZhaWxIZWlnaHQgPSBsaW1pdEhlaWdodCAtIHN1bUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5YaF5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdFJlbmRlcklubnRlckhlaWdodCA9IEVsZW1lbnRVdGlsLmlubmVyUmVjdE1heEhlaWdodChyZW5kZXIsIGF2YWlsSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1dFJlbmRlck9iamVjdCA9IHRoaXMuY3V0UmVuZGVySXRlbShibG9ja0xpbmUsIGxpbWl0UmVuZGVySW5udGVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXRSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZChjdXRSZW5kZXJPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bUhlaWdodCArPSBjdXRSZW5kZXJPYmplY3QucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tMaW5lID0gY2hpbGRyZW5bKytqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5yZW1vdmVDaGlsZChibG9ja0xpbmUpO1xuICAgICAgICAgICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZChibG9ja0xpbmUpO1xuICAgICAgICAgICAgICAgICAgICBzdW1IZWlnaHQgKz0gYmxvY2tMaW5lLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBibG9ja0xpbmUgPSBjaGlsZHJlblsrK2pdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjbG9uZVJlbmRlcik7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocmVuZGVyKTtcbiAgICAgICAgICAgIGlmIChjbG9uZVJlbmRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+WJsua4suafk+WFg+e0oFxuICAgICAqIEBwYXJhbSB0YlJlbmRlciDooqvliIflibLnmoTlr7nosaFcbiAgICAgKiBAcGFyYW0gbGltaXRIZWlnaHQgXG4gICAgICogQHBhcmFtIGFkZEZ1bmMgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgY3V0VGFibGUodGJSZW5kZXI6IFRhYmxlUmVuZGVyT2JqZWN0LCBsaW1pdEhlaWdodDogbnVtYmVyKTogQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNsb25lVGJSZW5kZXIgPSB0YlJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdCh0aGlzLm9wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCkgYXMgVGFibGVSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNsb25lVGJSZW5kZXIuc2V0UmVuZGVyV2lkdGgodGJSZW5kZXIucmVjdC53aWR0aCk7XG4gICAgICAgIGxldCBzdW1IZWlnaHQgPSAwO1xuICAgICAgICBjb25zdCByb3dzID0gWy4uLnRiUmVuZGVyLmdldEl0ZW1zKCldO1xuICAgICAgICAvL+iOt+WPlui3qOmhtemcgOimgemHjeWkjeaYvuekuueahOihjFxuICAgICAgICBjb25zdCBoZWFkZXJSb3dzID0gdGhpcy5nZXRIZWFkZXJSb3dzKHRiUmVuZGVyKTtcbiAgICAgICAgLy/ot6jpobXlpLTnmoTpq5jluqZcbiAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gaGVhZGVyUm93cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLnJlY3QuaGVpZ2h0LCAwKTtcbiAgICAgICAgaWYgKGhlYWRlckhlaWdodCA+IGxpbWl0SGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb3B5SGVhZGVyUm93cyA9IGhlYWRlclJvd3MubWFwKGl0ZW0gPT4gaXRlbS5jbG9uZSgpKTtcbiAgICAgICAgLy/ojrflj5bmnIDlkI7kuIDkuKrmiKrmlq3ooYws6ZyA6KaB5qC55o2u5oiq5pat6KGM5Yik5pat5pyA5ZCO5LiA5Liq5oiq5pat55qE6KGM5L2N572uXG4gICAgICAgIGNvbnN0IGN1dE9mZlJvd3MgPSByb3dzLmZpbHRlcihyb3cgPT4gbGltaXRIZWlnaHQgPj0gcm93LnJlY3QueSAmJiBsaW1pdEhlaWdodCA8PSByb3cucmVjdC55ICsgcm93LnJlY3QuaGVpZ2h0KVxuICAgICAgICAgICAgLm1hcCgocm93KSA9PiAoeyByb3dJbmRleDogKDxUYWJsZVJvd0VsZW1lbnQ+cm93LmVsZW1lbnQpLmdldEluZGV4KCksIHJvdyB9KSlcbiAgICAgICAgICAgIC5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBzZWNvbmQucm93SW5kZXggLSBmaXJzdC5yb3dJbmRleCk7XG4gICAgICAgIGlmIChjdXRPZmZSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfml6Dms5Xojrflj5bmiKrmlq3ooYwnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqb2luUm93ID0gY3V0T2ZmUm93c1swXS5yb3c7XG4gICAgICAgIGxldCBqID0gMDtcbiAgICAgICAgbGV0IGN1cnJSb3cgPSByb3dzW2pdO1xuICAgICAgICBjb25zdCBjdXRSb3dzOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgd2hpbGUgKGN1cnJSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0NvbnRlbnRIZWlnaHQgPSB0aGlzLmdldEJsb2NrTGluZUhlaWdodChjdXJyUm93KTtcbiAgICAgICAgICAgIGlmIChyb3dDb250ZW50SGVpZ2h0ICsgc3VtSGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VyclJvdyBpbnN0YW5jZW9mIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5aSW5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsSGVpZ2h0ID0gbGltaXRIZWlnaHQgLSBzdW1IZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5YaF5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0UmVuZGVySW5udGVySGVpZ2h0ID0gRWxlbWVudFV0aWwuaW5uZXJSZWN0TWF4SGVpZ2h0KHRiUmVuZGVyLCBhdmFpbEhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1dFJvdyA9IHRoaXMuY3V0Um93UmVuZGVySXRlbShjdXJyUm93LCBsaW1pdFJlbmRlcklubnRlckhlaWdodCkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXRSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lVGJSZW5kZXIuYWRkQ2hpbGQoY3V0Um93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bUhlaWdodCArPSBjdXRSb3cucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXRSb3dzLnB1c2goY3VyclJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclJvdyA9PT0gam9pblJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyclJvdyA9IHJvd3NbKytqXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YlJlbmRlci5yZW1vdmVDaGlsZChjdXJyUm93KTtcbiAgICAgICAgICAgICAgICBjbG9uZVRiUmVuZGVyLmFkZENoaWxkKGN1cnJSb3cpO1xuICAgICAgICAgICAgICAgIHN1bUhlaWdodCArPSBjdXJyUm93LnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGN1cnJSb3cgPSByb3dzWysral07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXhDdXRUYWJsZSh0YlJlbmRlciwgY3V0Um93cyk7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjbG9uZVRiUmVuZGVyKTtcbiAgICAgICAgLy/lrZjlnKjot6jpobXpnIDopoHph43lpI3mmL7npLrnmoTooYzlpLTvvIzliJnpnIDopoHph43mlrDmlL7nva7ooYzlpLRcbiAgICAgICAgaWYgKGNvcHlIZWFkZXJSb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29weUhlYWRlclJvd3MuZm9yRWFjaCgociwgaSkgPT4gdGJSZW5kZXIuaW5zZXJ0Q2hpbGQociwgaSkpXG4gICAgICAgIH1cbiAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHRiUmVuZGVyKTtcbiAgICAgICAgaWYgKGNsb25lVGJSZW5kZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZVRiUmVuZGVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3V0Um93UmVuZGVySXRlbShyZW5kZXI6IFRhYmxlUm93UmVuZGVyT2JqZWN0LCBsaW1pdEhlaWdodDogbnVtYmVyKTogVGFibGVSb3dSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKHJlbmRlci5lbGVtZW50LnByb3BzLm1pbkhlaWdodCA+IDAgJiYgcmVuZGVyLnJlY3QuaGVpZ2h0ID4gbGltaXRIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsb25lUm93UmVuZGVyID0gcmVuZGVyLmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KCkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNsb25lUm93UmVuZGVyLnJlY3Qud2lkdGggPSByZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgY2xvbmVSb3dSZW5kZXIucmVjdC5tYXhXaWR0aCA9IHJlbmRlci5yZWN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgY2VsbFJlbmRlcnMgPSBbLi4ucmVuZGVyLmdldEl0ZW1zKCldIGFzIEFycmF5PFRhYmxlQ2VsbFJlbmRlck9iamVjdD47XG4gICAgICAgIGNvbnN0IGN1dENlbGxSZW5kZXJzOiBBcnJheTxSZW5kZXJPYmplY3QgfCBudWxsPiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gY2VsbFJlbmRlcnNbaV07XG4gICAgICAgICAgICBpZiAoY2VsbFJlbmRlci5yZWN0LmhlaWdodCA+IGxpbWl0SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy/pmZDliLbnmoTlpJbmoYblsLrlr7hcbiAgICAgICAgICAgICAgICBjb25zdCBhdmFpbEhlaWdodCA9IGxpbWl0SGVpZ2h0O1xuICAgICAgICAgICAgICAgIC8v6ZmQ5Yi255qE5YaF5qGG5bC65a+4XG4gICAgICAgICAgICAgICAgY29uc3QgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQgPSBFbGVtZW50VXRpbC5pbm5lclJlY3RNYXhIZWlnaHQoY2VsbFJlbmRlciwgYXZhaWxIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1dENlbGxSZW5kZXIgPSB0aGlzLmN1dFJlbmRlckl0ZW0oY2VsbFJlbmRlciwgbGltaXRSZW5kZXJJbm50ZXJIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChjdXRDZWxsUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1dENlbGxSZW5kZXJzLnB1c2goY3V0Q2VsbFJlbmRlcilcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXRDZWxsUmVuZGVycy5wdXNoKG51bGwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9uZUNlbGxSZW5kZXIgPSBjZWxsUmVuZGVyIGFzIEJsb2NrTGluZVJlY3RSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgcmVuZGVyLnJlbW92ZUNoaWxkKGNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgICAgIGN1dENlbGxSZW5kZXJzLnB1c2goY2xvbmVDZWxsUmVuZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUocmVuZGVyKTtcbiAgICAgICAgaWYgKGN1dENlbGxSZW5kZXJzLmZpbHRlcihpdGVtID0+IGl0ZW0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL+ihpem9kOWNleWFg+agvFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXRDZWxsUmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjZWxsUmVuZGVyID0gY3V0Q2VsbFJlbmRlcnNbaV0gYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGlmICghY2VsbFJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyID0gY2VsbFJlbmRlcnNbaV0uY2xvbmUoKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShjZWxsUmVuZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2xvbmVSb3dSZW5kZXIuYWRkQ2hpbGQoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUoY2xvbmVSb3dSZW5kZXIpO1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lUm93UmVuZGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIOS/ruWkjS0+5bey57uP5oiq5pat55qE5ZCI5bm25Y2V5YWD5qC86KaB5ZCR5LiL56e75Yqo5Yiw5ZCI6YCC55qE5L2N572uXG4gICAgICogQHBhcmFtIHRiUmVuZGVyIFxuICAgICAqIEBwYXJhbSBjdXRSb3dzIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgZml4Q3V0VGFibGUodGJSZW5kZXI6IFRhYmxlUmVuZGVyT2JqZWN0LCBjdXRSb3dzOiBBcnJheTxUYWJsZVJvd1JlbmRlck9iamVjdD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjdXRSb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRiRWxlID0gdGJSZW5kZXIuZWxlbWVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGJlbG93TWVyZ2VSb3dzID0gbmV3IFNldDxUYWJsZVJvd1JlbmRlck9iamVjdD4oKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YlJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGJSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBuZXh0Um93ID0gdGJSZW5kZXIuZ2V0Q2hpbGQoaSArIDEpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKCFuZXh0Um93KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWN1dFJvd3Muc29tZShpdGVtID0+IGl0ZW0gPT09IHJvdykpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyb3cubGVuZ3RoID09PSB0YkVsZS5nZXRDb2xzQ291bnQoKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tGdWxsUm93KHJvdykpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbEVsZSA9IGNlbGwuZWxlbWVudCBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gY2VsbEVsZS5nZXRJbmRleCgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5leGlzdHNDZWxsUmVuZGVyKG5leHRSb3csIGNvbEluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRDb2xJbmRleCA9IHRoaXMuZ2V0Um93SW5zZXJ0Q2VsbEluZGV4KGNlbGwsIG5leHRSb3cpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0Q29sSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRDb2xJbmRleDIgPSB0aGlzLmdldFJvd0luc2VydENlbGxJbmRleChjZWxsLCBuZXh0Um93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5Zyo57Sn5oyo5LiL5pa55om+5Yiw5Y+v5Lul5pS+572u55qE5L2N572uJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy9yb3cucmVtb3ZlQ2hpbGQoY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIG5leHRSb3cuaW5zZXJ0Q2hpbGQoY2VsbCwgaW5zZXJ0Q29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBiZWxvd01lcmdlUm93cy5hZGQocm93KTtcbiAgICAgICAgICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKG5leHRSb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYmVsb3dNZXJnZVJvd3Muc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgYmVsb3dNZXJnZVJvd3MpIHtcbiAgICAgICAgICAgICAgICB0YlJlbmRlci5yZW1vdmVDaGlsZChyb3cpO1xuICAgICAgICAgICAgICAgIHJvdy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHRiUmVuZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagoemqjOW9k+WJjeaYr+WQpuaYr+S4gOS4quWujOaVtOeahOihjO+8jOayoeaciU51bGzljZXlhYPmoLzvvIzmo4Dmn6XlvZPliY3mmK/lkKbov5jpnIDopoHlkJHkuIvlkIjlubZcbiAgICAgKiBAcGFyYW0gcm93IFxuICAgICAqL1xuICAgIHByaXZhdGUgY2hlY2tGdWxsUm93KHJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmIChjZWxsLnJlY3QueCAhPT0geCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHggKz0gY2VsbC5yZWN0LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ID09PSByb3cucmVjdC53aWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4aXN0c0NlbGxSZW5kZXIocm93UmVuZGVyOiBUYWJsZVJvd1JlbmRlck9iamVjdCwgY2VsbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgY2VsbEVsZSA9IGNlbGxSZW5kZXIuZWxlbWVudCBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGxFbGUuZ2V0SW5kZXgoKSA9PT0gY2VsbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QmxvY2tMaW5lSGVpZ2h0KHJlbmRlcjogUmVuZGVyT2JqZWN0KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUm93UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBsZXQgbWF4Q2VsbEhlaWdodCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSByZW5kZXIuZ2V0Q2hpbGQoaSkucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1IZWlnaHQgPiBtYXhDZWxsSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1heENlbGxIZWlnaHQgPSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXhDZWxsSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgfVxuXG5cbiAgICBnZXRSb3dJbnNlcnRDZWxsSW5kZXgoc291cmNlQ2VsbDogVGFibGVDZWxsUmVuZGVyT2JqZWN0LCBkZXN0Um93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdFJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IGRlc3RSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IGNlbGwucmVjdDtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDZWxsLnJlY3QueCA8IHJlY3QueCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDZWxsID0gZGVzdFJvdy5nZXRDaGlsZChkZXN0Um93Lmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoc291cmNlQ2VsbC5yZWN0LnggPj0gbGFzdENlbGwucmVjdC54ICsgbGFzdENlbGwucmVjdC53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlc3RSb3cubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhlYWRlclJvd3ModGI6IFRhYmxlUmVuZGVyT2JqZWN0KTogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgY29uc3Qgcm93czogQXJyYXk8VGFibGVSb3dSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1JlbmRlciA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3Qgcm93RWxlID0gcm93UmVuZGVyLmVsZW1lbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHJvd0VsZS5wcm9wcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgICAgICByb3dzLnB1c2gocm93UmVuZGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIlxuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQsIExlYWZFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2UgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgUmFuZ2VVdGlsIH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcblxuXG5cblxuLyoqXG4gKiDnlKjkuo7lpITnkIbpgInljLrmi5bok51cbiAqL1xuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbk92ZXJsYXlzIHtcbiAgICBwcml2YXRlIHNlbGVjdGlvblJhbmdlITogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbDtcbiAgICBzZWxlY3RlZFNldHM6IE1hcDxFbGVtZW50LCBTZWxlY3Rpb25Db250ZW50UmFuZ2U+ID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlKSB7IH1cblxuICAgIGdldFNlbGVjdGlvblRyZWVEYXRhKCk6IHZvaWQge1xuICAgICAgICBsZXQgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgY29sbGFwc2VkIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2V0cy5jbGVhcigpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG51bGw7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICFlbmRDb250cm9sIHx8ICFhbmNlc3RvckNvbW1vbkNvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vdGhpcy5zZWxlY3Rpb25SYW5nZT8uc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg9MDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc2VsZWN0ZWRSYW5nZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgY29uc3QgY29tbW9uUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0U2VsY3Rpb25SYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2UgPSBjb21tb25SYW5nZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZXRzLmNsZWFyKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZml4U3RhcnRFbGVtZW50ID0gdGhpcy5maXhTdGFydFNlbGVjdGlvbkVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgc3RhcnRDb250cm9sID0gZml4U3RhcnRFbGVtZW50LmVsZW1lbnQ7XG4gICAgICAgIHN0YXJ0T2Zmc2V0ID0gZml4U3RhcnRFbGVtZW50Lm9mZnNldDtcbiAgICAgICAgY29uc3QgZml4RW5kRWxlbWVudCA9IHRoaXMuZml4RW5kU2VsZWN0aW9uRWxlbWVudChlbmRDb250cm9sLCBlbmRPZmZzZXQsIGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgIGVuZENvbnRyb2wgPSBmaXhFbmRFbGVtZW50LmVsZW1lbnQ7XG4gICAgICAgIGVuZE9mZnNldCA9IGZpeEVuZEVsZW1lbnQub2Zmc2V0O1xuICAgICAgICBjb25zdCBjb21tb25SYW5nZSA9IFJhbmdlVXRpbC5nZXRTZWxjdGlvblJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2wsIGVuZE9mZnNldCwgYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhjb21tb25SYW5nZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBjb21tb25SYW5nZTtcbiAgICAgICAgdGhpcy5jb252ZXJ0U2VsZWN0UmFuZ2VUb1NldCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnNlbGVjdGVkUmFuZ2UgPSBjb21tb25SYW5nZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRTZWxlY3RSYW5nZVRvU2V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2V0cy5jbGVhcigpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgICAgU2VsZWN0aW9uT3ZlcmxheXMuYWRkVG9TZXRzKHRoaXMuc2VsZWN0aW9uUmFuZ2UsIHRoaXMuc2VsZWN0ZWRTZXRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhZGRUb1NldHMocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgc2V0OiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPik6IHZvaWQge1xuICAgICAgICBzZXQuc2V0KHJhbmdlLnRhcmdldCwgcmFuZ2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8v5Y2V5YWD5qC85YWo6YOo6YCJ5Lit5pWI5p6c77yM5Y2V5YWD5qC85pW05Liq5ouW6JOd5Y2z5Y+vXG4gICAgICAgICAgICBpZiAocmFuZ2UuaXNGdWxsU2VsZWN0ZWQgJiYgcmFuZ2UudGFyZ2V0LnR5cGUgPT09ICd0YmMnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZFRvU2V0cyhyYW5nZS5zZWxlY3RlZENoaWxkcmVuW2ldLCBzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5re75Yqg5Yiw5om55rOo6ZuG5ZCIXG4gICAgICogQHBhcmFtIHJhbmdlIFxuICAgICAqIEBwYXJhbSBzZXQgXG4gICAgICovXG4gICAgc3RhdGljIGFkZFRvQ29tbWVudFNldHMocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgc2V0OiBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPik6IHZvaWQge1xuICAgICAgICBzZXQuc2V0KHJhbmdlLnRhcmdldCwgcmFuZ2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9Db21tZW50U2V0cyhyYW5nZS5zZWxlY3RlZENoaWxkcmVuW2ldLCBzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5q2j5byA5aeL6YCJ5Yy65YaF5a65XG4gICAgICogMS7lpoLmnpzlvZPliY3pgInljLrlvIDlp4vkuo7ooajmoLzlhoXlrrnvvIznu5PmnZ/pgInljLrkvY3kuo7ooajmoLzlpJbvvIzliJnpnIDopoHlvIDlp4vpgInljLrlhoXlrrnph43lrprkvY3liLDljZXlhYPmoLznrKzkuIDkuKrlhYPntKBcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpeFN0YXJ0U2VsZWN0aW9uRWxlbWVudChlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCk6IHsgZWxlbWVudDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyIH0ge1xuICAgICAgICBpZiAoIShhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBsb29rdXBQYXJlbnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVsZW1lbnQsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGxvb2t1cFBhcmVudENlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWxvb2t1cFBhcmVudENlbGwucGFyZW50IHx8ICFsb29rdXBQYXJlbnRDZWxsLnBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbG9va3VwUGFyZW50VGJJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChsb29rdXBQYXJlbnRDZWxsLnBhcmVudC5wYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yQ29tbW9uQ29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGFuY2VzdG9yQ29tbW9uQ29udHJvbCk7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ29tbW9uQ29udHJvbEluZGV4IDwgbG9va3VwUGFyZW50VGJJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dGaXJzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChsb29rdXBQYXJlbnRDZWxsLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcm93Rmlyc3RMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCflvZPliY3lhYPntKDlpITkuo7ooajmoLzlhoXlhYPntKDvvIzmnKrog73lrprkvY3liLDlvZPliY3ljZXlhYPmoLzpppbkuKrlhYPntKAnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogcm93Rmlyc3RMZWFmRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlbGVtZW50LCBvZmZzZXQgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDkv67mraPlvIDlp4vpgInljLrlhoXlrrlcbiAgICAgKiAxLuWmguaenOW9k+WJjemAieWMuuW8gOWni+S6juihqOagvOWGheWuue+8jOe7k+adn+mAieWMuuS9jeS6juihqOagvOWklu+8jOWImemcgOimgeW8gOWni+mAieWMuuWGheWuuemHjeWumuS9jeWIsOWNleWFg+agvOesrOS4gOS4quWFg+e0oFxuICAgICAqL1xuICAgIHByaXZhdGUgZml4RW5kU2VsZWN0aW9uRWxlbWVudChlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIsIGFuY2VzdG9yQ29tbW9uQ29udHJvbDogQnJhbmNoRWxlbWVudCk6IHsgZWxlbWVudDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyIH0ge1xuICAgICAgICBpZiAoIShhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBsb29rdXBQYXJlbnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVsZW1lbnQsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGxvb2t1cFBhcmVudENlbGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb29rdXBQYXJlbnRUYkluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGxvb2t1cFBhcmVudENlbGwucGFyZW50LnBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JDb21tb25Db250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoYW5jZXN0b3JDb21tb25Db250cm9sKTtcbiAgICAgICAgICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sSW5kZXggPCBsb29rdXBQYXJlbnRUYkluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0xhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChsb29rdXBQYXJlbnRDZWxsLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcm93TGFzdExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dMYXN0TGVhZkVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQobG9va3VwUGFyZW50Q2VsbC5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCflvZPliY3lhYPntKDlpITkuo7ooajmoLzlhoXlhYPntKDvvIzmnKrog73lrprkvY3liLDlvZPliY3ljZXlhYPmoLzpppbkuKrlhYPntKAnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogcm93TGFzdExlYWZFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAxXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGVsZW1lbnQsIG9mZnNldCB9O1xuICAgIH1cblxufSIsImltcG9ydCB7IEVsZW1lbnRNZWFzdXJlIH0gZnJvbSBcIi4vZWxlbWVudC1tZWFzdXJlXCI7XG5pbXBvcnQgeyBFbGVtZW50UGFpbnQgfSBmcm9tIFwiLi9lbGVtZW50LXBhaW50XCI7XG5pbXBvcnQgeyBFbGVtZW50UmVuZGVyQ3V0IH0gZnJvbSBcIi4vZWxlbWVudC1yZW5kZXItY3V0XCI7XG5pbXBvcnQgeyBEb2N1bWVudFJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRDb250YWluZXJSZW5kZXIgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IFJhbmdlVXRpbCB9IGZyb20gXCIuL3JhbmdlLXV0aWxcIjtcbmltcG9ydCB7IFNlbGVjdGlvbk92ZXJsYXlzIH0gZnJvbSBcIi4vc2VsZWN0aW9uLW92ZXJsYXlzXCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgQ29tbUNvbnRlbnRFbGVtZW50LCBDb21tZW50UmFuZ2VTdGF0dXMgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFBhaW50IHtcbiAgICBlbGVtZW50TWVhc3VyZTogRWxlbWVudE1lYXN1cmU7XG4gICAgZWxlbWVudFJlbmRlckN1dDogRWxlbWVudFJlbmRlckN1dDtcbiAgICBlbGVtZW50UGFpbnQ6IEVsZW1lbnRQYWludDtcbiAgICBkb2NQYWdlcyE6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PjtcbiAgICBkb2NDb250YWluZXIhOiBEb2N1bWVudENvbnRhaW5lclJlbmRlcjtcbiAgICBjb21tc0NvbnRhaW5lciE6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgIHByaXZhdGUgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyQ29udGV4dDogUmVuZGVyQ29udGV4dFR5cGUsIHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcml2YXRlIHNlbGVjdGVkU2V0czogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT4pIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmVsZW1lbnRNZWFzdXJlID0gbmV3IEVsZW1lbnRNZWFzdXJlKHRoaXMudmlld09wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlbmRlckN1dCA9IG5ldyBFbGVtZW50UmVuZGVyQ3V0KHRoaXMudmlld09wdGlvbnMsIHRoaXMucmVuZGVyQ29udGV4dCk7XG4gICAgICAgIHRoaXMuZWxlbWVudFBhaW50ID0gbmV3IEVsZW1lbnRQYWludCh0aGlzLnJlbmRlckNvbnRleHQsIHRoaXMuZG9jQ3R4KTtcbiAgICB9XG5cbiAgICByZVBhZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZG9jQ3R4LmRvY3VtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyID0gbmV3IERvY3VtZW50Q29udGFpbmVyUmVuZGVyKCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLnJlbmRlckNvbnRhaW5lciA9IHRoaXMuZG9jQ29udGFpbmVyO1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LndpZHRoID0gdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGg7XG4gICAgICAgIC8vIGNvbnNvbGUudGltZSgn5o6S54mI6K6h5pe2Jyk7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UmVuZGVyID0gdGhpcy5lbGVtZW50TWVhc3VyZS5tZWFzdXJlRG9jdW1lbnQodGhpcy5kb2NDdHguZG9jdW1lbnQpO1xuICAgICAgICB0aGlzLmNvbW1zQ29udGFpbmVyID0gZG9jdW1lbnRSZW5kZXIuZ2V0Q2hpbGQoMykgYXMgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGlmICh0aGlzLmNvbW1zQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1zQ29udGFpbmVyID0gdGhpcy5jb21tc0NvbnRhaW5lci5jbG9uZSgpIGFzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS50aW1lRW5kKCfmjpLniYjorqHml7YnKTtcbiAgICAgICAgLy9jb25zb2xlLnRpbWUoJ+aWremhteiuoeaXticpO1xuICAgICAgICBjb25zdCBkb2NQYWdlcyA9IHRoaXMuZWxlbWVudFJlbmRlckN1dC5jdXRQYWdlKGRvY3VtZW50UmVuZGVyLCB0aGlzLmRvY0N0eC5kb2N1bWVudCk7XG4gICAgICAgIC8vY29uc29sZS50aW1lRW5kKCfmlq3pobXorqHml7YnKTtcbiAgICAgICAgdGhpcy5zZXRDb21tUmFuZ2VNYXJrKCk7XG4gICAgICAgIHRoaXMuZG9jUGFnZXMgPSBkb2NQYWdlcztcbiAgICAgICAgdGhpcy5sYXlvdXRQYWdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWh+aho+mhtemdouaYvuekuuW4g+WxgFxuICAgICAqIEBwYXJhbSBwYWdlc1xuICAgICAqL1xuICAgIGxheW91dFBhZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZG9jQ29udGFpbmVyIHx8ICF0aGlzLmRvY1BhZ2VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYWdlTGF5b3V0TW9kZSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgaWYgKHBhZ2VMYXlvdXRNb2RlID09ICdtdWx0aVBhZ2UnKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dE11bHRpUGFnZXModGhpcy5kb2NQYWdlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFNpbmdsZVBhZ2VzKHRoaXMuZG9jUGFnZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Y2V6aG15qih5byP77ya5a6M5oiQ5paH5qGj6aG15pat6aG15ZCO77yM5paH5qGj6aG15o6S54mIXG4gICAgICogMS7moLnmja7pobXpnaLop4blm77nvKnmlL7orr7nva5cbiAgICAgKiAyLuagueaNrumhtemdouinhueql+aAu+WuveW6pu+8jOiuvue9rumhtemdouWxheS4rVxuICAgICAqL1xuICAgIHByaXZhdGUgbGF5b3V0U2luZ2xlUGFnZXMocGFnZXM6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0Pik6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICBjb25zdCB7IHNjYWxlLCBwYWdlTGF5b3V0TW9kZSwgdmlld1NldHRpbmdzOiB7IHdpZHRoOiB2aWV3V2lkdGggfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgLy/mlofmoaPlhoXlrrnljLrlrr3luqZcbiAgICAgICAgY29uc3QgY29udGVudFdpZHRoID0gdGhpcy52aWV3T3B0aW9ucy5jb250ZW50V2lkdGg7XG4gICAgICAgIC8v5paH5qGj5a655Zmo5oC75a695bqm562J5LqO5YaF5a655a695bqmXG4gICAgICAgIC8v5Y2V6aG15qih5byP77yMZG9jQ29udGFpbmVy5bGF5LitXG4gICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLnJlY3Qud2lkdGggPSBjb250ZW50V2lkdGg7XG4gICAgICAgIC8v57yp5pS+5ZCO55qE5YaF5a655Yy65a695bqmXG4gICAgICAgIGNvbnN0IHNjYWxlQ29udGVudFdpZHRoID0gY29udGVudFdpZHRoICogc2NhbGU7XG4gICAgICAgIGNvbnN0IGRvY0xlZnQgPSBNYXRoLmZsb29yKCh2aWV3V2lkdGggLSBzY2FsZUNvbnRlbnRXaWR0aCkgLyAyIC8gc2NhbGUpO1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LnggPSBkb2NMZWZ0O1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5hZGRQYWdlcyhwYWdlcyk7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZSh0aGlzLmRvY0NvbnRhaW5lciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSa6aG15qih5byPXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGxheW91dE11bHRpUGFnZXMocGFnZXM6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0Pik6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIHBhZ2VMYXlvdXRNb2RlLFxuICAgICAgICAgICAgZG9jU3BhY2UsXG4gICAgICAgICAgICB2aWV3U2V0dGluZ3M6IHsgd2lkdGg6IHZpZXdXaWR0aCB9LFxuICAgICAgICAgICAgZG9jUGFnZVNldHRpbmdzOiB7IGhlaWdodDogcGFnZUhlaWdodCB9XG4gICAgICAgIH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICAvL+aWh+aho+WGheWuueWMuuWuveW6plxuICAgICAgICBjb25zdCBjb250ZW50V2lkdGggPSB0aGlzLnZpZXdPcHRpb25zLmNvbnRlbnRXaWR0aFxuICAgICAgICAvL+aWh+aho+WuueWZqOaAu+WuveW6puetieS6jue7mOWItuWMuuaAu+WuveW6plxuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LndpZHRoID0gdmlld1dpZHRoO1xuICAgICAgICB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LnggPSAwO1xuXG4gICAgICAgIC8v5Yik5pat5piv5ZCm5ruh6Laz5aSa6aG15biD5bGAXG4gICAgICAgIGxldCBsYXlvdXRQYWdlTnVtID0gTWF0aC5mbG9vcih2aWV3V2lkdGggLyAoY29udGVudFdpZHRoICsgZG9jU3BhY2UgKiAyKSAvIHNjYWxlKTtcbiAgICAgICAgaWYgKGxheW91dFBhZ2VOdW0gPCAyIHx8IHBhZ2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaW5nbGVQYWdlcyhwYWdlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0UGFnZU51bSA9IGxheW91dFBhZ2VOdW0gPiBwYWdlcy5sZW5ndGggPyBwYWdlcy5sZW5ndGggOiBsYXlvdXRQYWdlTnVtO1xuICAgICAgICBjb25zdCBwYWdlTGluZVdpZHRoID0gY29udGVudFdpZHRoICogbGF5b3V0UGFnZU51bSArIChsYXlvdXRQYWdlTnVtIC0gMSkgKiBkb2NTcGFjZTtcbiAgICAgICAgbGV0IGxlZnRTcGFjZSA9IE1hdGguZmxvb3IoKHZpZXdXaWR0aCAtIHBhZ2VMaW5lV2lkdGggKiBzY2FsZSkgLyAyIC8gc2NhbGUpO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gZG9jU3BhY2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBwYWdlc1tpXTtcbiAgICAgICAgICAgIGlmIChpICUgbGF5b3V0UGFnZU51bSA9PT0gMCAmJiBpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0ICs9IHBhZ2VIZWlnaHQgKyBkb2NTcGFjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2UucmVjdC54ID0gbGVmdFNwYWNlICsgKGkgJSBsYXlvdXRQYWdlTnVtKSAqIChjb250ZW50V2lkdGggKyBkb2NTcGFjZSk7XG4gICAgICAgICAgICBwYWdlLnJlY3QueSA9IGhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuZG9jQ29udGFpbmVyLmFkZENoaWxkKHBhZ2UpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDb250YWluZXIucmVjdC5oZWlnaHQgPSBoZWlnaHQgKyBwYWdlSGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluiuvue9ruaWh+aho+WuueWZqOeahOaAu+mrmOW6plxuICAgICAqL1xuICAgIGdldERvY3VtZW50Q29udGFpbmVySGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmRvY1BhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvY0NvbnRhaW5lci5yZWN0LmhlaWdodCAqIHRoaXMudmlld09wdGlvbnMuc2NhbGU7XG4gICAgICAgICAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMuZG9jUGFnZXNbdGhpcy5kb2NQYWdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RQYWdlWSA9IGxhc3RQYWdlLnJlY3QueSArIGxhc3RQYWdlLnJlY3QuaGVpZ2h0ICsgdGhpcy52aWV3T3B0aW9ucy5kb2NTcGFjZTtcbiAgICAgICAgICAgIHJldHVybiBsYXN0UGFnZVkgKyAodGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MuaGVpZ2h0ICogKHRoaXMudmlld09wdGlvbnMuc2NhbGUgLSAxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZnJlc2hWaWV3KHJlUGFpbnQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICAvL2NvbnNvbGUudGltZSgn6K6h5pe2Jyk7XG4gICAgICAgIHRoaXMuZWxlbWVudFBhaW50LmRyYXdQYWdlcyh0aGlzLmRvY0NvbnRhaW5lciwgdGhpcy5zZWxlY3RlZFNldHMsIHRoaXMuY29tbXNDb250YWluZXIsIHJlUGFpbnQpO1xuICAgICAgICAvL2NvbnNvbGUudGltZUVuZCgn6K6h5pe2Jyk7XG5cbiAgICB9XG5cbiAgICBnZXREb2NQYWdlcygpOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2NQYWdlcztcbiAgICB9XG5cbiAgICBnZXREb2NDb250YWluZXIoKTogRG9jdW1lbnRDb250YWluZXJSZW5kZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kb2NDb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqKlxuICAgICAqIOiuvue9ruWuoemYheWMuumXtOagt+W8j+eXlei/uVxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0Q29tbVJhbmdlTWFyaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdPcHRpb25zLnNob3dSZXZpZXdXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjY2UgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBNYXA8RWxlbWVudCwgU2VsZWN0aW9uQ29udGVudFJhbmdlPigpO1xuICAgICAgICBjb25zdCBjb21tZW50UmFuZ2VTdGF0dXM6IEFycmF5PENvbW1lbnRSYW5nZVN0YXR1cz4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1Db250ZW50ID0gY2NlLmdldENoaWxkKGkpIGFzIENvbW1Db250ZW50RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRNYXJrLCBlbmRNYXJrLCBwcm9wczogeyBpZCB9LCBmb2N1cyB9ID0gY29tbUNvbnRlbnQ7XG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgPSBEb2N1bWVudFNlbGVjdGlvbi5nZXRBbmNlc3RvckNvbW1vbkNvbnRyb2woc3RhcnRNYXJrLCBlbmRNYXJrKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vblJhbmdlID0gUmFuZ2VVdGlsLmdldFNlbGN0aW9uUmFuZ2Uoc3RhcnRNYXJrLCAwLCBlbmRNYXJrLCAxLCBhbmNlc3RvckNvbW1vbkNvbnRyb2wpO1xuICAgICAgICAgICAgU2VsZWN0aW9uT3ZlcmxheXMuYWRkVG9Db21tZW50U2V0cyhjb21tb25SYW5nZSwgc2V0KTtcbiAgICAgICAgICAgIGNvbW1lbnRSYW5nZVN0YXR1cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb21tQ29udGVudCxcbiAgICAgICAgICAgICAgICByYW5nZTogY29tbW9uUmFuZ2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tc0NvbnRhaW5lci5zZWxlY3RlZFNldCA9IHNldDtcbiAgICAgICAgdGhpcy5jb21tc0NvbnRhaW5lci5jb21tZW50UmFuZ2VTdGF0dXMgPSBjb21tZW50UmFuZ2VTdGF0dXM7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBMZWFmRWxlbWVudCxcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zLFxuICAgIEVsZW1lbnRcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcblxuLyoqXG4gKiDmrrXokL3ooYxcbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFMaW5lRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PFBhcmFMaW5lUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3AtbGluZScpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFBhcmFMaW5lUHJvcHMoKTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFBhcmFMaW5lRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBQYXJhTGluZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSA5OTk5O1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFMaW5lUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUGFyYUxpbmVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3SG9yaUxpbmUocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5wYXJlbnQucmVjdC53aWR0aCwgJ2JsYWNrJywgMSk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhTGluZUVsZW1lbnRGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8UGFyYUxpbmVQcm9wcz4ge1xuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxQYXJhTGluZVByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgUGFyYUxpbmVFbGVtZW50KCk7XG4gICAgICAgIGVsZS5wcm9wcy5saW5lVHlwZSA9IGRhdGEucHJvcHM/LmxpbmVUeXBlID8/ICdzb2xpZCc7XG4gICAgICAgIHJldHVybiBlbGU7XG4gICAgfVxuXG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAncC1saW5lJztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhTGluZVByb3BzIHtcbiAgICBsaW5lVHlwZTogJ3NvbGlkJyB8ICdkYXNoJyA9ICdzb2xpZCc7XG5cbiAgICBjbG9uZShkZXN0PzogUGFyYUxpbmVQcm9wcyk6IFBhcmFMaW5lUHJvcHMge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGRlc3QgPz8gbmV3IFBhcmFMaW5lUHJvcHMoKTtcbiAgICAgICAgY2xvbmUubGluZVR5cGUgPSB0aGlzLmxpbmVUeXBlO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgRWxlbWVudCwgVmlld09wdGlvbnMsIFBhZ2VPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IENoZWNrQm94RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvY2hlY2tib3gvY2hlY2tib3gtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudENvbnRlbnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQgeyBDb21tc0NvbnRhaW5lckVsZW1lbnQsIENvbW1lbnRzRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudHMtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50Q2hlY2tGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWNoZWNrLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50RGF0ZUZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZGF0ZS1pbXBsXCI7XG5pbXBvcnQgeyBEYXRhRWxlbWVudEltZ0ZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtaW1hZ2UtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRMaXN0RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1saXN0LWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50VGV4dEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50LCBEb2N1bWVudEJvZHlGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEZvb3RlckVsZW1lbnQsIERvY3VtZW50Rm9vdGVyRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWZvb3Rlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEhlYWRlckVsZW1lbnQsIERvY3VtZW50SGVhZGVyRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQsIERvY3VtZW50RmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7IERhdGFFbGVtZW50TUhGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9tZWRpYS1mb3JtdWxhL21lbnN0cnVhbC1oaXN0b3J5XCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1pbXBsXCI7XG5pbXBvcnQgeyBQaWN0dXJlRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvcGljdHVyZS9pbWFnZS1pbXBsXCI7XG5pbXBvcnQgeyBSYWRpb0JveEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3JhZGlvL3JhZGlvLWltcGxcIjtcbmltcG9ydCB7IEJyZWFrRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvc3ltYm9sL2JyLXN5bWJvbC1pbXBsXCI7XG5pbXBvcnQgeyBUYWJsZUNlbGxGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvdGFibGUvdGFibGUtaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVSb3dGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHsgUnVuRWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcbmltcG9ydCB7IFRleHRHcm91cEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkLCBUcmFja1J1blByb3BzIH0gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRHcm91cEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZ3JvdXAtaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5UGFydEZhY3RvcnkgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LXBhcnQtaW1wbFwiO1xuaW1wb3J0IHsgRGF0YUVsZW1lbnRCYXJjb2RlRmFjdG9yeSB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXJjb2RlXCI7XG5pbXBvcnQgeyBQYXJhTGluZUVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vaW1wbC9wYXJhZ3JhcGgvcC1saW5lLWltcGxcIjtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRSZWFkZXIge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaXZhdGUgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSkge1xuICAgICAgICB0aGlzLmluaXRGYWN0b3J5KCk7XG4gICAgfVxuXG4gICAgZmFjdG9yaWVzOiBBcnJheTxFbGVtZW50RmFjdG9yeT4gPSBbXTtcblxuICAgIGFkZEZhY3Rvcnk8VSBleHRlbmRzIG51bGwgfCBvYmplY3QsIFQgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxVPj4oYzogbmV3ICgpID0+IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgYygpO1xuICAgICAgICBpbnN0YW5jZS5vcHRpb25zID0gdGhpcy5kb2NDdHgudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuZmFjdG9yaWVzLnB1c2goaW5zdGFuY2UgYXMgRWxlbWVudEZhY3RvcnkpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBpbml0RmFjdG9yeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERvY3VtZW50RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEb2N1bWVudEhlYWRlckZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRG9jdW1lbnRCb2R5RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShQYXJhZ3JhcGhGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFRleHRHcm91cEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoQ2hlY2tCb3hGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KFRhYmxlRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShUYWJsZVJvd0ZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoVGFibGVDZWxsRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEb2N1bWVudEZvb3RlckZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUGljdHVyZUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUmFkaW9Cb3hGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50VGV4dEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnREYXRlRmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudExpc3RGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50Q2hlY2tGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KERhdGFFbGVtZW50QmFyY29kZUZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoQnJlYWtGYWN0b3J5KTtcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KENvbW1lbnRzRmFjdG9yeSlcbiAgICAgICAgdGhpcy5hZGRGYWN0b3J5KENvbW1lbnRDb250ZW50RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShDb21tZW50RmFjdG9yeSk7XG4gICAgICAgIHRoaXMuYWRkRmFjdG9yeShEYXRhRWxlbWVudEltZ0ZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRNSEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUnVuRWxlbWVudEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRGF0YUVsZW1lbnRHcm91cEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoRG9jdW1lbnRCb2R5UGFydEZhY3RvcnkpO1xuICAgICAgICB0aGlzLmFkZEZhY3RvcnkoUGFyYUxpbmVFbGVtZW50RmFjdG9yeSk7XG4gICAgICAgIC8vIHRoaXMucmVnaXN0ZXJSZWFkRnVuYzxUcmFja1J1blByb3BzPignaW5zLXJ1bicsIChkYXRhKSA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBwcm9wcyA9IG5ldyBUcmFja1J1blByb3BzKGRhdGEudHlwZSk7XG4gICAgICAgIC8vICAgICBwcm9wcy51c2VySWQgPSBkYXRhLnVzZXJJZDtcbiAgICAgICAgLy8gICAgIHByb3BzLnVzZXJOYW1lID0gZGF0YS51c2VyTmFtZTtcbiAgICAgICAgLy8gICAgIHByb3BzLmRhdGUgPSBkYXRhLmRhdGU7XG4gICAgICAgIC8vICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgIC8vIH0pXG4gICAgICAgIC8vIHRoaXMucmVnaXN0ZXJSZWFkRnVuYzxUcmFja1J1blByb3BzPignZGVsLXJ1bicsIChkYXRhKSA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBwcm9wcyA9IG5ldyBUcmFja1J1blByb3BzKGRhdGEudHlwZSk7XG4gICAgICAgIC8vICAgICBwcm9wcy51c2VySWQgPSBkYXRhLnVzZXJJZDtcbiAgICAgICAgLy8gICAgIHByb3BzLnVzZXJOYW1lID0gZGF0YS51c2VyTmFtZTtcbiAgICAgICAgLy8gICAgIHByb3BzLmRhdGUgPSBkYXRhLmRhdGU7XG4gICAgICAgIC8vICAgICByZXR1cm4gcHJvcHM7XG4gICAgICAgIC8vIH0pXG4gICAgfVxuXG4gICAgcmVhZChkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhIGluc3RhbmNlb2YgRG9jdW1lbnRFbGVtZW50ID8gZGF0YSA6IHRoaXMucmVhZEVsZW1lbnQoZGF0YSkgYXMgRG9jdW1lbnRFbGVtZW50O1xuICAgICAgICB0aGlzLnNldERvY3VtZW50KGRvY3VtZW50KTtcbiAgICB9XG5cbiAgICBzZXREb2N1bWVudChkb2N1bWVudDogRG9jdW1lbnRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vIGlmICh0aGlzLmRvY0N0eC5kb2N1bWVudCkge1xuICAgICAgICAvLyAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHRoaXMuZG9jdW1lbnQ/LmNsZWFySXRlbXMoKTtcbiAgICAgICAgLy8gZG9jdW1lbnQuZG9jUHJvcHMuY2xvbmUodGhpcy5kb2N1bWVudC5kb2NQcm9wcyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHlFbGVtZW50ID0gZG9jdW1lbnQuZmluZCgoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50Qm9keUVsZW1lbnQpIGFzIERvY3VtZW50Qm9keUVsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LmhlYWRlckVsZW1lbnQgPSBkb2N1bWVudC5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRIZWFkZXJFbGVtZW50KSBhcyBEb2N1bWVudEhlYWRlckVsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LmZvb3RlckVsZW1lbnQgPSBkb2N1bWVudC5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRGb290ZXJFbGVtZW50KSBhcyBEb2N1bWVudEZvb3RlckVsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBDb21tc0NvbnRhaW5lckVsZW1lbnQpIGFzIENvbW1zQ29udGFpbmVyRWxlbWVudDtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCA9IG5ldyBDb21tc0NvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5jbGVhckl0ZW1zKCk7XG4gICAgICAgIGRvY3VtZW50LmFkZENoaWxkKGRvY3VtZW50LmhlYWRlckVsZW1lbnQpO1xuICAgICAgICBkb2N1bWVudC5hZGRDaGlsZChkb2N1bWVudC5ib2R5RWxlbWVudCk7XG4gICAgICAgIGRvY3VtZW50LmFkZENoaWxkKGRvY3VtZW50LmZvb3RlckVsZW1lbnQpO1xuICAgICAgICBkb2N1bWVudC5hZGRDaGlsZChkb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICBkb2N1bWVudC52aWV3T3B0aW9ucyA9IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGguZmxvb3IoZG9jdW1lbnQucHJvcHMud2lkdGggKiB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8pO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmZsb29yKGRvY3VtZW50LnByb3BzLmhlaWdodCAqIHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncyA9IG5ldyBQYWdlT3B0aW9ucyh3aWR0aCwgaGVpZ2h0LCBkb2N1bWVudC5wcm9wcy5vcmllbnQpO1xuICAgICAgICAvL3RoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzLndpZHRoID0gdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGggKyAxMDtcbiAgICB9XG5cblxuICAgIHJlYWRFbGVtZW50KGRhdGE6IGFueSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0eXBlID0gZGF0YS50eXBlIGFzIHN0cmluZztcbiAgICAgICAgZm9yIChjb25zdCBmYWN0b3J5IG9mIHRoaXMuZmFjdG9yaWVzKSB7XG4gICAgICAgICAgICBpZiAoZmFjdG9yeS5tYXRjaCh0eXBlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUVsZW1lbnQoZGF0YSwgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZEV4dGVuZHNQcm9wcyhkYXRhLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEFycjogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkcmVuIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2VsZW1lbnQuYWRkQ2hpbGQodGhpcy5yZWFkRWxlbWVudChjaGlsZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRBcnIucHVzaCh0aGlzLnJlYWRFbGVtZW50KGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmFjdG9yeS5yZWFkQ29tcGxldGVkKGVsZW1lbnQsIGNoaWxkQXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquefpeeahOWFg+e0oOexu+WeizonICsgdHlwZSk7XG4gICAgfVxuXG4gICAgLy8gcHJvcHNSZWFkRnVuY3M6IE1hcDxzdHJpbmcsIChkYXRhOiBhbnkpID0+IGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgICAvLyByZWdpc3RlclJlYWRGdW5jPFQ+KHByb3BOYW1lOiBzdHJpbmcsIGZ1bmM6IChkYXRhOiBUKSA9PiBUKTogdm9pZCB7XG4gICAgLy8gICAgIHRoaXMucHJvcHNSZWFkRnVuY3Muc2V0KHByb3BOYW1lLCBmdW5jKTtcbiAgICAvLyB9XG5cbiAgICByZWFkRXh0ZW5kc1Byb3BzKGRhdGE6IGFueSwgZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGEucHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHRlbmRzUHJvcHMgPSBkYXRhLnByb3BzLl9fYXR0YWNoZWRQcm9wZXJ0eTtcbiAgICAgICAgaWYgKGV4dGVuZHNQcm9wcykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQucHJvcHMgaW5zdGFuY2VvZiBJTm90aWZ5UHJvcGVydHlDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXh0ZW5kc1Byb3BzIGFzIG9iamVjdCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucHJvcHMuc2V0UHJvcGVydHkoa2V5LCBleHRlbmRzUHJvcHNba2V5XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50UGFpbnQgfSBmcm9tIFwiLi9kb2N1bWVudC1wYWludFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uUmFuZ2UsIFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBMZWFmRWxlbWVudCwgUmVjdCwgRWxlbWVudCwgUG9zaXRpb24sIFZpZXdPcHRpb25zLCBSZXNpemVMZWFmUmVuZGVyT2JqZWN0LCBEb2NNb2RlIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7XG4gICAgRHJvcEVsZW1lbnRFdmVudCxcbiAgICBFbGVtZW50RXZlbnQsXG4gICAgRXZlbnRTdGFnZSxcbiAgICBFdmVudFR5cGVzLFxuICAgIEdldFRyYWNrVGlwc0V2ZW50LFxuICAgIEdvdEN1cnNvckV2ZW50LFxuICAgIEhpdEV2ZW50SW5mbyxcbiAgICBIaXRSZWdpb24sXG4gICAgSVRyYWNrVGlwcyxcbiAgICBMb3N0Q3Vyc29yRXZlbnQsXG4gICAgTW91c2Vkb3duRWxlbWVudEV2ZW50LFxuICAgIE1vdXNlRWxlbWVudEV2ZW50XG59IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBQaWN0dXJlRWxlbWVudCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IEJyZWFrRWxlbWVudCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IFBTeW1ib2xFbGVtZW50IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCwgVGFibGVDZWxsUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgVGFibGVSb3dFbGVtZW50LCBUYWJsZVJvd1JlbmRlck9iamVjdCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IEJvcmRlclR5cGUsIEJyYW5jaFJlbmRlck9iamVjdCwgQ3Vyc29yVHlwZSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRWRpdG9yQ29udGV4dCB9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCB9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gXCIuL2V2ZW50LXN1YmplY3RcIjtcbmltcG9ydCB7IERvY3VtZW50SW5wdXQgfSBmcm9tIFwiLi9kb2N1bWVudC1pbnB1dC1jdXJzb3JcIjtcblxuaW50ZXJmYWNlIEVkZ2VSZW5kZXJJbmZvIHtcbiAgICByZW5kZXJFbGVtZW50OiBFbGVtZW50LFxuICAgIHJlbGF0aXZlUG9zOiBQb3NpdGlvbixcbiAgICBtb3VzZWRvd246IGJvb2xlYW4sXG4gICAgbW91c2Vkb3duUG9zPzogUG9zaXRpb24sXG4gICAgYm9yZGVyOiBCb3JkZXJUeXBlXG59XG5cbi8qKlxuICog5LqL5Lu257O757ufXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEV2ZW50IHtcbiAgICBwcml2YXRlIGlzbW91c2Vkb3duITogYm9vbGVhbjtcbiAgICAvL+W8gOWni+eCueWHu+aXtueahOWFg+e0oOS/oeaBr1xuICAgIHN0YXJ0SGl0SW5mbyE6IEhpdEV2ZW50SW5mbyB8IG51bGw7XG4gICAgLy/lvZPliY3kvY3nva7ngrnlh7vnmoTlhYPntKDkv6Hmga9cbiAgICBlbmRIaXRJbmZvITogSGl0RXZlbnRJbmZvIHwgbnVsbDtcbiAgICAvL+W9k+WJjeWumuS9jeeahOeEpueCueWFg+e0oCzkvovlpoLlm77niYfnrYlcbiAgICBmb2N1c2VkRWxlbWVudCE6IExlYWZFbGVtZW50IHwgbnVsbDtcbiAgICBmb2N1c2VkUmVjdCE6IFJlY3QgfCBudWxsO1xuICAgIC8v5b2T5YmN5YWJ5qCH5omA5Zyo55qE5YWD57SgXG4gICAgY3VycmVudE1vdXNlb3ZlclJlbmRlciE6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbDtcbiAgICBoaXRJbmZvQ2hhbmdlZDogU3ViamVjdDx7IHN0YXJ0SGl0SW5mbzogSGl0RXZlbnRJbmZvLCBlbmRIaXRJbmZvOiBIaXRFdmVudEluZm8gfT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNsaWNrRXZlbnQ6IFN1YmplY3Q8TW91c2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGRibENsaWNrRXZlbnQ6IFN1YmplY3Q8TW91c2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNoYW5nZUN1cnNvcjogU3ViamVjdDxDdXJzb3JUeXBlPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29udGV4dE1lbnU6IFN1YmplY3Q8TW91c2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHRyYWNrVGlwc0NoYW5nZWQ6IFN1YmplY3Q8eyBwb3M6IFBvc2l0aW9uLCB0aXBzOiBJVHJhY2tUaXBzIH0+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+WFieagh+WkhOS6jui+ueahhueahOe7mOWItuWFg+e0oFxuICAgIGVkZ2VSZW5kZXJJbmZvITogRWRnZVJlbmRlckluZm8gfCBudWxsO1xuICAgIC8v5b2T5YmN6byg5qCH5omA5Zyo55qEcGFnZS1wb3NpdGlvblxuICAgIGN1cnJlbnRQb3MhOiBQb3NpdGlvbjtcbiAgICAvL+m8oOagh+aMieS4i+eahOS9jee9rlxuICAgIG1vdXNlZG93blBvcyE6IFBvc2l0aW9uO1xuICAgIHN1YnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcbiAgICBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGU7XG4gICAgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBwcml2YXRlIGRvY3VtZW50UGFpbnQ6IERvY3VtZW50UGFpbnQsIHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcml2YXRlIGRvY3VtZW50SW5wdXQ6IERvY3VtZW50SW5wdXQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZSA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gdGhpcy5kb2NDdHgudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuYmluZEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2Vkb3duKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZXVwJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2V1cChldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnY2xpY2snKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUNsaWNrSGFuZGxlKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdjb250ZXh0bWVudScpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51Lm5leHQoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ21vdXNlbW92ZScpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlbW92ZShldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnZGJsY2xpY2snKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZURibENsaWNrSGFuZGxlKGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uTGVmdEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0xlZnQoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uUmlnaHRFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9SaWdodCgpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25TZWxlY3RBbGxFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uSG9tZUV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0xpbmVTdGFydCgpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkVuZEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0xpbmVFbmQoKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25VcEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1VwT3JEb3duKHRydWUpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkRvd25FdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9VcE9yRG93bihmYWxzZSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTdWJFdmVudChzdWI6IFN1YnNjcmlwdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChzdWIpO1xuICAgIH1cblxuICAgIGNsZWFyU3ViRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vicy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zdGFydEhpdEluZm8gPSBudWxsO1xuICAgICAgICB0aGlzLmVuZEhpdEluZm8gPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb2N1c2VkUmVjdCA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlciA9IG51bGw7XG4gICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8gPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW91c2Vkb3duKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRWaWV3UG9zKGV2dCwgZG9jRXZlbnQpO1xuICAgICAgICBkb2NFdmVudC5idXR0b25zID0gZXZ0LmJ1dHRvbnM7XG4gICAgICAgIGRvY0V2ZW50LnNoaWZ0ID0gZXZ0LnNoaWZ0S2V5O1xuICAgICAgICBkb2NFdmVudC5jdHJsID0gZXZ0LmN0cmxLZXk7XG4gICAgICAgIHRoaXMubW91c2Vkb3duUG9zID0geyB4OiBkb2NFdmVudC5nbG9iYWxYLCB5OiBkb2NFdmVudC5nbG9iYWxZIH07XG4gICAgICAgIHRoaXMubW91c2Vkb3duSGFuZGxlKGRvY0V2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdXNldXAoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5zZXRFdmVudFZpZXdQb3MoZXZ0LCBkb2NFdmVudCk7XG4gICAgICAgIGRvY0V2ZW50LnNoaWZ0ID0gZXZ0LnNoaWZ0S2V5O1xuICAgICAgICBkb2NFdmVudC5jdHJsID0gZXZ0LmN0cmxLZXk7XG4gICAgICAgIHRoaXMuaXNtb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3VzZW1vdmUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5zZXRFdmVudFZpZXdQb3MoZXZ0LCBkb2NFdmVudCk7XG4gICAgICAgIGRvY0V2ZW50LnNoaWZ0ID0gZXZ0LnNoaWZ0S2V5O1xuICAgICAgICBkb2NFdmVudC5jdHJsID0gZXZ0LmN0cmxLZXk7XG4gICAgICAgIGlmICh0aGlzLm1vdXNlZG93blBvcyAmJiBkb2NFdmVudC5nbG9iYWxYID09PSB0aGlzLm1vdXNlZG93blBvcy54ICYmIGRvY0V2ZW50Lmdsb2JhbFkgPT09IHRoaXMubW91c2Vkb3duUG9zLnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vdXNlbW92ZUhhbmRsZShkb2NFdmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u57yp5pS+5YC877yM6K6+572u5Zyo57uY5Yi25a+56LGh5LiK55qE5Z2Q5qCH5L2N572uXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEBwYXJhbSB2aWV3RXZ0XG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRFdmVudFZpZXdQb3MoZXZ0OiBNb3VzZUV2ZW50LCB2aWV3RXZ0OiBFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdmlld0V2dC5nbG9iYWxYID0gZXZ0Lm9mZnNldFggLyB0aGlzLnZpZXdPcHRpb25zLnNjYWxlO1xuICAgICAgICB2aWV3RXZ0Lmdsb2JhbFkgPSBldnQub2Zmc2V0WSAvIHRoaXMudmlld09wdGlvbnMuc2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmV2VHJhY2tJbmZvOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDmmL7npLrmj5DnpLrkv6Hmga9cbiAgICAgKiDmmL7npLrnlZnnl5Xmj5DnpLrkv6Hmga/nrYlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFRpcHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlci5yZW5kZXIuZWxlbWVudDtcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgR2V0VHJhY2tUaXBzRXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBldmVudC5zb3VyY2UgPSBlbGVtZW50O1xuICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdHZXRUcmFja1RpcHMnLCBlbGVtZW50LCBldmVudCwgJ0J1YmJsaW5nJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICBpZiAoZXZlbnQudHJhY2tUaXBzKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrVGlwc0NoYW5nZWQubmV4dCh7IHBvczogeyAuLi50aGlzLmN1cnJlbnRQb3MgfSwgdGlwczogZXZlbnQudHJhY2tUaXBzIH0pO1xuICAgICAgICAgICAgdGhpcy5wcmV2VHJhY2tJbmZvID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wcmV2VHJhY2tJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50cmFja1RpcHNDaGFuZ2VkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMucHJldlRyYWNrSW5mbyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmu5rliqjop4blm77nmoTml7blgJnvvIzpnIDopoHmiYvliqjop6blj5Ftb3VzZW1vdmVcbiAgICAgKi9cbiAgICBvblNjcm9sbFZpZXcoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UG9zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0gdGhpcy5jdXJyZW50UG9zLng7XG4gICAgICAgIGRvY0V2ZW50Lmdsb2JhbFkgPSB0aGlzLmN1cnJlbnRQb3MueTtcbiAgICAgICAgdGhpcy5tb3VzZW1vdmVIYW5kbGUoZG9jRXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhum8oOagh+aMieS4i+S6i+S7tlxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgbW91c2Vkb3duSGFuZGxlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy/ngrnlh7vlj7PplK7ml7Ys55u05o6l6L+U5ZueXG4gICAgICAgIGlmIChldnQuYnV0dG9ucyA9PT0gMiAmJiB0aGlzLnN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNtb3VzZWRvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhldnQpO1xuICAgICAgICBpZiAoIUVsZW1lbnRVdGlsLnZlcmlmeUhpdGFibGUodGhpcy5zdGFydEhpdEluZm8/LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mbyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEVsZW1lbnQgPSB0aGlzLnN0YXJ0SGl0SW5mby5lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hFbGVtZW50Rm9jdXMoKTtcbiAgICAgICAgICAgIC8v5aaC5p6c5b2T5YmN6YCJ5Lit55qE5piv5q616JC956ym5Y+377yM5YiZ6ZyA6KaB5omL5Yqo5bCG5YW25YGP56e76YeP5a6a5L2N5Yiw5bem6L65XG4gICAgICAgICAgICBpZiAoc3RhcnRFbGVtZW50IGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQgfHwgc3RhcnRFbGVtZW50IGluc3RhbmNlb2YgQnJlYWtFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEhpdEluZm8ub2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vdGhpcy5zdGFydEhpdEluZm8uc3RhcnRSZWdpb24gPSB0aGlzLmdldFJlbmRlck9iamVjdFJlZ2lvbih0aGlzLnN0YXJ0SGl0SW5mby5yZW5kZXIpO1xuICAgICAgICAgICAgdGhpcy5lbmRIaXRJbmZvID0gdGhpcy5zdGFydEhpdEluZm87XG4gICAgICAgICAgICBjb25zdCBtb3VzZWRvd25FdmVudCA9IG5ldyBNb3VzZWRvd25FbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgbW91c2Vkb3duRXZlbnQuc291cmNlID0gc3RhcnRFbGVtZW50O1xuICAgICAgICAgICAgRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudE1vdXNlZG93bicsIHN0YXJ0RWxlbWVudCwgbW91c2Vkb3duRXZlbnQsICdBbGwnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySGl0SW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkZ2VSZW5kZXJJbmZvKSB7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93biA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcyA9IHRoaXMuY3VycmVudFBvcztcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIaXRJbmZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oaXRJbmZvQ2hhbmdlZC5uZXh0KHtcbiAgICAgICAgICAgIHN0YXJ0SGl0SW5mbzogdGhpcy5zdGFydEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvLFxuICAgICAgICAgICAgZW5kSGl0SW5mbzogdGhpcy5lbmRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mb1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydEhpdEluZm8gPSB0aGlzLnN0YXJ0SGl0SW5mbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lhYPntKDnhKbngrnnirbmgIFcbiAgICAgKi9cbiAgICBwcml2YXRlIHN3aXRjaEVsZW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHRoaXMuc3RhcnRIaXRJbmZvLmVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50LmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRSZWN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRFbGVtZW50ICYmIHN0YXJ0RWxlbWVudC5mb2N1c2FibGUpIHtcbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IHN0YXJ0RWxlbWVudCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZFJlY3QgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdCh0aGlzLnN0YXJ0SGl0SW5mby5yZW5kZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJIaXRJbmZvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXJ0SGl0SW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuZW5kSGl0SW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN6byg5qCH5omA5Zyo5L2N572u55qE5YWD57Sg5L+h5oGvXG4gICAgICogQHBhcmFtIGV2dFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRIaXRJbmZvKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiBIaXRFdmVudEluZm8gfCBudWxsIHtcbiAgICAgICAgY29uc3QgaGl0RG9jSW5mbyA9IHRoaXMuZ2V0SGl0RG9jUGFnZShldnQpO1xuICAgICAgICBpZiAoIWhpdERvY0luZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZG9jSW5kZXgsIGRvY1JlbmRlciwgaGl0UGFnZVBvcyB9ID0gaGl0RG9jSW5mbztcbiAgICAgICAgLy/orr7nva7mlofmoaPpobXkuK3nmoTnm7jlr7nkvY3nva5cbiAgICAgICAgZXZ0LnBhZ2VYID0gaGl0UGFnZVBvcy54O1xuICAgICAgICBldnQucGFnZVkgPSBoaXRQYWdlUG9zLnk7XG5cbiAgICAgICAgY29uc3QgaGl0SW5mbyA9IHRoaXMuZ2V0SGl0TGVhZlJlbmRlcihkb2NSZW5kZXIsIHsgeDogMCwgeTogLWRvY1JlbmRlci5yZWN0LnkgfSwge1xuICAgICAgICAgICAgeDogZXZ0LnBhZ2VYLFxuICAgICAgICAgICAgeTogZXZ0LnBhZ2VZXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBoaXRJbmZvLnJlbmRlci5lbGVtZW50IGFzIExlYWZFbGVtZW50O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGl0RG9jSW5kZXg6IGRvY0luZGV4LFxuICAgICAgICAgICAgb2Zmc2V0OiBoaXRJbmZvLm9mZnNldCxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICByZW5kZXI6IGhpdEluZm8ucmVuZGVyLFxuICAgICAgICAgICAgcmVsYXRpdmVSZWN0OiBoaXRJbmZvLnJlbmRlci5yZWN0LFxuICAgICAgICAgICAgYWJzb2x1dGVSZWN0OiBoaXRJbmZvLmFic29sdXRlUmVuZGVyUmVjdCxcbiAgICAgICAgICAgIHNoYWRvd1JlbmRlckluZGV4OiBlbGVtZW50LnBhaW50UmVuZGVycy5pbmRleE9mKGhpdEluZm8ucmVuZGVyKSxcbiAgICAgICAgICAgIHN0YXJ0UmVnaW9uOiBFbGVtZW50VXRpbC5nZXRSZW5kZXJPYmplY3RSZWdpb24oaGl0SW5mby5yZW5kZXIpXG4gICAgICAgIH07XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1vdXNlb3ZlclJlbmRlckluZm8oZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGhpdERvY0luZm8gPSB0aGlzLmdldEhpdERvY1BhZ2UoZXZ0KTtcbiAgICAgICAgaWYgKCFoaXREb2NJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRvY0luZGV4LCBkb2NSZW5kZXIsIHBhaW50QWJzb2x1dGVSZWN0LCBoaXRQYWdlUG9zIH0gPSBoaXREb2NJbmZvO1xuICAgICAgICAvL+iuvue9ruaWh+aho+mhteS4reeahOebuOWvueS9jee9rlxuICAgICAgICBldnQucGFnZVggPSBoaXRQYWdlUG9zLng7XG4gICAgICAgIGV2dC5wYWdlWSA9IGhpdFBhZ2VQb3MueTtcbiAgICAgICAgLy9jb25zdCBkb2NSZW5kZXJQYXJlbnRBYnNvbHV0ZVBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3MoZG9jUmVuZGVyLnBhcmVudCk7XG4gICAgICAgIC8vY29uc3QgbW91c2VvdmVySW5mbyA9IHRoaXMuZ2V0TW91c2VvdmVyUmVuZGVyKGRvY1JlbmRlciwgZG9jUmVuZGVyUGFyZW50QWJzb2x1dGVQb3MsIHsgeDogZXZ0Lmdsb2JhbFgsIHk6IGV2dC5nbG9iYWxZICsgdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZIH0pO1xuICAgICAgICBjb25zdCBtb3VzZW92ZXJJbmZvID0gdGhpcy5nZXRIaXRMZWFmUmVuZGVyKGRvY1JlbmRlciwge1xuICAgICAgICAgICAgeDogLWRvY1JlbmRlci5yZWN0LngsXG4gICAgICAgICAgICB5OiAtZG9jUmVuZGVyLnJlY3QueVxuICAgICAgICB9LCB7IHg6IGV2dC5wYWdlWCwgeTogZXZ0LnBhZ2VZIH0pO1xuICAgICAgICByZXR1cm4gbW91c2VvdmVySW5mbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpvKDmoIfnp7vliqjkuovku7ZcbiAgICAgKiDkuLvopoHlpITnkIbpgInljLrmlLnlj5hcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdXNlbW92ZUhhbmRsZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS50aW1lKCdtb3VzZW1vdmXorqHml7YnKVxuICAgICAgICBsZXQgZWRnZVJlbmRlckluZm86IG51bGwgfCB0eXBlb2YgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgICAgIGNvbnN0IG1vdXNlUG9zOiBQb3NpdGlvbiA9IHsgeDogZXZ0Lmdsb2JhbFgsIHk6IGV2dC5nbG9iYWxZIH07XG4gICAgICAgIGxldCBjdXJzb3JUeXBlOiBDdXJzb3JUeXBlID0gJ3RleHQnO1xuICAgICAgICB0aGlzLmN1cnJlbnRQb3MgPSBtb3VzZVBvcztcbiAgICAgICAgaWYgKHRoaXMuaXNtb3VzZWRvd24gJiYgdGhpcy5zdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhldnQpO1xuICAgICAgICAgICAgLy/lj6rmnInpvKDmoIfmjInkuIvnmoTml7blgJnpnIDopoHlj5HluIPkuovku7ZcbiAgICAgICAgICAgIHRoaXMucHViSGl0SW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJNb3VzZW92ZXJSZW5kZXJJbmZvID0gdGhpcy5nZXRNb3VzZW92ZXJSZW5kZXJJbmZvKGV2dCk7XG4gICAgICAgIC8v5paw5pen5L+h5oGv5LiN5LiA6Ie0LOmcgOimgeagoemqjOe7mOWItuWMuuWfn++8jOinpuWPkW1vdXNlZW50ZXLjgIFtb3VzZWxlYXZl562J5LqL5Lu2XG4gICAgICAgIHRoaXMuaW52b2tlTW91c2Vtb3ZlRXZlbnQodGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXIsIGN1cnJNb3VzZW92ZXJSZW5kZXJJbmZvPy5yZW5kZXIsIG1vdXNlUG9zKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyID0gY3Vyck1vdXNlb3ZlclJlbmRlckluZm87XG4gICAgICAgIC8v5b2T5YmN5pyJ5YWD57Sg5pyJ54Sm54K55pe277yM6ZyA6KaB6aaW5YWI5Yik5pat5b2T5YmN5L2N572u5piv5ZCm5Zyo54Sm54K55YWD57Sg5LiKXG4gICAgICAgIC8v5aaC5p6c5Y2V5YWD5qC85Lit5YyF5ZCr5Zu+54mH562J5Y+v57yp5pS+55qE5YWD57Sg77yM5bm25LiU5YWD57Sg55qE5aSn5bCP6LaF6L+H5Y2V5YWD5qC877yM5YiZ5b2T5YmN5Zu+54mH55qE5p+Q5LiA6YOo5YiG5bCx5peg5rOV57yp5pS+XG4gICAgICAgIGlmICghdGhpcy5pc21vdXNlZG93biAmJiB0aGlzLmZvY3VzZWRFbGVtZW50ICYmIHRoaXMuZm9jdXNlZFJlY3QgJiYgKDxhbnk+dGhpcy5mb2N1c2VkRWxlbWVudClbJ3Jlc2l6ZWFibGUnXSkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVQb3M6IFBvc2l0aW9uID0geyB4OiBtb3VzZVBvcy54IC0gdGhpcy5mb2N1c2VkUmVjdC54LCB5OiBtb3VzZVBvcy55IC0gdGhpcy5mb2N1c2VkUmVjdC55IH07XG4gICAgICAgICAgICBjb25zdCBpc0luQ2VsbEJvcmRlciA9IENvbW1vblV0aWwuaXNJblBpY3R1cmVSZXNpemVQb2ludCh0aGlzLmZvY3VzZWRSZWN0LCByZWxhdGl2ZVBvcywgNCk7XG4gICAgICAgICAgICBpZiAoaXNJbkNlbGxCb3JkZXIpIHtcbiAgICAgICAgICAgICAgICBjdXJzb3JUeXBlID0gRWxlbWVudFV0aWwuZ2V0Qm9yZGVyQ3Vyc29yKGlzSW5DZWxsQm9yZGVyLmJvcmRlclR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0luQ2VsbEJvcmRlcj8uYm9yZGVyVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlZGdlUmVuZGVySW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckVsZW1lbnQ6IHRoaXMuZm9jdXNlZEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlZG93bjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlzSW5DZWxsQm9yZGVyLmJvcmRlclR5cGVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0vL+W9k+WJjem8oOagh+S4jeWkhOS6jm1vdXNlZG93buW5tuS4lOm8oOagh+S9jeS6juWNleWFg+agvOi+ueeVjOaXtizojrflj5bovrnnlYzkv6Hmga9cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuaXNtb3VzZWRvd24gJiYgdGhpcy5pc0luQ2VsbFJlbmRlck9iamVjdCh0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXIgYXMgUmVuZGVyT2JqZWN0LCBUYWJsZUNlbGxSZW5kZXJPYmplY3QpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIC8vY29uc3QgY2VsbFJlbmRlciA9IHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIC8vY29uc3QgeyByZW5kZXI6IHsgcmVuZGVyUG9zaXRpb246IHsgeDogcngsIHk6IHJ5IH0gfSB9ID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyO1xuICAgICAgICAgICAgLy9jb25zdCBycCA9IHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8uYWJzb2x1dGVSZW5kZXJSZWN0IGFzIFJlY3Q7XG4gICAgICAgICAgICBjb25zdCBycCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KGNlbGxSZW5kZXIpO1xuICAgICAgICAgICAgcnAueSAtPSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVk7XG4gICAgICAgICAgICBjb25zdCByZWxhdGl2ZVBvczogUG9zaXRpb24gPSB7IHg6IG1vdXNlUG9zLnggLSBycC54LCB5OiBtb3VzZVBvcy55IC0gcnAueSB9O1xuICAgICAgICAgICAgY29uc3QgaXNJbkNlbGxCb3JkZXIgPSBDb21tb25VdGlsLmlzSW5SZWN0Qm9yZGVyKGNlbGxSZW5kZXIucmVjdCwgMiwgcmVsYXRpdmVQb3MpO1xuICAgICAgICAgICAgaWYgKGlzSW5DZWxsQm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn5piv5ZCm5Zyo6L655qGG5LiKJyArIGlzSW5DZWxsQm9yZGVyPy5ib3JkZXJUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnNvclR5cGUgPSBFbGVtZW50VXRpbC5nZXRCb3JkZXJDdXJzb3IoaXNJbkNlbGxCb3JkZXIuYm9yZGVyVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUN1cnNvci5uZXh0KGN1cnNvclR5cGUpO1xuICAgICAgICAgICAgaWYgKGlzSW5DZWxsQm9yZGVyPy5ib3JkZXJUeXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBlZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVkZ2VSZW5kZXJJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJFbGVtZW50OiBjZWxsUmVuZGVyLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUG9zLFxuICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlzSW5DZWxsQm9yZGVyLmJvcmRlclR5cGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc21vdXNlZG93bikge1xuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IGVkZ2VSZW5kZXJJbmZvO1xuICAgICAgICB9XG4gICAgICAgIC8v5a2Y5Zyo6L6555WM5YWD57Sg77yM5bm25LiU5b2T5YmN6L6555WM5aSE5LqO6byg5qCH5oyJ5LiL54q25oCBXG4gICAgICAgIGlmICh0aGlzLmVkZ2VSZW5kZXJJbmZvICYmIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVJlbmRlcihldnQpO1xuICAgICAgICAgICAgY3Vyc29yVHlwZSA9IEVsZW1lbnRVdGlsLmdldEJvcmRlckN1cnNvcih0aGlzLmVkZ2VSZW5kZXJJbmZvLmJvcmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyPy5lbGVtZW50IGluc3RhbmNlb2YgTGVhZkVsZW1lbnQgJiYgIXRoaXMuaXNtb3VzZWRvd24gJiYgY3Vyc29yVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBjdXJzb3JUeXBlID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXI/LmVsZW1lbnQuY3Vyc29yVHlwZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZUN1cnNvci5uZXh0KGN1cnNvclR5cGUpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBpc0NlbGxSZW5kZXJPYmplY3QocmVuZGVyOiBSZW5kZXJPYmplY3QgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3nu5jliLblhYPntKDmmK/lkKblnKjljZXlhYPmoLzkuIrpnaJcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzSW5DZWxsUmVuZGVyT2JqZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihyZW5kZXIsIFRhYmxlQ2VsbFJlbmRlck9iamVjdCkgIT09IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Jlc2l6ZVJlbmRlck9iamVjdChyZW5kZXI6IFJlbmRlck9iamVjdCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcmVuZGVyIGluc3RhbmNlb2YgUmVzaXplTGVhZlJlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6blj5HpvKDmoIfnp7vliqjkuovku7ZcbiAgICAgKi9cbiAgICBwcml2YXRlIGludm9rZU1vdXNlbW92ZUV2ZW50KG9sZFJlbmRlcjogUmVuZGVyT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCwgbmV3UmVuZGVyOiBSZW5kZXJPYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkLCBtb3VzZVBvczogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZFBhcmVudFJlbmRlcnMgPSBvbGRSZW5kZXIgPyBFbGVtZW50VXRpbC5nZXRSZW5kZXJNYXBFbGVtZW50cyhvbGRSZW5kZXIpIDogW107XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudFJlbmRlcnMgPSBuZXdSZW5kZXIgPyBFbGVtZW50VXRpbC5nZXRSZW5kZXJNYXBFbGVtZW50cyhuZXdSZW5kZXIpIDogW107XG4gICAgICAgIGNvbnN0IG1vdXNlbGVhdmVSZW5kZXJzID0gb2xkUGFyZW50UmVuZGVycy5maWx0ZXIoaXRlbSA9PiBuZXdQYXJlbnRSZW5kZXJzLmV2ZXJ5KG9sZEl0ZW0gPT4gaXRlbSAhPT0gb2xkSXRlbSkpO1xuICAgICAgICBjb25zdCBtb3VzZWVudGVyUmVuZGVycyA9IG5ld1BhcmVudFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gb2xkUGFyZW50UmVuZGVycy5ldmVyeShvbGRJdGVtID0+IGl0ZW0gIT09IG9sZEl0ZW0pKTtcbiAgICAgICAgY29uc3QgbW91c2Vtb3ZlUmVuZGVycyA9IG9sZFBhcmVudFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gbW91c2VsZWF2ZVJlbmRlcnMuZXZlcnkob2xkSXRlbSA9PiBpdGVtICE9PSBvbGRJdGVtKSk7XG4gICAgICAgIGNvbnN0IGxvb3BJbnZva2VFdmVudCA9IChldmVudE5hbWU6IEV2ZW50VHlwZXMsIGFycmF5OiBBcnJheTxFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5zb3VyY2UgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaW52b2tlRXZlbnQoZXZlbnROYW1lLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIG1vdXNlbGVhdmVSZW5kZXJzKTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdFbGVtZW50TW91c2VFbnRlcicsIG1vdXNlZW50ZXJSZW5kZXJzKTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdFbGVtZW50TW91c2Vtb3ZlJywgbW91c2Vtb3ZlUmVuZGVycyk7XG4gICAgfVxuXG5cbiAgICBwcmV2Q3Vyc29ySXRlbXM6IEFycmF5PEVsZW1lbnQ+ID0gW107XG5cbiAgICAvKipcbiAgICAgKiDop6blj5Hojrflj5bnhKbngrnkuovku7ZcbiAgICAgKiDpnIDopoHmoLnmja7kuIrmrKHojrflj5bnhKbngrnnmoTlhYPntKDvvIzmr5TovoPop6blj5HlpLHljrvnhKbngrnkuovku7ZcbiAgICAgKiBAcGFyYW0gZm9jdXNFbGVtZW50XG4gICAgICovXG4gICAgaW52b2tlQ3Vyc29yKGZvY3VzRWxlbWVudDogTGVhZkVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZvY3VzRWxlbWVudCA9PT0gdGhpcy5wcmV2Q3Vyc29ySXRlbXNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZXRDdXJzb3JFdmVudCA9IG5ldyBHb3RDdXJzb3JFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGdldEN1cnNvckV2ZW50LnNvdXJjZSA9IGZvY3VzRWxlbWVudDtcblxuICAgICAgICBjb25zdCBvbGRQYXJlbnRzID0gdGhpcy5wcmV2Q3Vyc29ySXRlbXM7XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudHMgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRFbGVtZW50cyhmb2N1c0VsZW1lbnQpO1xuICAgICAgICBjb25zdCBsZWF2ZVBhcmVudHMgPSBvbGRQYXJlbnRzLmZpbHRlcihpdGVtID0+IG5ld1BhcmVudHMuZXZlcnkob2xkSXRlbSA9PiBpdGVtICE9PSBvbGRJdGVtKSk7XG4gICAgICAgIGNvbnN0IGVudGVyUGFyZW50cyA9IG5ld1BhcmVudHMuZmlsdGVyKGl0ZW0gPT4gb2xkUGFyZW50cy5ldmVyeShvbGRJdGVtID0+IGl0ZW0gIT09IG9sZEl0ZW0pKTtcbiAgICAgICAgY29uc3QgbG9vcEludm9rZUV2ZW50ID0gKGV2ZW50TmFtZTogRXZlbnRUeXBlcywgYXJyYXk6IEFycmF5PEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gbmV3IExvc3RDdXJzb3JFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5zb3VyY2UgPSBmb2N1c0VsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5jdHggPSB0aGlzLmRvY0N0eDtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lmludm9rZUV2ZW50KGV2ZW50TmFtZSwgbW91c2VFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGxvb3BJbnZva2VFdmVudCgnTG9zdEN1cnNvcicsIGxlYXZlUGFyZW50cyk7XG4gICAgICAgIGxvb3BJbnZva2VFdmVudCgnR290Q3Vyc29yJywgZW50ZXJQYXJlbnRzKTtcblxuICAgICAgICB0aGlzLnByZXZDdXJzb3JJdGVtcyA9IG5ld1BhcmVudHM7XG4gICAgICAgIC8vZERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0dvdEN1cnNvcicsIGZvY3VzRWxlbWVudCwgZ2V0Q3Vyc29yRXZlbnQsICdBbGwnLCB0aGlzLmRvY0N0eCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbW91c2Vkb3duLW1vdXNldXAtY2xpY2tcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdXNlQ2xpY2tIYW5kbGUoZXZ0OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuVmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0SGl0SW5mbyAmJiB0aGlzLmVuZEhpdEluZm8gJiYgdGhpcy5zdGFydEhpdEluZm8uZWxlbWVudCA9PT0gdGhpcy5lbmRIaXRJbmZvLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHRoaXMuc3RhcnRIaXRJbmZvLnJlbmRlci5lbGVtZW50IGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbW91c2Vkb3duRXZlbnQgPSBuZXcgTW91c2Vkb3duRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIG1vdXNlZG93bkV2ZW50LnNvdXJjZSA9IHN0YXJ0RWxlbWVudDtcbiAgICAgICAgICAgIERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnRDbGljaycsIHN0YXJ0RWxlbWVudCwgbW91c2Vkb3duRXZlbnQsIFwiQWxsXCIsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIC8vdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZCB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKGNvbGxhcHNlZCAmJiB0aGlzLnN0YXJ0SGl0SW5mbyAmJiBzdGFydENvbnRyb2wgJiYgdGhpcy5zdGFydEhpdEluZm8uZWxlbWVudCA9PT0gdGhpcy5mb2N1c2VkRWxlbWVudCkge1xuICAgICAgICAgICAgLy9jb25zdCB7IHJlbmRlcjogeyBlbGVtZW50OiBlbmRFbGVtZW50IH0sIG9mZnNldDogZW5kRWxlbWVudE9mZnNldCB9ID0gdGhpcy5lbmRIaXRJbmZvO1xuICAgICAgICAgICAgLy/lvZPliY3nhKbngrnlhYPntKDooqvmi5bmlL5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzZWRFbGVtZW50IGluc3RhbmNlb2YgUGljdHVyZUVsZW1lbnQgJiYgdGhpcy5mb2N1c2VkRWxlbWVudCAhPT0gc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJvcEV2ZW50ID0gbmV3IERyb3BFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgICAgIGRyb3BFdmVudC5zb3VyY2UgPSBzdGFydENvbnRyb2w7XG4gICAgICAgICAgICAgICAgZHJvcEV2ZW50LnNvdXJjZU9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyb3BFdmVudC5kcmFnRWxlbWVudCA9IHRoaXMuZm9jdXNlZEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnREcm9wJywgc3RhcnRDb250cm9sLCBkcm9wRXZlbnQsICdBbGwnLCB0aGlzLmRvY0N0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2NDaGFuZ2UubW92ZUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgdGhpcy5mb2N1c2VkRWxlbWVudCwgdGhpcy5zdGFydEhpdEluZm8ub2Zmc2V0LCB0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50LmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZFJlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsaWNrRXZlbnQubmV4dChldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOm8oOagh+WPjOWHu+S6i+S7tlxuICAgICAqL1xuICAgIHByaXZhdGUgbW91c2VEYmxDbGlja0hhbmRsZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLnNldEV2ZW50Vmlld1BvcyhldnQsIGRvY0V2ZW50KTtcbiAgICAgICAgLy/pnIDopoHlhYjlpITnkIbmmK/lkKblvIDlkK/pobXnnInpobXohJrnvJbovpHlip/og71cbiAgICAgICAgY29uc3QgaGl0UmVnaW9uID0gdGhpcy5nZXRIaXRSZWdpb24oZG9jRXZlbnQpO1xuICAgICAgICBpZiAoKGhpdFJlZ2lvbiA9PT0gJ2Zvb3RlcicgfHwgaGl0UmVnaW9uID09PSAnaGVhZGVyJykgJiYgIXRoaXMuZG9jQ3R4LmRvY3VtZW50LmhlYWRlckVkaXRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuc3dpdGNoUGFnZUhlYWRlckVkaXRvcih0aGlzLnNlbGVjdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChoaXRSZWdpb24gPT09ICdib2R5JyAmJiB0aGlzLmRvY0N0eC5kb2N1bWVudC5oZWFkZXJFZGl0U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnN3aXRjaFBhZ2VIZWFkZXJFZGl0b3IodGhpcy5zZWxlY3Rpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhkb2NFdmVudCk7XG4gICAgICAgIGlmIChoaXRJbmZvKSB7XG4gICAgICAgICAgICBkb2NFdmVudC5zb3VyY2UgPSBoaXRJbmZvLmVsZW1lbnQ7XG4gICAgICAgICAgICBkb2NFdmVudC5zb3VyY2VSZW5kZXIgPSBoaXRJbmZvLnJlbmRlcjtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnREYmxDbGljaycsIGhpdEluZm8uZWxlbWVudCwgZG9jRXZlbnQsICdBbGwnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRibENsaWNrRXZlbnQubmV4dChldnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W54K55Ye755qE5riy5p+T5YWD57Sg5a+56LGhXG4gICAgICogQHBhcmFtIHJlbmRlck9iamVjdFxuICAgICAqIEBwYXJhbSBwYXJQb3NcbiAgICAgKiBAcGFyYW0gaGl0UG9zXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEhpdExlYWZSZW5kZXIocmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3QsIHBhclBvczogUG9zaXRpb24sIGhpdFBvczogUG9zaXRpb24pOiB7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgb2Zmc2V0OiBudW1iZXIsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIC8v5aSE55CG5Y2V5YWD5qC85ZCI5bm277yM6KKr5ZCI5bm255qE5Y2V5YWD5qC85b2T5YmN5bGe5LqO6KKr6ZqQ6JeP54q25oCBLOS4jeiDveiiq+mAieaLqVxuICAgICAgICAvL2lmIChyZW5kZXJPYmplY3QuZWxlbWVudCAmJiByZW5kZXJPYmplY3QuZWxlbWVudC52aXNpYWJsZSA9PT0gZmFsc2UgfHwgcmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCkge1xuICAgICAgICBpZiAoIUVsZW1lbnRVdGlsLmNoZWNrQXZhaWxIaXRSZW5kZXIocmVuZGVyT2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZW5kZXJPYmplY3QucmVjdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZW5kZXJPYmplY3QucmVjdCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0ge1xuICAgICAgICAgICAgeDogcGFyUG9zLnggKyByZW5kZXJPYmplY3QucmVjdC54LFxuICAgICAgICAgICAgeTogcGFyUG9zLnkgKyByZW5kZXJPYmplY3QucmVjdC55LFxuICAgICAgICAgICAgd2lkdGg6IHJlbmRlck9iamVjdC5yZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXJPYmplY3QucmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRSb3dIaXRMZWFmUmVuZGVyKHJlbmRlck9iamVjdCwgcGFyUG9zLCBoaXRQb3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoQ29tbW9uVXRpbC5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJlbmRlck9iamVjdFJlY3QsIGhpdFBvcykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4ID0gaGl0UG9zLnggLSByZW5kZXJPYmplY3RSZWN0Lng7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gRWxlbWVudFV0aWwuZ2V0SGl0UmVuZGVyT2Zmc2V0KHJlbmRlck9iamVjdCwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiByZW5kZXJPYmplY3RSZWN0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgaGl0UG9zKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVuZGVyID0gcmVuZGVyT2JqZWN0LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldEhpdExlYWZSZW5kZXIoY2hpbGRSZW5kZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJlbmRlck9iamVjdFJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHJlbmRlck9iamVjdFJlY3QueVxuICAgICAgICAgICAgICAgICAgICB9LCBoaXRQb3MpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8v5aaC5p6c5b2T5YmN6IyD5Zu05pyq5Ye75Lit5Lu75L2V5YWD57Sg77yM5YiZ6ZyA6KaB5Yy56YWN5pyA6L+R55qE5YWD57SgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjZW50SGl0UmVuZGVyKHJlbmRlck9iamVjdCwgcGFyUG9zLCBoaXRQb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2V0VFJvd0hpdExlYWZSZW5kZXIocmVuZGVyT2JqZWN0OiBUYWJsZVJvd1JlbmRlck9iamVjdCwgcGFyZW50OiBQb3NpdGlvbiwgcG9zaXRpb246IFBvc2l0aW9uKTogeyByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsIG9mZnNldDogbnVtYmVyLCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGwge1xuICAgICAgICBjb25zdCByb3dFbGUgPSByZW5kZXJPYmplY3QuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIC8v6Leo6aG16YeN5aSN5pi+56S655qE5aS06KGM77yM5bGe5LqO5LiN5Y+v54K55Ye75Yy65Z+fXG4gICAgICAgIC8v5Y+q5pyJ6KGo56ys5LiA6aG16YOo5YiG5Y+v5Lul54K55Ye7XG4gICAgICAgIGlmIChyb3dFbGUucHJvcHMuaGVhZGVyUm93KSB7XG4gICAgICAgICAgICBpZiAocm93RWxlLnBhaW50UmVuZGVycy5pbmRleE9mKHJlbmRlck9iamVjdCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHtcbiAgICAgICAgICAgIHg6IHBhcmVudC54ICsgcmVuZGVyT2JqZWN0LnJlY3QueCxcbiAgICAgICAgICAgIHk6IHBhcmVudC55ICsgcmVuZGVyT2JqZWN0LnJlY3QueSxcbiAgICAgICAgICAgIHdpZHRoOiByZW5kZXJPYmplY3QucmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVuZGVyID0gcmVuZGVyT2JqZWN0LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRIaXRMZWFmUmVuZGVyKGNoaWxkUmVuZGVyLCB7IHg6IHJlbmRlck9iamVjdFJlY3QueCwgeTogcmVuZGVyT2JqZWN0UmVjdC55IH0sIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5aaC5p6c5b2T5YmN6IyD5Zu05pyq5Ye75Lit5Lu75L2V5YWD57Sg77yM5YiZ6ZyA6KaB5Yy56YWN5pyA6L+R55qE5YWD57SgXG4gICAgICogQHBhcmFtIHJlbmRlck9iamVjdFxuICAgICAqIEBwYXJhbSBwYXJlbnRcbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFJlY2VudEhpdFJlbmRlcihyZW5kZXJPYmplY3Q6IEJyYW5jaFJlbmRlck9iamVjdCwgcGFyZW50OiBQb3NpdGlvbiwgcG9zaXRpb246IFBvc2l0aW9uKTogeyByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsIG9mZnNldDogbnVtYmVyLCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGwge1xuICAgICAgICBjb25zdCBjdXJyZW50UmVuZGVyUG9zOiBQb3NpdGlvbiA9IHsgeDogcmVuZGVyT2JqZWN0LnJlY3QueCArIHBhcmVudC54LCB5OiByZW5kZXJPYmplY3QucmVjdC55ICsgcGFyZW50LnkgfVxuICAgICAgICBsZXQgY2hpbGRSZW5kZXJzID0gRWxlbWVudFV0aWwuZ2V0QXZhaWxIaXRSZW5kZXJPYmplY3RzKHJlbmRlck9iamVjdCwgcGFyZW50KTtcbiAgICAgICAgY2hpbGRSZW5kZXJzID0gY2hpbGRSZW5kZXJzLmZpbHRlcihpdGVtID0+ICFpdGVtLnJlbmRlci5kaXNhYmxlQ2xpY2spO1xuICAgICAgICBsZXQgY2hpbGRyZW5SZW5kZXJNYXAgPSBjaGlsZFJlbmRlcnMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgICAgIHJlY3Q6IGl0ZW0ucmVjdCxcbiAgICAgICAgICAgIGRpc3RhbmNlOiBFbGVtZW50VXRpbC5nZXREaXN0YW5jZVRvUmVjdChpdGVtLnJlY3QsIHBvc2l0aW9uKSxcbiAgICAgICAgICAgIHJlbmRlcjogaXRlbS5yZW5kZXJcbiAgICAgICAgfSkpXG4gICAgICAgIC8vcmVjdHMgPSByZWN0cy5jb25jYXQoY2hpbGRSZW5kZXJzLm1hcChpdGVtID0+ICh7IHJlY3Q6IGl0ZW0ucmVjdCwgZGlzdGFuY2U6IEVsZW1lbnRVdGlsLmdldERpc3RhbmNlKHsgeDogaXRlbS5yZWN0LnggKyBpdGVtLnJlY3Qud2lkdGgsIHk6IGl0ZW0ucmVjdC55IH0sIHBvc2l0aW9uKSwgcmVuZGVyOiBpdGVtLnJlbmRlciB9KSkpO1xuICAgICAgICBjaGlsZHJlblJlbmRlck1hcC5zb3J0KChpdGVtMSwgaXRlbTIpID0+IGl0ZW0xLmRpc3RhbmNlIC0gaXRlbTIuZGlzdGFuY2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuUmVuZGVyTWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhZGphY2VudFJlbmRlciA9IGNoaWxkcmVuUmVuZGVyTWFwWzBdO1xuICAgICAgICAgICAgaWYgKCFhZGphY2VudFJlbmRlcikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkamFjZW50UmVuZGVyLnJlbmRlciBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UmVjZW50SGl0UmVuZGVyKGFkamFjZW50UmVuZGVyLnJlbmRlciwgY3VycmVudFJlbmRlclBvcywgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFkamFjZW50UmVuZGVyLnJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGFkamFjZW50UmVuZGVyLnJlY3QueCA+IHBvc2l0aW9uLngpIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhZGphY2VudFJlbmRlci5yZWN0LnggKyBhZGphY2VudFJlbmRlci5yZWN0LndpZHRoIDwgcG9zaXRpb24ueCkge1xuICAgICAgICAgICAgICAgICAgICB4ID0gYWRqYWNlbnRSZW5kZXIucmVjdC53aWR0aDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4ID0gcG9zaXRpb24ueCAtIGFkamFjZW50UmVuZGVyLnJlY3QueDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gRWxlbWVudFV0aWwuZ2V0SGl0UmVuZGVyT2Zmc2V0KGFkamFjZW50UmVuZGVyLnJlbmRlciwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiBhZGphY2VudFJlbmRlci5yZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgIGFic29sdXRlUmVuZGVyUmVjdDogYWRqYWNlbnRSZW5kZXIucmVjdCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueCueWHu+eahGRvYy1wYWdlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRIaXREb2NQYWdlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB7IGRvY1JlbmRlcjogRG9jdW1lbnRSZW5kZXJPYmplY3QsIHBhaW50QWJzb2x1dGVSZWN0OiBQb3NpdGlvbiwgaGl0UGFnZVBvczogUG9zaXRpb24sIGRvY0luZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBjb25zdCBoaXRQb3M6IFBvc2l0aW9uID0geyB4OiBldnQuZ2xvYmFsWCwgeTogZXZ0Lmdsb2JhbFkgfTtcbiAgICAgICAgY29uc3QgZG9jQ29udGFpbmVyID0gdGhpcy5kb2N1bWVudFBhaW50LmdldERvY0NvbnRhaW5lcigpO1xuICAgICAgICAvL2xldCB7IHgsIHkgfSA9IGRvY0NvbnRhaW5lci5yZWN0O1xuICAgICAgICAvL3kgLT0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoOyBpIDwgZG9jQ29udGFpbmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBkb2NDb250YWluZXIuZ2V0Q2hpbGQoaSkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBkb2NQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlcik7XG4gICAgICAgICAgICBpZiAoQ29tbW9uVXRpbC5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICB4OiBkb2NQb3MueCxcbiAgICAgICAgICAgICAgICB5OiBkb2NQb3MueSAtIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSxcbiAgICAgICAgICAgICAgICB3aWR0aDogZG9jUmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBkb2NSZW5kZXIucmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH0sIGhpdFBvcykpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpID0gaSA9PT0gZG9jQ29udGFpbmVyLmxlbmd0aCA/IGkgLSAxIDogaTtcbiAgICAgICAgY29uc3QgaGl0RG9jID0gZG9jQ29udGFpbmVyLmdldENoaWxkKGkpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBkb2NQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGhpdERvYyk7XG4gICAgICAgIC8vY29uc3QgZG9jUG9zID0geyB4OiBoaXREb2MucmVjdC54ICsgeCwgeTogaGl0RG9jLnJlY3QueSArIHkgfTtcbiAgICAgICAgY29uc3QgaGl0UGFnZVBvczogUG9zaXRpb24gPSB7IHg6IGhpdFBvcy54IC0gZG9jUG9zLngsIHk6IGhpdFBvcy55IC0gZG9jUG9zLnkgKyB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9jUmVuZGVyOiBoaXREb2MsXG4gICAgICAgICAgICBwYWludEFic29sdXRlUmVjdDogZG9jUG9zLFxuICAgICAgICAgICAgZG9jSW5kZXg6IGksXG4gICAgICAgICAgICBoaXRQYWdlUG9zXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6blj5Hkuovku7ZcbiAgICAgKiBAcGFyYW0gdHlwZVxuICAgICAqIEBwYXJhbSBzb3VyY2VFbGVtZW50XG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICogQHBhcmFtIGV2ZW50U3RhZ2VcbiAgICAgKiBAcGFyYW0gZG9jQ3R4XG4gICAgICovXG4gICAgc3RhdGljIGludm9rZUV2ZW50KHR5cGU6IEV2ZW50VHlwZXMsIHNvdXJjZUVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50OiBFbGVtZW50RXZlbnQsIGV2ZW50U3RhZ2U6IEV2ZW50U3RhZ2UsIGRvY0N0eDogRWRpdG9yQ29udGV4dCk6IEVsZW1lbnRFdmVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50RWxlbWVudHMoc291cmNlRWxlbWVudCk7XG4gICAgICAgIC8v5YWI5omn6KGM5o2V6I636Zi25q61LOWcqOaJp+ihjOWGkuazoVxuICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID4gLXBhcmVudHMubGVuZ3RoOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChpID4gMSAmJiAoZXZlbnRTdGFnZSAhPT0gJ0NhcHR1cmUnICYmIGV2ZW50U3RhZ2UgIT09ICdBbGwnKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgPD0gMCAmJiAoZXZlbnRTdGFnZSAhPT0gJ0J1YmJsaW5nJyAmJiBldmVudFN0YWdlICE9PSAnQWxsJykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50c1tNYXRoLmFicyhpKV07XG4gICAgICAgICAgICBldmVudC5jdXJyZW50RWxlbWVudCA9IGNoaWxkO1xuICAgICAgICAgICAgZXZlbnQuc291cmNlID0gc291cmNlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJDYXB0dXJlID0gaSA+IDA7XG4gICAgICAgICAgICBjaGlsZC5pbnZva2VFdmVudCh0eXBlLCBldmVudCwgdXNlckNhcHR1cmUpO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9jQ3R4Lmludm9rZVR5cGVIYW5kbGVyKGNoaWxkLCB0eXBlLCBldmVudCwgdXNlckNhcHR1cmUpO1xuICAgICAgICAgICAgLy8gaWYgKGV2ZW50LmlzQ2FuY2VsKSB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Y+R5biD5b2T5YmN55qE54K55Ye75L+h5oGvXG4gICAgICovXG4gICAgcHJpdmF0ZSBwdWJIaXRJbmZvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpdEluZm9DaGFuZ2VkLm5leHQoe1xuICAgICAgICAgICAgc3RhcnRIaXRJbmZvOiB0aGlzLnN0YXJ0SGl0SW5mbyBhcyBIaXRFdmVudEluZm8sXG4gICAgICAgICAgICBlbmRIaXRJbmZvOiB0aGlzLmVuZEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlum8oOagh+aJgOWcqOeahOa4suafk+WFg+e0oOWvueixoVxuICAgICAqIEBwYXJhbSByZW5kZXJPYmplY3RcbiAgICAgKiBAcGFyYW0gcGFyZW50XG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1vdXNlb3ZlclJlbmRlcihyZW5kZXJPYmplY3Q6IFJlbmRlck9iamVjdCwgcGFyZW50OiBQb3NpdGlvbiwgcG9zaXRpb246IFBvc2l0aW9uKTogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHtcbiAgICAgICAgICAgIHg6IHBhcmVudC54ICsgcmVuZGVyT2JqZWN0LnJlY3QueCxcbiAgICAgICAgICAgIHk6IHBhcmVudC55ICsgcmVuZGVyT2JqZWN0LnJlY3QueSxcbiAgICAgICAgICAgIHdpZHRoOiByZW5kZXJPYmplY3QucmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGFic29sdXRlUmVuZGVyUmVjdDogcmVuZGVyT2JqZWN0UmVjdFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoQ29tbW9uVXRpbC5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJlbmRlck9iamVjdFJlY3QsIHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8v5b2T5YmN5Li66KGo5Y2V5YWD5qC877yM5L2G5piv6KGo5qC85LiN5a2Y5Zyo5LiK5LiLcGFkZGluZ++8jFxuICAgICAgICAgICAgICAgIC8v5YiZ6KGo5qC85LiK6L655qGG5ZKM5LiL6L655qGG5Y+v6IO95Lya5ZKM5YaF5a65KHBhcmFncmFwaCnph43lj6DvvIxcbiAgICAgICAgICAgICAgICAvL+W9k+WJjeWFieagh+WcqHRhYmxlLXJlbmRlcuS4iuaXtu+8jOWni+e7iOaXoOazleiOt+WPluWIsHRhYmxlLWNlbGwtcmVuZGVyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIFRhYmxlQ2VsbFJlbmRlck9iamVjdCAmJiAoQ29tbW9uVXRpbC5BcHByb3htYXRlVmFsdWVJblJhbmdlKHJlbmRlck9iamVjdFJlY3QueSwgMSwgcG9zaXRpb24ueSkgfHwgQ29tbW9uVXRpbC5BcHByb3htYXRlVmFsdWVJblJhbmdlKHJlbmRlck9iamVjdFJlY3QueSArIHJlbmRlck9iamVjdFJlY3QuaGVpZ2h0LCAxLCBwb3NpdGlvbi55KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiByZW5kZXJPYmplY3RSZWN0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSZW5kZXIgPSByZW5kZXJPYmplY3QuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0TW91c2VvdmVyUmVuZGVyKGNoaWxkUmVuZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiByZW5kZXJPYmplY3RSZWN0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiByZW5kZXJPYmplY3RSZWN0LnlcbiAgICAgICAgICAgICAgICAgICAgfSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe8qeaUvuWFg+e0oFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzaXplUmVuZGVyKGU6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICgoPGFueT50aGlzLmVkZ2VSZW5kZXJJbmZvPy5yZW5kZXJFbGVtZW50KVsncmVzaXplYWJsZSddKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUVsZW1lbnQoZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5lZGdlUmVuZGVySW5mbz8ucmVuZGVyRWxlbWVudCBpbnN0YW5jZW9mIFRhYmxlQ2VsbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplVGFibGVDZWxsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnvKnmlL7ooajmoLxcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2l6ZVRhYmxlQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkZ2VSZW5kZXJJbmZvIHx8ICF0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gdGhpcy5nZXRSZXNpemVUYWJsZUNlbGwoKTtcbiAgICAgICAgY29uc3QgYm9yZGVyID0gdGhpcy5lZGdlUmVuZGVySW5mby5ib3JkZXI7XG4gICAgICAgIGNvbnN0IG1vdXNlZG93blBvcyA9IHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zO1xuICAgICAgICBjb25zdCBtb3ZlRGlzdGFuY2VYID0gdGhpcy5jdXJyZW50UG9zLnggLSBtb3VzZWRvd25Qb3MueDtcbiAgICAgICAgY29uc3QgbW92ZURpc3RhbmNlWSA9IHRoaXMuY3VycmVudFBvcy55IC0gbW91c2Vkb3duUG9zLnk7XG4gICAgICAgIGNvbnN0IHJvdyA9IGNlbGxFbGVtZW50LnBhcmVudDtcbiAgICAgICAgY29uc3QgdGFibGUgPSByb3c/LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGlmICghcm93IHx8ICF0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3cgfCB0YWJsZSBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuZ2V0Q2hpbGRJbmRleChjZWxsRWxlbWVudCk7XG4gICAgICAgIGxldCBjZWxsV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgoY2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgY29sc0NvdW50ID0gdGFibGUuZ2V0Q29sc0NvdW50KCk7XG4gICAgICAgIGlmIChbJ2xlZnQnLCAncmlnaHQnXS5pbmNsdWRlcyhib3JkZXIpKSB7XG4gICAgICAgICAgICBpZiAoY2VsbEluZGV4ID09PSAwICYmIGJvcmRlciA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc2l6ZUNvbFdpZHRoID0gMDtcbiAgICAgICAgICAgIGxldCByZXNpemVDb2xJbmRleCA9IDA7XG4gICAgICAgICAgICBpZiAoYm9yZGVyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICByZXNpemVDb2xJbmRleCA9IGNlbGxJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgcmVzaXplQ29sV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgocmVzaXplQ29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbFdpZHRoICs9IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICAgICAgY2VsbFdpZHRoIC09IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJvcmRlciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbEluZGV4ID0gY2VsbEluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAvL+enu+WKqOacgOWQjuS4gOWIl+aXtu+8jOWPs+S+p+ayoeacieWIl+S6hu+8jHJlc2l6ZUNvbFdpZHRo55qE5YC85Li6LTFcbiAgICAgICAgICAgICAgICByZXNpemVDb2xXaWR0aCA9IHRhYmxlLmdldENlbGxXaWR0aChyZXNpemVDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc2l6ZUNvbFdpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNpemVDb2xXaWR0aCAtPSBtb3ZlRGlzdGFuY2VYO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjZWxsV2lkdGggKz0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgocmVzaXplQ29sV2lkdGggIT0gLTEgJiYgcmVzaXplQ29sV2lkdGggPCAyMCkgfHwgY2VsbFdpZHRoIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXRDZWxsV2lkdGgocmVzaXplQ29sSW5kZXgsIHJlc2l6ZUNvbFdpZHRoKTtcbiAgICAgICAgICAgIHRhYmxlLnNldENlbGxXaWR0aChjZWxsSW5kZXgsIGNlbGxXaWR0aCk7XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcyA9IHRoaXMuY3VycmVudFBvcztcbiAgICAgICAgICAgIHRhYmxlLnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoWydib3R0b20nLCAndG9wJ10uaW5jbHVkZXMoYm9yZGVyKSkge1xuICAgICAgICAgICAgbGV0IHJvd0luZGV4ID0gcm93LmdldEluZGV4KCk7XG4gICAgICAgICAgICBpZiAocm93SW5kZXggPT09IDAgJiYgYm9yZGVyID09PSAndG9wJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5oyJ54Wn56e75Yqo5bqV6L656K6h566XXG4gICAgICAgICAgICByb3dJbmRleCA9IGJvcmRlciA9PT0gJ3RvcCcgPyByb3dJbmRleCAtIDEgOiByb3dJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVJvd0VsZSA9IHRhYmxlLmdldENoaWxkKHJvd0luZGV4KSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgcmVzaXplUm93UmVuZGVyID0gcmVzaXplUm93RWxlLm1lYXN1cmVSZW5kZXIgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBpZiAocmVzaXplUm93UmVuZGVyLmVsZW1lbnQgIT09IHJlc2l6ZVJvd0VsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+e8qeaUvuihqOagvOihjOmrmOW6puWHuueOsOmUmeivryznu5jliLblhYPntKDlkozooajmoLzlr7nosaHkuI3lr7nlupQnKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IHJlc2l6ZVJvd0VsZS5wcm9wcy5taW5IZWlnaHQgPz8gMDtcbiAgICAgICAgICAgIC8v5b2T5YmN6KGM5LiN5a2Y5Zyo5pyA5bCP6auY5bqm6K6+572u77yM5bm25LiU57yp5pS+6auY5bqm5Li66LSf5pWwXG4gICAgICAgICAgICBpZiAobWluSGVpZ2h0IDw9IDAgJiYgbW92ZURpc3RhbmNlWSA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+W9k+WJjeWGheWuuemrmOW6plxuICAgICAgICAgICAgbGV0IHJlc2l6ZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQgPSBFbGVtZW50VXRpbC5nZXRUYWJsZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQocmVzaXplUm93UmVuZGVyKTtcbiAgICAgICAgICAgIGxldCByZXNpemVSb3dNaW5IZWlnaHQgPSAwO1xuICAgICAgICAgICAgaWYgKG1pbkhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzaXplUm93TWluSGVpZ2h0ID0gcmVzaXplUm93UmVuZGVyQ29udGVudEhlaWdodCArIG1vdmVEaXN0YW5jZVk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc2l6ZVJvd01pbkhlaWdodCA9IG1pbkhlaWdodCArIG1vdmVEaXN0YW5jZVk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+e8qeaUvueahOmrmOW6puWwj+S6juWGheWuuemrmOW6pu+8jOWImemHjee9ruihjOacgOWwj+mrmOW6plxuICAgICAgICAgICAgaWYgKHJlc2l6ZVJvd01pbkhlaWdodCA8PSByZXNpemVSb3dSZW5kZXJDb250ZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy9yZXNpemVSb3dFbGUudHJQcm9wcy5taW5IZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgIHJlc2l6ZVJvd01pbkhlaWdodCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNpemVSb3dFbGUucHJvcHMubWluSGVpZ2h0ID0gcmVzaXplUm93TWluSGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3MgPSB0aGlzLmN1cnJlbnRQb3M7XG4gICAgICAgICAgICB0YWJsZS5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXNpemVUYWJsZUNlbGwoKTogVGFibGVDZWxsRWxlbWVudCB7XG4gICAgICAgIGlmICghdGhpcy5lZGdlUmVuZGVySW5mbykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlZGdlUmVuZGVySW5mbyBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxsRWxlbWVudCA9IHRoaXMuZWRnZVJlbmRlckluZm8ucmVuZGVyRWxlbWVudCBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICBjb25zdCByb3cgPSBjZWxsRWxlbWVudC5wYXJlbnQ7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JvdyBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJsZSA9IHJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuZ2V0Q2hpbGRJbmRleChjZWxsRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IHRoaXMuZWRnZVJlbmRlckluZm8uYm9yZGVyO1xuICAgICAgICBpZiAoY2VsbEVsZW1lbnQucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcgfHwgYm9yZGVyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2VsbEluZGV4ICsgMTsgaSA8IHRhYmxlLmdldENvbHNDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlICE9PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3cuZ2V0Q2hpbGQoaSAtIDEpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDosIPmlbTlhYPntKDlpKflsI9cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2l6ZUVsZW1lbnQoZTogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkZ2VSZW5kZXJJbmZvIHx8ICF0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGltZ0VsZW1lbnQgPSA8dW5rbm93bj50aGlzLmVkZ2VSZW5kZXJJbmZvLnJlbmRlckVsZW1lbnQgYXMgeyBwcm9wczogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9IH07XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IHRoaXMuZWRnZVJlbmRlckluZm8uYm9yZGVyO1xuICAgICAgICBjb25zdCBtb3VzZWRvd25Qb3MgPSB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcztcbiAgICAgICAgbGV0IG1vdmVEaXN0YW5jZVggPSB0aGlzLmN1cnJlbnRQb3MueCAtIG1vdXNlZG93blBvcy54O1xuICAgICAgICBsZXQgbW92ZURpc3RhbmNlWSA9IHRoaXMuY3VycmVudFBvcy55IC0gbW91c2Vkb3duUG9zLnk7XG4gICAgICAgIGlmIChbJ2xlZnQtdG9wJywgJ2xlZnQtbWlkZGxlJywgJ2xlZnQtYm90dG9tJywgJ3JpZ2h0LXRvcCcsICdyaWdodC1taWRkbGUnLCAncmlnaHQtYm90dG9tJywgJ3RvcC1taWRkbGUnLCAnYm90dG9tLW1pZGRsZSddLmluZGV4T2YoYm9yZGVyKSA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoWydsZWZ0LW1pZGRsZScsICdyaWdodC1taWRkbGUnXS5pbmRleE9mKGJvcmRlcikgPj0gMCkge1xuICAgICAgICAgICAgICAgIG1vdmVEaXN0YW5jZVkgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFsndG9wLW1pZGRsZScsICdib3R0b20tbWlkZGxlJ10uaW5kZXhPZihib3JkZXIpID49IDApIHtcbiAgICAgICAgICAgICAgICBtb3ZlRGlzdGFuY2VYID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vc2hpZnTplK7mjInmr5TkvovnvKnmlL5cbiAgICAgICAgICAgIGlmIChlLnNoaWZ0ICYmIFsnbGVmdC10b3AnLCAncmlnaHQtdG9wJywgJ2xlZnQtYm90dG9tJywgJ3JpZ2h0LWJvdHRvbSddLmluZGV4T2YoYm9yZGVyKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobW92ZURpc3RhbmNlWCkgPiBNYXRoLmFicyhtb3ZlRGlzdGFuY2VZKSkge1xuICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IG1vdmVEaXN0YW5jZVggLyBpbWdFbGVtZW50LnByb3BzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBtb3ZlRGlzdGFuY2VZID0gTWF0aC5mbG9vcihzY2FsZSAqIGltZ0VsZW1lbnQucHJvcHMuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IG1vdmVEaXN0YW5jZVkgLyBpbWdFbGVtZW50LnByb3BzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgbW92ZURpc3RhbmNlWCA9IE1hdGguZmxvb3Ioc2NhbGUgKiBpbWdFbGVtZW50LnByb3BzLndpZHRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbWdFbGVtZW50W1wicHJvcHNcIl0ud2lkdGggKz0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS5oZWlnaHQgKz0gbW92ZURpc3RhbmNlWTtcbiAgICAgICAgICAgIGlmIChpbWdFbGVtZW50W1wicHJvcHNcIl0ud2lkdGggPCAxMCkge1xuICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS53aWR0aCA9IDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGltZ0VsZW1lbnRbXCJwcm9wc1wiXS5oZWlnaHQgPCAxMCkge1xuICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRbXCJwcm9wc1wiXS5oZWlnaHQgPSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zID0gdGhpcy5jdXJyZW50UG9zO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDpgInkuK3lvZPliY3lhajpg6ggY3RybCtBXG4gICAgICovXG4gICAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCB9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgcmVnaW9uVGFyZ2V0ID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvblRhcmdldChzdGFydENvbnRyb2wpO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCB8fCAhcmVnaW9uVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RMZWFmID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChyZWdpb25UYXJnZXQudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgbGFzdExlYWYgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQocmVnaW9uVGFyZ2V0LnRhcmdldCk7XG4gICAgICAgIGlmICghZmlyc3RMZWFmIHx8ICFsYXN0TGVhZikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXJzdExlYWYgb3IgbGFzdExlYWYgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25SYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChmaXJzdExlYWYsIDApO1xuICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQobGFzdExlYWYsIC0xKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShuZXdTZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgIC8vY29uc3QgZG9jPVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog56e75Yqo5YWJ5qCH5Yiw6KGM6aaWXG4gICAgICovXG4gICAgbW92ZUN1cnNvclRvTGluZVN0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb0hvbWVPckVuZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+WKqOWFieagh+WIsOihjOWwvlxuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb0xpbmVFbmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvSG9tZU9yRW5kKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIbnp7vliqjlhYnmoIfliLDooYzlsL7miJbooYzpppZcbiAgICAgKiBAcGFyYW0gaG9tZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBtb3ZlQ3Vyc29yVG9Ib21lT3JFbmQoaG9tZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICF0aGlzLmRvY0N0eC5jdXJzb3JSZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZG9jQ3R4LmN1cnNvclJlY3Q7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWCA9IHJlY3QueDtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWSA9IHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgZG9jRXZlbnQuYnV0dG9ucyA9IDE7XG4gICAgICAgIGNvbnN0IGhpdEluZm8gPSB0aGlzLmdldEhpdEluZm8oZG9jRXZlbnQpO1xuICAgICAgICBpZiAoIWhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGhpdEluZm8ucmVuZGVyLCBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCkgYXMgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3RcbiAgICAgICAgY29uc3QgbGluZVBvc1JlY3QgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdChwYXJhUmVuZGVyKVxuICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0gbGluZVBvc1JlY3QueCArIChob21lID8gMCA6IGxpbmVQb3NSZWN0LndpZHRoKTtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWSA9IGxpbmVQb3NSZWN0LnkgKyBsaW5lUG9zUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICB0aGlzLm1vdXNlZG93blBvcyA9IHsgeDogZG9jRXZlbnQuZ2xvYmFsWCwgeTogZG9jRXZlbnQuZ2xvYmFsWSB9O1xuICAgICAgICB0aGlzLm1vdXNlZG93bkhhbmRsZShkb2NFdmVudCk7XG4gICAgICAgIHRoaXMuaXNtb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlkJHlt6bnp7vliqjlhYnmoIdcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9MZWZ0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkUmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgY29uc3QgcHJldkVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChzdGFydENvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChwcmV2RWxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UmVnaW9uID0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudFJlZ2lvbihwcmV2RWxlKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3UmVnaW9uICE9PSBvbGRSZWdpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgLSAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkJHlj7Pnp7vliqjlhYnmoIdcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9SaWdodCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAodGhpcy5pc0xlYWZFbGVFbmRPZmZzZXQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFJlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24oc3RhcnRDb250cm9sKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sLCBmYWxzZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAobmV4dEVsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24obmV4dEVsZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9sZFJlZ2lvbiAhPT0gbmV3UmVnaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKG5leHRFbGUsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgKyAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkJHkuIrnp7vliqjlhYnmoIdcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9VcE9yRG93bih1cDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0YXRlLmN1cnNvclBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB7IHgsIHkgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUuY3Vyc29yUG9zO1xuICAgICAgICB5IC09IHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkb2NFdmVudCA9IG5ldyBNb3VzZUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0geDtcbiAgICAgICAgICAgIGRvY0V2ZW50Lmdsb2JhbFkgPSB5IC0gKHVwID8gaSAqIDIgOiBpICogLTIpO1xuICAgICAgICAgICAgZG9jRXZlbnQuYnV0dG9ucyA9IDE7XG4gICAgICAgICAgICBjb25zdCBoaXRJbmZvID0gdGhpcy5nZXRIaXRJbmZvKGRvY0V2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGhpdEluZm8/LmVsZW1lbnQgPT09IHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sICYmIGhpdEluZm8ub2Zmc2V0ID09PSB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgaWYgKCFoaXRJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlZG93blBvcyA9IHsgeDogeCwgeTogeSB9O1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2Vkb3duSGFuZGxlKGRvY0V2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzbW91c2Vkb3duID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lgY/np7vph4/mmK/lkKblpITkuo7lvZPliY3lhYPntKDnmoTmnKvlsL5cbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHBhcmFtIG9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0xlYWZFbGVFbmRPZmZzZXQoZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGUudGV4dE1lYXN1cmVzLmxlbmd0aCA9PT0gb2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgPT09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bngrnlh7vnmoTmlofmoaPljLrln59cbiAgICAgKiBAcGFyYW0gZG9jUmVuZGVyXG4gICAgICogQHBhcmFtIHBvc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0SGl0UmVnaW9uKGRvY0V2ZW50OiBNb3VzZUVsZW1lbnRFdmVudCk6IEhpdFJlZ2lvbiB8IG51bGwge1xuICAgICAgICBjb25zdCBoaXREb2NJbmZvID0gdGhpcy5nZXRIaXREb2NQYWdlKGRvY0V2ZW50KTtcbiAgICAgICAgaWYgKCFoaXREb2NJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRvY1JlbmRlciwgaGl0UGFnZVBvcyB9ID0gaGl0RG9jSW5mbztcbiAgICAgICAgY29uc3QgaGVhZGVyUmVuZGVyID0gRWxlbWVudFV0aWwuZmluZENoaWxkUmVuZGVyKGRvY1JlbmRlciwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGZvb3RlclJlbmRlciA9IEVsZW1lbnRVdGlsLmZpbmRDaGlsZFJlbmRlcihkb2NSZW5kZXIsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBpZiAoIWhlYWRlclJlbmRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm9vdGVyUmVuZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zvb3RlciBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVyTGluZSA9IGhlYWRlclJlbmRlci5yZWN0LnkgKyBoZWFkZXJSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGZvb3RlckxpbmUgPSBmb290ZXJSZW5kZXIucmVjdC55O1xuICAgICAgICBpZiAoaGl0UGFnZVBvcy55IDw9IGhlYWRlckxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnaGVhZGVyJztcbiAgICAgICAgfSBlbHNlIGlmIChoaXRQYWdlUG9zLnkgPD0gZm9vdGVyTGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICdib2R5JztcbiAgICAgICAgfSBlbHNlIGlmIChoaXRQYWdlUG9zLnkgPiBmb290ZXJMaW5lICYmIGhpdFBhZ2VQb3MueSA8IGRvY1JlbmRlci5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuICdmb290ZXInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG4iLCJpbXBvcnQgeyBMZWFmRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBLZXlib3JhZEVsZW1lbnRFdmVudCB9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudEV2ZW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtZXZlbnRcIjtcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tIFwiLi9ldmVudC1zdWJqZWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBvc2l0aW9uU3RhcnRJbmZvIHtcbiAgICBlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXREYXRhIHtcbiAgICBjb21wb3NpdGlvbj86IGJvb2xlYW47XG4gICAgLy/lvIDlkK/ovpPlhaXms5XlkI7nmoTlhYnmoIfnmoTotbfngrnkvY3nva5cbiAgICBjb21wb3NpdGlvblN0YXJ0SW5mbz86IElDb21wb3NpdGlvblN0YXJ0SW5mbztcbiAgICAvL+i+k+WFpeazleS5i+WJjei+k+WFpeeahOWGheWuuVxuICAgIHByZXZJbnB1dERhdGE/OiBzdHJpbmc7XG4gICAgZGF0YTogc3RyaW5nXG59XG5cbi8qKlxuICog6L6T5YWl5aSE55CGXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudElucHV0IHtcbiAgICAvKipcbiAgICAgKiDlhYnmoIfpl6rng4HnirbmgIFcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jdXJzb3JCbGlua3NTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY3Vyc29yQmxpbmtzSW50ZXJ2YWxJRDogYW55O1xuICAgIC8v5piv5ZCm5piv5byA5ZCv6L6T5YWl5rOV5LqGXG4gICAgcHJpdmF0ZSBjb21wb3NpdGlvblN0YXJ0ID0gZmFsc2U7XG4gICAgLy/lvIDlkK/ovpPlhaXms5XlkI7ovpPlhaXnmoTmloflrZdcbiAgICBwcml2YXRlIGNvbXBvc2l0aW9uUHJldkRhdGEhOiBzdHJpbmc7XG4gICAgLy/lvIDlkK/ovpPlhaXms5XlkI7nmoTnmoTlhYPntKBcbiAgICBwcml2YXRlIGNvbXBvc2l0aW9uU3RhcnRJbmZvITogSUNvbXBvc2l0aW9uU3RhcnRJbmZvIHwgbnVsbDtcbiAgICAvL+i+k+WFpeWGheWuueS6i+S7tlxuICAgIG9uSW5wdXRFdmVudDogU3ViamVjdDxJbnB1dERhdGE+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2JhY2tzcGFjZSDplK7nm5jkuovku7ZcbiAgICBvbkJhY2tzcGFjZUV2ZW50OiBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2RlbGV0ZSDplK7nm5jkuovku7ZcbiAgICBvbkRlbGV0ZUV2ZW50OiBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2VudGVyIOmUruebmOS6i+S7tlxuICAgIG9uRW50ZXJFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/lt6bplK5cbiAgICBvbkxlZnRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/lj7PplK5cbiAgICBvblJpZ2h0RXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5aSN5Yi2XG4gICAgb25Db3B5RXZlbnQ6IFN1YmplY3Q8Q2xpcGJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+WJquWIh1xuICAgIG9uQ3V0RXZlbnQ6IFN1YmplY3Q8Q2xpcGJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+eymOi0tFxuICAgIG9uUGFzdGVFdmVudDogU3ViamVjdDxDbGlwYm9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5o+S5YWl5o2i6KGM56ymXG4gICAgb25JbnNlcnRCcjogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy9jdHJsK0Eg5YWo6YCJ5LqL5Lu2XG4gICAgb25TZWxlY3RBbGxFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy9ob21lIOS6i+S7tlxuICAgIG9uSG9tZUV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2VuZCDkuovku7ZcbiAgICBvbkVuZEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBvblVwRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uRG93bkV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRJbnB1dDogSFRNTElucHV0RWxlbWVudCwgcHJpdmF0ZSBlZGl0Q3Vyc29yOiBIVE1MU3BhbkVsZW1lbnQsIHByaXZhdGUgY3Vyc29yV3JhcHBlcjogSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7XG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVkaXRJbnB1dCwgJ2JsdXInKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6L6T5YWl5qGGIGJsdXInKTtcbiAgICAgICAgfSlcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWRpdElucHV0LCAnZm9jdXMnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6L6T5YWl5qGGIGZvY3VzJyk7XG4gICAgICAgIH0pXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVkaXRJbnB1dCwgJ2lucHV0Jykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBvc2l0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuZWRpdElucHV0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6L6T5YWl5paH5a2X5LqGJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tcG9zaXRpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5vbklucHV0RXZlbnQubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuZWRpdElucHV0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcmV2SW5wdXREYXRhOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydEluZm86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogc3RhcnRPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnaW5wdXQnKTtcblxuICAgICAgICB9KVxuICAgICAgICBmcm9tRXZlbnQ8Q29tcG9zaXRpb25FdmVudD4odGhpcy5lZGl0SW5wdXQsICdjb21wb3NpdGlvbnN0YXJ0Jykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uUHJldkRhdGEgPSAnJztcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXms5XlvIDlp4snKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydEluZm8gPSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LFxuICAgICAgICAgICAgICAgIG9mZnNldDogc3RhcnRPZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q29tcG9zaXRpb25FdmVudD4odGhpcy5lZGl0SW5wdXQsICdjb21wb3NpdGlvbnVwZGF0ZScpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZ0LmRhdGEgPT09IHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeS6hu+8micgKyBldnQuZGF0YSk7XG4gICAgICAgICAgICAvLyB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgIC8vICAgICBkYXRhOiBldnQuZGF0YSxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzogdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm8sXG4gICAgICAgICAgICAvLyAgICAgY29tcG9zaXRpb246IHRydWUsXG4gICAgICAgICAgICAvLyAgICAgcHJldklucHV0RGF0YTogdGhpcy5jb21wb3NpdGlvblByZXZEYXRhXG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIC8vIHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSA9IGV2dC5kYXRhO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENvbXBvc2l0aW9uRXZlbnQ+KHRoaXMuZWRpdElucHV0LCAnY29tcG9zaXRpb25lbmQnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnY29tcG9zaXRpb25lbmQnKVxuXG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmVkaXRJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgICAgICBwcmV2SW5wdXREYXRhOiAnJyxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzogdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm9cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSA9ICcnO1xuXG4gICAgICAgICAgICAvLyB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgIC8vICAgICBkYXRhOiBldnQuZGF0YSxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0OiB0aGlzLmNvbXBvc2l0aW9uU3RhcnRPZmZzZXQsXG4gICAgICAgICAgICAvLyAgICAgY29tcG9zaXRpb25SZWNvcmRDb250ZW50OiB0aGlzLmNvbXBvc2l0aW9uUmVjb3JkQ29udGVudFxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAvLyB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgIC8vICAgICBkYXRhOiBldnQuZGF0YSxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzogdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgICBwcmV2SW5wdXREYXRhOiAnJ1xuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvID0gbnVsbDtcbiAgICAgICAgICAgIC8vdGhpcy5jb21wb3NpdGlvblJlY29yZENvbnRlbnQgPSAnJztcbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5RXZlbnQgPSBuZXcgS2V5Ym9yYWRFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAga2V5RXZlbnQuc291cmNlRXZlbnQgPSBldnQ7XG4gICAgICAgICAgICBpZiAoRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudEtleURvd24nLCB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQsIGtleUV2ZW50LCAnQ2FwdHVyZScsIHRoaXMuZG9jQ3R4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldnQua2V5Q29kZSA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2VFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAxMyAmJiAhZXZ0LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVudGVyRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTGVmdEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDM5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJpZ2h0RXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVXBFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSA0MCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25Eb3duRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDkpIHtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDEzICYmIGV2dC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMub25JbnNlcnRCci5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSA0Nikge1xuICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5jdHJsS2V5ICYmIGV2dC5rZXlDb2RlID09PSA2NSkge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3RBbGxFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzNikge1xuICAgICAgICAgICAgICAgIHRoaXMub25Ib21lRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDM1KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVuZEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4odGhpcy5lZGl0SW5wdXQsIFwiY29weVwiKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db3B5RXZlbnQubmV4dChldnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgXCJwYXN0ZVwiKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMub25QYXN0ZUV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4odGhpcy5lZGl0SW5wdXQsIFwiY3V0XCIpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkN1dEV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmN1cnNvckJsaW5rc0ludGVydmFsSUQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWFieagh+mXqueDgVxuICAgICAqL1xuICAgIHNldEN1cnNvckJsaW5rcygpIHtcbiAgICAgICAgdGhpcy5lZGl0Q3Vyc29yLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLl9jdXJzb3JCbGlua3NTdGF0ZSA/ICd0cmFuc3BhcmVudCcgOiAnYmxhY2snO1xuICAgICAgICB0aGlzLl9jdXJzb3JCbGlua3NTdGF0ZSA9ICF0aGlzLl9jdXJzb3JCbGlua3NTdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lhYnmoIfkvY3nva5cbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICAgKi9cbiAgICBzZXRDdXJzb3JQb3NpdGlvbihwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IH0pIHtcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLmxlZnQgPSBwb3NpdGlvbi54ICsgJ3B4JztcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLnRvcCA9IHBvc2l0aW9uLnkgKyAncHgnO1xuICAgICAgICB0aGlzLmN1cnNvcldyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gcG9zaXRpb24uaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgdGhpcy5zZXRDdXJzb3JWaXNpYmlsaXR5KHRydWUpO1xuICAgICAgICAvL3RoaXMuc2V0Q3Vyc29ySW5wdXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7omZrmi5/lhYnmoIfnmoTlj6/op4HmgKdcbiAgICAgKiBAcGFyYW0gdmlzaWJpbGl0eVxuICAgICAqL1xuICAgIHNldEN1cnNvclZpc2liaWxpdHkodmlzaWJpbGl0eTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmN1cnNvcldyYXBwZXIuc3R5bGUuZGlzcGxheSA9IHZpc2liaWxpdHkgPyAnYmxvY2snIDogJ25vbmUnO1xuICAgICAgICBpZiAodmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dEZvY3VzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6L6T5YWl54q25oCBXG4gICAgICogQHBhcmFtIGZvY3VzIFxuICAgICAqL1xuICAgIHNldElucHV0Rm9jdXMoZm9jdXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC5yZWFkT25seSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQuZm9jdXMoKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGlzLmVkaXRJbnB1dC5ibHVyKCk7XG4gICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC5yZWFkT25seSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5jdXJzb3JQb3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufSIsImltcG9ydCB7RG9jdW1lbnRJbnB1dCwgSUNvbXBvc2l0aW9uU3RhcnRJbmZvLCBJbnB1dERhdGF9IGZyb20gXCIuL2RvY3VtZW50LWlucHV0LWN1cnNvclwiO1xuaW1wb3J0IHtTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGV9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBCbG9ja0NvbnRlbnRFbGVtZW50LFxuICAgIEJyYW5jaEVsZW1lbnQsXG4gICAgRG9jTW9kZSxcbiAgICBFbGVtZW50LFxuICAgIElubGluZUdyb3VwRWxlbWVudCxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7VGV4dEdyb3VwRWxlbWVudH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHtQU3ltYm9sRWxlbWVudH0gZnJvbSBcIi4vaW1wbC9zeW1ib2wvcC1zeW1ib2wtaW1wbFwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhFbGVtZW50fSBmcm9tIFwiLi9pbXBsL3BhcmFncmFwaC9wLWltcGxcIjtcbmltcG9ydCB7UmFuZ2VVdGlsfSBmcm9tIFwiLi9yYW5nZS11dGlsXCI7XG5pbXBvcnQge1RhYmxlRWxlbWVudH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50RXZlbnR9IGZyb20gXCIuL2RvY3VtZW50LWV2ZW50XCI7XG5pbXBvcnQge0tleWJvcmFkRWxlbWVudEV2ZW50fSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlQmFzZVByb3BzLCBQYXJhZ3JhcGhQcm9wcywgVGV4dFByb3BzfSBmcm9tIFwiLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuL2VsZW1lbnQtc2VyaWFsaXplXCI7XG5pbXBvcnQge0VsZW1lbnRSZWFkZXJ9IGZyb20gXCIuL2VsZW1lbnQtcmVhZGVyXCI7XG5pbXBvcnQge0JyZWFrRWxlbWVudH0gZnJvbSBcIi4vaW1wbC9zeW1ib2wvYnItc3ltYm9sLWltcGxcIjtcbmltcG9ydCB7RGF0YURlY29yYXRlRWxlbWVudH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1kZWNvcmF0ZS1pbXBsXCI7XG5pbXBvcnQge0VkaXRvckNvbnRleHR9IGZyb20gXCIuL2RvY3VtZW50LWNvbnRleHRcIjtcbmltcG9ydCB7XG4gICAgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCxcbiAgICBJbmxpbmVHcm91cElucHV0RWxlbWVudCxcbiAgICBJc0luU2lkZURhdGFFbGVtZW50LFxuICAgIElzSW5TaWRlSW5saW5lR3JvdXBJbnB1dEVsZW1lbnRcbn0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudENvbW1lbnR9IGZyb20gXCIuL2RvY3VtZW50LWNvbW1lbnRcIjtcbmltcG9ydCB7Q29tbWVudEVsZW1lbnR9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvY29tbWVudC1lbGVtZW50LWltcGxcIjtcbmltcG9ydCB7bmFub2lkfSBmcm9tIFwibmFub2lkXCI7XG5pbXBvcnQge0NvbW1Db250ZW50RWxlbWVudH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHtWYWxpZGF0ZUVsZW1lbnR9IGZyb20gXCIuL2ltcGwvY29tbWVudHMvdmFsaWRhdGUtbXNnLWltcGxcIjtcbmltcG9ydCB7Q29tbW9uVXRpbH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7VHJhY2tSdW5FbGVtZW50LCBUcmFja1J1blR5cGVFbnVtfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRCb2R5RWxlbWVudH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5cbi8qKlxuICog5paH5qGj5YaF5a655pS55Y+YXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENoYW5nZSB7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGU7XG4gICAgcHJpdmF0ZSB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZVJlYWRlcjogRWxlbWVudFJlYWRlciwgcHJpdmF0ZSBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaXZhdGUgZG9jQ29tbWVudDogRG9jdW1lbnRDb21tZW50LCBwcml2YXRlIGRvY3VtZW50SW5wdXQ6IERvY3VtZW50SW5wdXQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZSA9IHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gdGhpcy5kb2NDdHgudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbklucHV0RXZlbnQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXdJbnB1dChkYXRhKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uQmFja3NwYWNlRXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2UoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRW50ZXJFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkVudGVyKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkNvcHlFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvcHkoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uQ3V0RXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DdXQoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vblBhc3RlRXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25QYXN0ZShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25JbnNlcnRCci5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRTb2Z0QnIoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uRGVsZXRlRXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25EZWxldGVLZXlIYW5kbGVyKGV2dClcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBuZXdJbnB1dChkYXRhOiBJbnB1dERhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZCwgZW5hYmxlVHJhY2tDaGFuZ2VzfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0QnlTZWxlY3RSYW5nZShkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+WIpOaWreaYr+WQpumcgOimgeWIm+W7uuaWsOeahOeVmeeXleWMuuWfn1xuICAgICAgICBpZiAoZW5hYmxlVHJhY2tDaGFuZ2VzICYmICF0aGlzLmlzSW5Db3JyZWN0VHJhY2tSZWdpb24oc3RhcnRDb250cm9sIGFzIEVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0VHJhY2tDaGFuZ2VzKGRhdGEsIHN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5b2T5YmN6L6T5YWl6IqC54K55piv5Zyo55WZ55eV5Yy65Z+f5Lit77yM5L2G5piv5b2T5YmN5YWz6Zet5LqG5a6h6ZiF5qih5byP77yM6ZyA6KaB5ouG5YiG55WZ55eV5Yy65Z+f77yM5Yib5bu65paw6L6T5YWl6IqC54K5XG4gICAgICAgIGlmICghZW5hYmxlVHJhY2tDaGFuZ2VzICYmIHRoaXMuaXNJblRyYWNrQmxvY2soc3RhcnRDb250cm9sKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3SW5wdXQgPSB0aGlzLnNwbGl0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgY29uc3QgY29tcCA9IGRhdGEuY29tcG9zaXRpb25TdGFydEluZm8gYXMgSUNvbXBvc2l0aW9uU3RhcnRJbmZvO1xuICAgICAgICAgICAgY29tcC5lbGVtZW50ID0gbmV3SW5wdXQ7XG4gICAgICAgICAgICBjb21wLm9mZnNldCA9IDA7XG4gICAgICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKG5ld0lucHV0LCBkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKCFkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb21wb3NpdGlvblN0YXJ0SW5mbyBpcyBudWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nVGV4dEVsZSA9IHN0YXJ0T2Zmc2V0ID09PSAxID8gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHN0YXJ0Q29udHJvbCkgOiBFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sKTtcbiAgICAgICAgICAgIGlmIChzaWJsaW5nVGV4dEVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvLm9mZnNldCA9IHN0YXJ0T2Zmc2V0ID09PSAwID8gc2libGluZ1RleHRFbGUudGV4dC5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAoc2libGluZ1RleHRFbGUsIGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFRleHRQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdUZXh0R3JvdXAgPSBFbGVtZW50VXRpbC5nZXROZXdUZXh0R3JvdXAoaW5wdXRUZXh0UHJvcHMpO1xuICAgICAgICAgICAgICAgIHN0YXJ0Q29udHJvbC5wYXJlbnQuYWRkQ2hpbGQobmV3VGV4dEdyb3VwLCBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKG5ld1RleHRHcm91cCwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFRleHRHcm91cChzdGFydENvbnRyb2wsIGRhdGEpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6YCJ5Lit5Yy65Z+f5ZCO6L+b6KGM6L6T5YWlXG4gICAgICog6ZyA6KaB5aSE55CG5bCG6YCJ5Lit55qE5Yy65Z+f5Yig6Zmk5ZCO77yM6L+b6KGM6L6T5YWl55qE5oOF5Ya1XG4gICAgICovXG4gICAgb25JbnB1dEJ5U2VsZWN0UmFuZ2UoZGF0YTogSW5wdXREYXRhKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICBjb25zdCBjYiA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlZGl0YWJsZX0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgaWYgKCFlZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXAgPSBkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvIGFzIElDb21wb3NpdGlvblN0YXJ0SW5mbztcbiAgICAgICAgICAgIGNvbXAuZWxlbWVudCA9IHN0YXJ0Q29udHJvbDtcbiAgICAgICAgICAgIGNvbXAub2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0KGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy/liKnnlKjlm57osIPlrozmiJDlkI7nu63nmoTovpPlhaXlpITnkIZcbiAgICAgICAgdGhpcy5kb2NDdHguc2V0UGFpbnRlZENhbGxiYWNrKGNiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lhYPntKDmmK/lkKblnKjmraPnoa7nmoTnlZnnl5XljLrln58oaW5zLXJ1buOAgWRlbC1ydW4p77yM5oOF5Ya15YiG5Li65Lul5LiL5oOF5Ya1XG4gICAgICogMS7nlZnnl5XlnZfnsbvlnovkuLrmlrDlop7vvIzkvYbmmK/nlZnnl5XlnZfnmoTliJvlu7rogIXkuLrlhbbku5bnlKjmiLfvvIzmraTml7bpnIDopoHmi4bliIbnlZnnl5XljLrln59cbiAgICAgKiAyLueVmeeXleWdl+S4uuW9k+WJjeeUqOaIt+WIm+W7uu+8jOS9huaYr+WIm+W7uuaXtumXtOWkp+S6juacieaViOeahOaXtumXtO+8jOatpOaXtumcgOimgeaLhuWIhueVmeeXleWMuuWfn1xuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcGFyYW0gdHJhY2tUeXBlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBpc0luQ29ycmVjdFRyYWNrUmVnaW9uKHN0YXJ0Q29udHJvbDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHN0YXJ0Q29udHJvbC5wYXJlbnQ7XG4gICAgICAgIHJldHVybiBwYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnRcbiAgICAgICAgICAgICYmIHBhcmVudC5wcm9wcy51c2VySWQgPT09IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWRcbiAgICAgICAgICAgICYmIHBhcmVudC50eXBlID09PSB0cmFja1R5cGVcbiAgICAgICAgICAgICYmIENvbW1vblV0aWwuZ2V0Tm93RGlmZlNlY29uZHMocGFyZW50LnByb3BzLmRhdGUpIDw9IHRoaXMudmlld09wdGlvbnMudHJhY2tDaGFuZ2VQZXJpb2Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YWD57Sg5piv5ZCm5Zyo55WZ55eV5Yy65Z+fKGlucy1ydW7jgIFkZWwtcnVuKeS4rVxuICAgICAqIEBwYXJhbSB0YXJnZXRcbiAgICAgKiBAcGFyYW0gdHJhY2tUeXBlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBpc0luVHJhY2tCbG9jayh0YXJnZXQ6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSB8IG51bGwgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YXJnZXQucGFyZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50ICYmICh0cmFja1R5cGUgPT09IG51bGwgfHwgdGFyZ2V0LnBhcmVudC50eXBlID09PSB0cmFja1R5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeVmeeXlei+k+WFpVxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSBzdGFydE9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgbmV3SW5wdXRUcmFja0NoYW5nZXMoZGF0YTogSW5wdXREYXRhLCBzdGFydENvbnRyb2w6IExlYWZFbGVtZW50LCBzdGFydE9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQ7XG4gICAgICAgIGNvbnN0IGNvbXBJbmZvID0gZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm87XG4gICAgICAgIGlmICh0aGlzLmlzSW5Db3JyZWN0VHJhY2tSZWdpb24oc3RhcnRDb250cm9sLCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzSW5UcmFja0Jsb2NrKHN0YXJ0Q29udHJvbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0ID0gdGhpcy5jcmVhdGVOZXdUcmFja0lucHV0KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpO1xuICAgICAgICAgICAgY29tcEluZm8ub2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGNvbXBJbmZvLmVsZW1lbnQgPSBuZXdJbnB1dDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAobmV3SW5wdXQsIGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHRyYWNrRWxlbWVudCxcbiAgICAgICAgICAgICAgICBuZXdUZXh0R3JvdXBcbiAgICAgICAgICAgIH0gPSB0aGlzLmNyZWF0ZVRleHRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sLCBudWxsLCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKTtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0RWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBbdHJhY2tFbGVtZW50XSlcbiAgICAgICAgICAgIGNvbXBJbmZvLm9mZnNldCA9IDA7XG4gICAgICAgICAgICBjb21wSW5mby5lbGVtZW50ID0gbmV3VGV4dEdyb3VwO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHRHcm91cChuZXdUZXh0R3JvdXAsIGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDliJvlu7rmlrDnmoTnlZnnl5XlnZcs5bm26L+U5Zue55WZ55eV5Z2X6L6T5YWl5a6a5L2N5paH5pysXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSBzdGFydE9mZnNldFxuICAgICAqIEBwYXJhbSB0cmFja1R5cGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGNyZWF0ZU5ld1RyYWNrSW5wdXQoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlciwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogVGV4dEdyb3VwRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgY3VyclRyYWNrRWxlID0gc3RhcnRDb250cm9sLnBhcmVudCBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIHN0YXJ0T2Zmc2V0ID4gMCAmJiBzdGFydE9mZnNldCA8IHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFRleHQgPSBzdGFydENvbnRyb2wuc3BsaWNlVGV4dChzdGFydE9mZnNldCwgc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgsIHRydWUpIGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgICAgICBzdGFydENvbnRyb2wucGFyZW50LmFkZENoaWxkKHNwbGl0VGV4dCwgc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldCA+IDAgPyAxIDogMDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0O1xuICAgICAgICAvL+WIh+WJsueVmeeXleWdl1xuICAgICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgY3VyclRyYWNrRWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRUcmFjayA9IGN1cnJUcmFja0VsZS5zcGxpdChzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0KSBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKHNwbGl0VHJhY2ssIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICBjb25zdCB7dHJhY2tFbGVtZW50LCBuZXdUZXh0R3JvdXB9ID0gdGhpcy5jcmVhdGVUZXh0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbCwgdGV4dFByb3BzLCB0cmFja1R5cGUpO1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZCh0cmFja0VsZW1lbnQsIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3VGV4dEdyb3VwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge3RyYWNrRWxlbWVudCwgbmV3VGV4dEdyb3VwfSA9IHRoaXMuY3JlYXRlVGV4dFRyYWNrRWxlbWVudChzdGFydENvbnRyb2wsIHRleHRQcm9wcywgdHJhY2tUeXBlKTtcbiAgICAgICAgICAgIGN1cnJUcmFja0VsZS5wYXJlbnQuYWRkQ2hpbGQodHJhY2tFbGVtZW50LCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIChpbmRleCA9PT0gMCA/IDAgOiAxKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3VGV4dEdyb3VwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN6L6T5YWl6IqC54K555qE5paH5pys5bGe5oCnXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSBvZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldERlZmF1bHRUZXh0UHJvcHMoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBUZXh0UHJvcHMge1xuICAgICAgICBsZXQgdGV4dFByb3BzID0gdGhpcy5nZXREZWZhdWx0VGV4dFByb3BzQnlPcHRpb25zKCk7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMgPSBzdGFydENvbnRyb2wucHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IEVsZW1lbnRVdGlsLmdldERhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDtcbiAgICAgICAgaWYgKGRhdGFFbGUgJiYgSXNJblNpZGVEYXRhRWxlbWVudChzdGFydENvbnRyb2wsIG9mZnNldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhRWxlLnByb3BzLnZhbHVlVGV4dFByb3BzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0UHJvcHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u6YCJ6aG56YWN572u6L+U5Zue5Yib5bu65paH5pys55qE6buY6K6k5paH5pys5bGe5oCnXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldERlZmF1bHRUZXh0UHJvcHNCeU9wdGlvbnMoKTogVGV4dFByb3BzIHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBuZXcgVGV4dFByb3BzKCk7XG4gICAgICAgIHByb3BzLmZvbnROYW1lID0gdGhpcy52aWV3T3B0aW9ucy5kZWZhdWx0Rm9udE5hbWU7XG4gICAgICAgIHByb3BzLmZvbnRTaXplID0gdGhpcy52aWV3T3B0aW9ucy5kZWZhdWx0Rm9udFNpemU7XG4gICAgICAgIHByb3BzLmNvbG9yID0gdGhpcy52aWV3T3B0aW9ucy5kZWZhdWx0Q29sb3I7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lhYPntKDkvY3kuo7nlZnnl5XljLrln5/lhoXvvIzkvYbmmK/lvZPliY3nvJbovpHmqKHlvI/kuLrpnZ7nlZnnl5XmqKHlvI/vvIzpnIDopoHlsIblvZPliY3nlZnnl5XlhYPntKDliIblibLlvIDmnaXvvIzmj5LlhaXmlrDmma7pgJrmlofmnKzlhYPntKDlr7nosaEs5bm26L+U5ZueXG4gICAgICogQHBhcmFtIHN0YXJ0Q29udHJvbFxuICAgICAqIEBwYXJhbSBzdGFydE9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3BsaXRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlcik6IFRleHRHcm91cEVsZW1lbnQge1xuICAgICAgICBpZiAoIShzdGFydENvbnRyb2wucGFyZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSAmJiBzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRDb250cm9sO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wcyhzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgY3VyclRyYWNrRWxlID0gc3RhcnRDb250cm9sLnBhcmVudCBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50ICYmIHN0YXJ0T2Zmc2V0ID4gMCAmJiBzdGFydE9mZnNldCA8IHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFRleHQgPSBzdGFydENvbnRyb2wuc3BsaWNlVGV4dChzdGFydE9mZnNldCwgc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgsIHRydWUpIGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgICAgICBzdGFydENvbnRyb2wucGFyZW50LmFkZENoaWxkKHNwbGl0VGV4dCwgc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnRDb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldCA+IDAgPyAxIDogMDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0O1xuICAgICAgICBpZiAoaW5kZXggPiAwICYmIGluZGV4IDwgY3VyclRyYWNrRWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRUcmFjayA9IGN1cnJUcmFja0VsZS5zcGxpdChzdGFydENvbnRyb2wuZ2V0SW5kZXgoKSArIHN0YXJ0T2Zmc2V0KSBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKHNwbGl0VHJhY2ssIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICBjb25zdCBuZXdJbnB1dCA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cCh0ZXh0UHJvcHMpO1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZChuZXdJbnB1dCwgY3VyclRyYWNrRWxlLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwbGl0VHJhY2tFbGVtZW50KG5ld0lucHV0LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0ID0gRWxlbWVudFV0aWwuZ2V0TmV3VGV4dEdyb3VwKHRleHRQcm9wcyk7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKG5ld0lucHV0LCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIChpbmRleCA9PT0gMCA/IDAgOiAxKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGxpdFRyYWNrRWxlbWVudChuZXdJbnB1dCwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliJvlu7rmj5LlhaUoaW5zLXJ1bikg55WZ55eVLOW5tuS4lOi/lOWbnueVmeeXleeahOaWh+acrOWFg+e0oOWvueixoVxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlVGV4dFRyYWNrRWxlbWVudChzdGFydENvbnRyb2w6IEVsZW1lbnQsIHRleHRQcm9wczogVGV4dFByb3BzIHwgbnVsbCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogeyB0cmFja0VsZW1lbnQ6IFRyYWNrUnVuRWxlbWVudCwgbmV3VGV4dEdyb3VwOiBUZXh0R3JvdXBFbGVtZW50IH0ge1xuICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgdHJhY2tFbGVtZW50ID0gdGhpcy5jcmVhdGVUcmFja0VsZW1lbnQodHJhY2tUeXBlKTtcbiAgICAgICAgdGV4dFByb3BzID0gdGV4dFByb3BzIHx8IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wc0J5T3B0aW9ucygpO1xuICAgICAgICBjb25zdCBuZXdUZXh0R3JvdXAgPSBFbGVtZW50VXRpbC5nZXROZXdUZXh0R3JvdXAodGV4dFByb3BzKTtcbiAgICAgICAgbmV3VGV4dEdyb3VwLnByb3BzLmNvbG9yID0gJyc7XG4gICAgICAgIC8vbmV3VGV4dEdyb3VwLnByb3BzLmNvbG9yID0gJyNmZjRkNGYnO1xuICAgICAgICB0cmFja0VsZW1lbnQuYWRkQ2hpbGQobmV3VGV4dEdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYWNrRWxlbWVudCxcbiAgICAgICAgICAgIG5ld1RleHRHcm91cFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRyYWNrRWxlbWVudCh0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBUcmFja1J1bkVsZW1lbnQge1xuICAgICAgICBjb25zdCB0cmFja0VsZW1lbnQgPSBuZXcgVHJhY2tSdW5FbGVtZW50KHRyYWNrVHlwZSk7XG4gICAgICAgIHRyYWNrRWxlbWVudC5wcm9wcy51c2VySWQgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkO1xuICAgICAgICB0cmFja0VsZW1lbnQucHJvcHMudXNlck5hbWUgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLm5hbWU7XG4gICAgICAgIHRyYWNrRWxlbWVudC5wcm9wcy5kYXRlID0gQ29tbW9uVXRpbC5mb3JtYXROb3coJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcbiAgICAgICAgdHJhY2tFbGVtZW50LnByb3BzLmlkID0gbmFub2lkKDUpO1xuICAgICAgICByZXR1cm4gdHJhY2tFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5wdXRUZXh0R3JvdXAodGV4dDogVGV4dEdyb3VwRWxlbWVudCwgZGF0YTogSW5wdXREYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZJbnB1dERhdGEgPSBkYXRhLnByZXZJbnB1dERhdGEgfHwgJyc7XG4gICAgICAgIGNvbnN0IHByZXZJbnB1dERhdGFMZW5ndGggPSBwcmV2SW5wdXREYXRhLmxlbmd0aDtcbiAgICAgICAgaWYgKCFkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbXBvc2l0aW9uU3RhcnRJbmZvIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtlbGVtZW50LCBvZmZzZXR9ID0gZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbztcbiAgICAgICAgbGV0IHN0YXJ0SW5wdXRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgIC8vc3RhcnRJbnB1dE9mZnNldCAtPSBwcmV2SW5wdXREYXRhTGVuZ3RoO1xuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkpIHtcbiAgICAgICAgICAgIC8v5b2T5YmN6YCJ5Lit5YWD57Sg5L2N5LqO6L6T5YWl5YWD57Sg5piv6LW35aeL6L+Y5piv57uT5p2f5L2N572u77yM5aaC5p6c5L2N5LqO6LW35aeL5L2N572u77yM5YiZ6L6T5YWl5YGP56e76YeP5Li6MCzlkKbliJnkuLrmnKrlj5jmm7TkuYvliY3nmoTlhoXlrrlsZW5ndGhcbiAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoZWxlbWVudCkgPT09IHRleHQpIHtcbiAgICAgICAgICAgICAgICBzdGFydElucHV0T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbnB1dE9mZnNldCA9IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCAtIHByZXZJbnB1dERhdGFMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGV4dC5zcGxpY2Uoc3RhcnRJbnB1dE9mZnNldCwgcHJldklucHV0RGF0YUxlbmd0aCwgZGF0YS5kYXRhKTtcbiAgICAgICAgLy/ovpPlhaXlkI7mkqTplIDvvIzlr7zoh7TmlofmnKznu4TlhoXkuLrnqbpcbiAgICAgICAgaWYgKCF0ZXh0LnRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5VGV4dCh0ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZSh0ZXh0LCBzdGFydElucHV0T2Zmc2V0ICsgZGF0YS5kYXRhLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIGJhY2tzcGFjZSzlkJHliY3liKDpmaRcbiAgICAgKi9cbiAgICBvbkJhY2tzcGFjZShldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydENvbnRyb2wgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRFbGVtZW50ID0gbmV3IEtleWJvcmFkRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZXZlbnRFbGVtZW50LmtleSA9ICdiYWNrc3BhY2UnO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlRXZlbnQgPSBldnQ7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2VPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgY29uc3QgcmVzID0gRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnQmFja3NwYWNlS2V5Jywgc3RhcnRDb250cm9sLCBldmVudEVsZW1lbnQsICdDYXB0dXJlJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5pc0NhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC51cGRhdGVDb21tZW50cygpO1xuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uQmFja3NwYWNlRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVsZXRlLOWQkeWQjuWIoOmZpFxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKi9cbiAgICBvbkRlbGV0ZUtleUhhbmRsZXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjb2xsYXBzZWR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgZXZlbnRFbGVtZW50ID0gbmV3IEtleWJvcmFkRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZXZlbnRFbGVtZW50LmtleSA9ICdkZWxldGUnO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlRXZlbnQgPSBldnQ7XG4gICAgICAgIGV2ZW50RWxlbWVudC5zb3VyY2VPZmZzZXQgPSBzdGFydE9mZnNldDtcbiAgICAgICAgY29uc3QgcmVzID0gRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRGVsZXRlS2V5Jywgc3RhcnRDb250cm9sLCBldmVudEVsZW1lbnQsICdDYXB0dXJlJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5pc0NhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEZWxldGVFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vblJhbmdlRGVsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7pgInmi6nojIPlm7TliKDpmaRcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uUmFuZ2VEZWxldGUoKTogeyBjdXJzb3JFbGU6IEVsZW1lbnQsIGN1cnNvck9mZnNldDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCB7c2VsZWN0ZWRSYW5nZX0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2VsZWN0aW9uUmFuZ2UgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgLy/nlKjkuo7liLfmlrDlkI7lrprkvY3lhYnmoIdcbiAgICAgICAgbGV0IHN0YXJ0UG9pbnRFbGVtZW50OiBFbGVtZW50O1xuICAgICAgICBsZXQgc3RhcnRQb2ludE9mZnNldCA9IDA7XG4gICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAvL+afkOS4quWuueWZqOeahOWGheWuueiiq+WFqOmDqOmAieS4rVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgQmxvY2tDb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludEVsZW1lbnQgPSBzZWxlY3RlZFJhbmdlLnRhcmdldDtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5YaF5a655Z2X6KKr6YCJ5LitLOmcgOimgeWQkeS4iuWvu+aJvuWGheWuueWdl+WuueWZqFxuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBCbG9ja0NvbnRlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50KHNlbGVjdGVkUmFuZ2UudGFyZ2V0LCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIEJsb2NrQ29udGFpbmVyRWxlbWVudCkgYXMgQmxvY2tDb250YWluZXJFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRQb2ludEVsZW1lbnQgPSBwYXJlbnRDb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq6IO95ZCR5LiK5a+75om+5Yiw5a6a5L2N55qE5YaF5a655Z2X5a655ZmoJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq55+l5p2h5Lu25Yy66Ze0JylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSBSYW5nZVV0aWwuZ2V0U3RhcnRSYW5nZVRhcmdldChzZWxlY3RlZFJhbmdlKSBhcyBTZWxlY3Rpb25Db250ZW50UmFuZ2U7XG4gICAgICAgICAgICBjb25zdCBlbmRSYW5nZSA9IFJhbmdlVXRpbC5nZXRFbmRSYW5nZVRhcmdldChzZWxlY3RlZFJhbmdlKSBhcyBTZWxlY3Rpb25Db250ZW50UmFuZ2U7XG4gICAgICAgICAgICBpZiAoc3RhcnRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHN0YXJ0UmFuZ2UudGFyZ2V0LCBmYWxzZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucykgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludE9mZnNldCA9IC0xO1xuICAgICAgICAgICAgICAgIC8v5Yik5pat57uT5p2f6YCJ5Yy65ZKM5byA5aeL6YCJ5Yy65piv5ZCm5Zyo5LiA5Liq5q616JC95Lit77yM5bC96YeP6JC95Zyo5ZCM5LiA5q616JC95LitXG4gICAgICAgICAgICAgICAgaWYgKCFzdGFydFBvaW50RWxlbWVudCB8fCBFbGVtZW50VXRpbC5pc0luU2FtZVBhcmFncmFwaChzdGFydFJhbmdlLnRhcmdldCwgZW5kUmFuZ2UudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50RWxlbWVudCA9IGVuZFJhbmdlLnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50RWxlbWVudCA9IHN0YXJ0UmFuZ2UudGFyZ2V0IGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRPZmZzZXQgPSBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2VJbkZvcm1FZGl0KHNlbGVjdGVkUmFuZ2UpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShzdGFydFBvaW50RWxlbWVudCwgc3RhcnRQb2ludE9mZnNldCk7XG4gICAgICAgIHJldHVybiB7Y3Vyc29yRWxlOiBzdGFydFBvaW50RWxlbWVudCwgY3Vyc29yT2Zmc2V0OiBzdGFydFBvaW50T2Zmc2V0fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBiYWNrc3BhY2XliKDpmaRcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEBwYXJhbSBvZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgb25CYWNrc3BhY2VFbGVtZW50KGNvbnRyb2w6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKCFwcmV2RWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5pc0luU2FtZVBhcmFncmFwaChjb250cm9sLCBwcmV2RWxlKSkge1xuICAgICAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQoY29udHJvbCkgPT09IHByZXZFbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUVsZW1lbnQocHJldkVsZSwgRWxlbWVudFV0aWwuZ2V0RWxlbWVudEVuZE9mZnNldChwcmV2RWxlKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8v6ZyA6KaB5Yik5pat5piv5ZCm5piv5YWE5byf5q616JC977yM5YWE5byf5q616JC977yM6ZyA6KaB5ZCI5bm2XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldlBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUocHJldkVsZSwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyUGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShjb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgICAgIC8v6KGo5piO5piv57Sn5oyo552A55qE5Lik5Liq5q616JC977yM6KaB6L+b6KGM5q616JC95ZCI5bm2XG4gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmdldFByZXZTaWJsaW5nRWxlbWVudChjdXJyUGFyYSkgPT09IHByZXZQYXJhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVQYXJhZ3JhcGgocHJldlBhcmEsIGN1cnJQYXJhLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+S4jeaYr+e0p+aMqOedgOeahOauteiQve+8jOWImeWJjeS4gOS4quauteiQveaYr+S9jeS6juWPpuS4gOS4quWuueWZqOmHjO+8jOS+i+Wmgu+8muWkhOS6juWNleWFg+agvOWGheeahOauteiQvVxuICAgICAgICAgICAgICAgICAgICAvL+WImeS4jeWQkeWJjeWumuS9jVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgb2Zmc2V0KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVUZXh0KGNvbnRyb2wsIG9mZnNldCAtIDEsIDEpO1xuICAgICAgICAgICAgICAgIGlmICghY29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlUZXh0KGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCBvZmZzZXQgLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLnBhcmVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50ICYmIGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRhRGVjb3JhdGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbGUgPSBjb250cm9sLnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgLy/nqbrmlbDmja7lhYPvvIzlubbkuJTlvZPliY3lhYnmoIflpITkuo7mlbDmja7lhYPlvIDlp4vkvY3nva5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuRGVsZXRlSW5saW5lR3JvdXAoZGF0YUVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3Vyb3NyRm9yRGVsZXRlQWN0aW9uKGRhdGFFbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc1ByZWZpeCAmJiB0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmp1bXBUb1ByZXZEYXRhRWxlbWVudChkYXRhRWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2VFbGVtZW50KGNvbnRyb2wsIDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudChjb250cm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi3s+WIsOS4iuS4gOS4quaVsOaNruWFg+S4rVxuICAgICAqIEBwYXJhbSBjdXJyRWxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBqdW1wVG9QcmV2RGF0YUVsZW1lbnQoY3VyckVsZTogSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSAhPT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZFbGUgPSBFbGVtZW50VXRpbC5nZXRQcmV2RGF0YUVsZW1lbnQodGhpcy5kb2NDdHgsIGN1cnJFbGUgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCk7XG4gICAgICAgIGlmICghcHJldkVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2RWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZS5lbmREZWNvcmF0ZSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVsZXRl5Yig6ZmkXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uS2V5RGVsZXRlRWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSBFbGVtZW50VXRpbC5nZXRFbGVtZW50RW5kT2Zmc2V0KGNvbnRyb2wpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmICghbmV4dEVsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCAtMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmlzSW5TYW1lUGFyYWdyYXBoKGNvbnRyb2wsIG5leHRFbGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nRWxlbWVudChjb250cm9sKSA9PT0gbmV4dEVsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uS2V5RGVsZXRlRWxlbWVudChuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL+mcgOimgeWIpOaWreaYr+WQpuaYr+WFhOW8n+auteiQve+8jOWFhOW8n+auteiQve+8jOmcgOimgeWQiOW5tlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKG5leHRFbGUsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoY29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgICAgICAvL+ihqOaYjuaYr+e0p+aMqOedgOeahOS4pOS4quauteiQve+8jOimgei/m+ihjOauteiQveWQiOW5tlxuICAgICAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoY3VyclBhcmEpID09PSBuZXh0UGFyYSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShuZXh0RWxlLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVQYXJhZ3JhcGgobmV4dFBhcmEsIGN1cnJQYXJhLCBjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL+S4jeaYr+e0p+aMqOedgOeahOauteiQve+8jOWImeWJjeS4gOS4quauteiQveaYr+S9jeS6juWPpuS4gOS4quWuueWZqOmHjO+8jOS+i+Wmgu+8muWkhOS6juWNleWFg+agvOWGheeahOauteiQvVxuICAgICAgICAgICAgICAgICAgICAvL+WImeS4jeWQkeWJjeWumuS9jVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgb2Zmc2V0KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVUZXh0KGNvbnRyb2wsIG9mZnNldCwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eVRleHQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5wYXJlbnQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwICYmIGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRhRGVjb3JhdGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbGUgPSBjb250cm9sLnBhcmVudCBhcyBEYXRhRWxlbWVudElubGluZUdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAvL+epuuaVsOaNruWFg++8jOW5tuS4lOW9k+WJjeWFieagh+WkhOS6juaVsOaNruWFg+W8gOWni+S9jee9rlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc1ByZWZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuRGVsZXRlSW5saW5lR3JvdXAoZGF0YUVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cm9zckZvckRlbGV0ZUFjdGlvbihkYXRhRWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhRWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFjb250cm9sLmlzUHJlZml4ICYmIGRhdGFFbGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoZGF0YUVsZS5lbmREZWNvcmF0ZSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmlzRGVjb3JhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLm9uS2V5RGVsZXRlRWxlbWVudChjb250cm9sLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KGNvbnRyb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5piv5ZCm5Y+v5Lul5Yig6Zmk5pWw5o2u57uEXG4gICAgICogQHBhcmFtIGRhdGFFbGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY2FuRGVsZXRlSW5saW5lR3JvdXAoZGF0YUVsZTogSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhRWxlLmxlbmd0aCA9PT0gMjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGVsZXRlVGV4dCh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURlbGV0ZWRUcmFja1RleHQodGV4dCwgb2Zmc2V0LCBsZW4pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0LnNwbGljZShvZmZzZXQsIGxlbilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25EZWxldGVJdGVtKGl0ZW06IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgLy/liKDpmaTnrKblj7fkuI3ov5vooYznlZnnl5VcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdwc3ltJykge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vblRyYWNrRGVsZXRlRWxlbWVudChpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0ucmVtb3ZlKCk7XG4gICAgICAgICAgICBpdGVtLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YWD57Sg5piv5ZCm5Zyo55WZ55eV5YWD57Sg5YaFXG4gICAgICogQHBhcmFtIHRhcmdldFxuICAgICAqIEBwYXJhbSB0cmFja1R5cGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgaXNJbkN1cnJlbnRVc2VyVHJhY2sodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRhcmdldC5wYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgdGFyZ2V0LnBhcmVudC50eXBlID09PSB0cmFja1R5cGUgJiYgdGFyZ2V0LnBhcmVudC5wcm9wcy51c2VySWQgPT09IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSW5UcmFja0VsZW1lbnQodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRhcmdldC5wYXJlbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgdGFyZ2V0LnBhcmVudC50eXBlID09PSB0cmFja1R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOeVmeeXlemZpOaWh+acrOS7peWklueahOWFtuS7luWFg+e0oFxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICovXG4gICAgcHJpdmF0ZSBvblRyYWNrRGVsZXRlRWxlbWVudCh0YXJnZXQ6IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG4gICAgICAgIGlmICh0aGlzLmlzSW5UcmFja0VsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lvZPliY3nlKjmiLflop7liqDnmoTlhoXlrrnvvIzlhoXlrrnnm7TmjqXliKDpmaTkuI3pnIDopoHnlZnnl5VcbiAgICAgICAgaWYgKHRoaXMuaXNJbkN1cnJlbnRVc2VyVHJhY2sodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXRweUlubGluZUJsb2NrKHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy90YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IHRyYWNrRWxlID0gdGhpcy5nZXROZXh0VHJhY2tFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgdHJhY2tFbGUuYWRkQ2hpbGQodGFyZ2V0LmNsb25lKHRydWUpLCAwKTtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnJlbW92ZUVtdHB5SW5saW5lQmxvY2socGFyZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDmlofmnKzliKDpmaTnlZnnl5VcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZURlbGV0ZWRUcmFja1RleHQodGFyZ2V0OiBUZXh0R3JvdXBFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJblRyYWNrRWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+W9k+WJjeeUqOaIt+WinuWKoOeahOWGheWuue+8jOW9k+WJjeeUqOaIt+WIoOmZpOaXtuS4jemcgOimgeeVmeeXlVxuICAgICAgICBpZiAodGhpcy5pc0luQ3VycmVudFVzZXJUcmFjayh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpKSB7XG4gICAgICAgICAgICB0YXJnZXQuc3BsaWNlKG9mZnNldCwgbGVuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+WFqOmDqOiiq+WIoOmZpFxuICAgICAgICBpZiAob2Zmc2V0ID09PSAwICYmIGxlbiA9PT0gdGFyZ2V0LnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrSW5wdXRUZXh0ID0gdGhpcy5nZXROZXh0VHJhY2tJbnB1dEVsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpO1xuICAgICAgICAgICAgdHJhY2tJbnB1dFRleHQudGV4dCA9IHRhcmdldC50ZXh0ICsgdHJhY2tJbnB1dFRleHQudGV4dDtcbiAgICAgICAgICAgIHRhcmdldC5zcGxpY2UoMCwgdGFyZ2V0LnRleHRNZWFzdXJlcy5sZW5ndGgpO1xuICAgICAgICAgICAgLy90YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge2xlZnRFbGVtZW50fSA9IHRoaXMuc3BsaXRUZXh0KHRhcmdldCwgb2Zmc2V0ICsgbGVuKTtcbiAgICAgICAgdGFyZ2V0ID0gbGVmdEVsZW1lbnQgYXMgbmV2ZXI7XG4gICAgICAgIGxldCB0cmFja1RleHQ6IFRleHRHcm91cEVsZW1lbnQgPSB0aGlzLmdldE5leHRUcmFja0lucHV0RWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCk7XG4gICAgICAgIGNvbnN0IHNwVGV4dCA9IHRhcmdldC5zcGxpY2VUZXh0KHRhcmdldC50ZXh0TWVhc3VyZXMubGVuZ3RoIC0gbGVuLCB0YXJnZXQudGV4dE1lYXN1cmVzLmxlbmd0aCwgdHJ1ZSk7XG4gICAgICAgIHRyYWNrVGV4dC5zcGxpY2UoMCwgMCwgc3BUZXh0Py50ZXh0KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2V0TmV4dFRyYWNrSW5wdXRFbGVtZW50KHRhcmdldDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogVGV4dEdyb3VwRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRyYWNrRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nVHJhY2tFbGVtZW50KHRhcmdldCwgdHJhY2tUeXBlLCB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkKVxuICAgICAgICBpZiAodHJhY2tFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEVsZSA9IHRyYWNrRWxlbWVudC5nZXRDaGlsZCgwKTtcbiAgICAgICAgICAgIGlmIChmaXJzdEVsZSAmJiBmaXJzdEVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RFbGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0cmFja0VsZW1lbnQuYWRkQ2hpbGQobmV3SW5wdXQsIDApO1xuICAgICAgICAgICAgICAgIHRhcmdldC5wcm9wcy5jbG9uZShuZXdJbnB1dC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHRyYWNrRWxlbWVudCxcbiAgICAgICAgICAgICAgICBuZXdUZXh0R3JvdXBcbiAgICAgICAgICAgIH0gPSB0aGlzLmNyZWF0ZVRleHRUcmFja0VsZW1lbnQodGFyZ2V0LCB0YXJnZXQucHJvcHMsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCk7XG4gICAgICAgICAgICB0YXJnZXQucGFyZW50LmFkZENoaWxkKHRyYWNrRWxlbWVudCwgdGFyZ2V0LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdUZXh0R3JvdXA7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2V0TmV4dFRyYWNrRWxlbWVudCh0YXJnZXQ6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IFRyYWNrUnVuRWxlbWVudCB7XG4gICAgICAgIGxldCB0cmFja0VsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ1RyYWNrRWxlbWVudCh0YXJnZXQsIHRyYWNrVHlwZSwgdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5pZClcbiAgICAgICAgaWYgKCF0cmFja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHRyYWNrRWxlbWVudCA9IHRoaXMuY3JlYXRlVHJhY2tFbGVtZW50KHRyYWNrVHlwZSk7XG4gICAgICAgICAgICB0YXJnZXQucGFyZW50LmFkZENoaWxkKHRyYWNrRWxlbWVudCwgdGFyZ2V0LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJhY2tFbGVtZW50O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk5YWD57Sg5bm25a6a5L2N5YWJ5qCHXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVtb3ZlRWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgaWYgKCFwcmV2RWxlKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIHRydWUsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG5leHRFbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgY29udHJvbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEVsZW1lbnRVdGlsLmlzSW5TYW1lUGFyYWdyYXBoKGNvbnRyb2wsIHByZXZFbGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgY29udHJvbC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY29udHJvbCwgdHJ1ZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAobmV4dEVsZSAmJiBFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQobmV4dEVsZSkgPT09IGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgY29udHJvbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICAgICAgY29udHJvbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWbnui9puS6i+S7tlxuICAgICAqL1xuICAgIG9uRW50ZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgYnJlYWtQYXJhID0gdGhpcy5zcGxpdEN1cnJlbnRQYXJhZ3JhcGgoKTtcbiAgICAgICAgLy/pgInkuK3nmoTmmK/kuIDkuKrlhYPntKBcbiAgICAgICAgaWYgKGJyZWFrUGFyYSA9PT0gcGFyYWdyYXBoKSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZVBhcmEgPSBwYXJhZ3JhcGguY2xvbmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWtQYXJhLnBhcmVudC5hZGRDaGlsZChjbG9uZVBhcmEsIGJyZWFrUGFyYS5nZXRJbmRleCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoYnJlYWtQYXJhLCAwKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeihqOagvFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaW5zZXJ0VGFibGUodGI6IFRhYmxlRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBicmVha1BhcmEgPSB0aGlzLnNwbGl0Q3VycmVudFBhcmFncmFwaCgpO1xuICAgICAgICBicmVha1BhcmEucGFyZW50LmFkZENoaWxkKHRiLCBicmVha1BhcmEuZ2V0SW5kZXgoKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZSh0YiwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiG5Ymy5b2T5YmN5q616JC955So5LqO5o+S5YWl6KGo5qC85oiW6ICF57KY6LS055qE5YaF5a65XG4gICAgICogQHBhcmFtIGluc2VydEl0ZW1zIOWIhuWJsuWQjuaPkuWFpeeahOWGheWuue+8jOWGheWuuemcgOimgeaYr2Jsb2Nr5oiW6ICF6KGo5qC85a+56LGhXG4gICAgICovXG4gICAgcHJpdmF0ZSBzcGxpdEN1cnJlbnRQYXJhZ3JhcGgoKTogUGFyYWdyYXBoRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBhcmFDb250YWluZXIgPSBwYXJhZ3JhcGgucGFyZW50O1xuICAgICAgICAvL+WmguaenOmAieS4reeahOaYr+auteiQveesrOS4gOS4quWFg+e0oFxuICAgICAgICBjb25zdCBmaXJzdExlYWYgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KHBhcmFncmFwaCk7XG4gICAgICAgIGlmICgoc3RhcnRDb250cm9sID09PSBmaXJzdExlYWYgJiYgc3RhcnRPZmZzZXQgPT09IDApIHx8IChzdGFydENvbnRyb2wgPT09IGZpcnN0TGVhZiAmJiBzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCkpIHtcbiAgICAgICAgICAgIC8vdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHBhcmFncmFwaCwgMCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3QgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQocGFyYWdyYXBoKSBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJhUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0U2VsY3Rpb25SYW5nZShzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBsYXN0LCAxLCBwYXJhZ3JhcGgpO1xuICAgICAgICBzZWxlY3RlZFBhcmFSYW5nZS5pc0Z1bGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBicmVha1BhcmEgPSBFbGVtZW50VXRpbC5jbG9uZVJhbmdlKHNlbGVjdGVkUGFyYVJhbmdlLCB0cnVlKSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBFbGVtZW50VXRpbC5maXhQYXJhZ3JhcGhDb250ZW50KHBhcmFncmFwaCk7XG4gICAgICAgIEVsZW1lbnRVdGlsLmZpeFBhcmFncmFwaENvbnRlbnQoYnJlYWtQYXJhKTtcbiAgICAgICAgcGFyYUNvbnRhaW5lci5hZGRDaGlsZChicmVha1BhcmEsIHBhcmFncmFwaC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgIC8vcGFyYUNvbnRhaW5lci5hZGRDaGlsZCh0YiwgYnJlYWtQYXJhLmdldEluZGV4KCkpO1xuICAgICAgICAvL3RoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShicmVha1BhcmEsIDApO1xuICAgICAgICByZXR1cm4gYnJlYWtQYXJhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQiOW5tuauteiQvVxuICAgICAqL1xuICAgIGNvbWJpbmVQYXJhZ3JhcGgocHJldlBhcmE6IFBhcmFncmFwaEVsZW1lbnQsIGN1cnJQYXJhOiBQYXJhZ3JhcGhFbGVtZW50LCBjdXJyRWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2UGFyYUxlbmd0aCA9IHByZXZQYXJhLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGFyYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjdXJyUGFyYS5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKTtcbiAgICAgICAgICAgIHByZXZQYXJhLmFkZENoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICAvL2N1cnJQYXJhLnJlbW92ZSgpO1xuICAgICAgICBjb25zdCBjdXJyUGFyYUNvbnRhaW5lciA9IGN1cnJQYXJhLnBhcmVudDtcbiAgICAgICAgY3VyclBhcmEuZGVzdHJveSgpO1xuICAgICAgICBjdXJyUGFyYUNvbnRhaW5lci5yZW1vdmVDaGlsZChjdXJyUGFyYSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2UGFyYS5nZXRDaGlsZChwcmV2UGFyYUxlbmd0aCksIDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIoOmZpOmAieS4reeahOWMuuWfn+WGheWuuVxuICAgICAqIEBwYXJhbSByYW5nZVxuICAgICAqL1xuICAgIGRlbGV0ZVJhbmdlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3NlbGVjdGVkQ2hpbGRyZW59ID0gcmFuZ2U7XG4gICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJhbmdlID0gc2VsZWN0ZWRDaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGNvbnN0IHt0YXJnZXQ6IGNoaWxkVGFyZ2V0LCBpc0Z1bGxTZWxlY3RlZDogY2hpbGRGdWxsU2VsZWN0ZWR9ID0gY2hpbGRSYW5nZTtcbiAgICAgICAgICAgIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50ICYmICFjaGlsZFRhcmdldC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVJdGVtKGNoaWxkVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7c3RhcnRPZmZzZXQsIGVuZE9mZnNldH0gPSBjaGlsZFJhbmdlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlVGV4dChjaGlsZFRhcmdldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIC8v55WZ55eV5qih5byPXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2UoY2hpbGRSYW5nZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy/ooajmoLzlhajpgInnirbmgIHml7bvvIzmiafooYzliKDpmaTmk43kvZxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgVGFibGVFbGVtZW50ICYmIGNoaWxkRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvL+auteiQveWFqOmAieeKtuaAgeaXtu+8jOaJp+ihjOWIoOmZpOaTjeS9nFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIEJsb2NrQ29udGVudEVsZW1lbnQgJiYgY2hpbGRGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50ICYmIGNoaWxkRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2UoY2hpbGRSYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOihqOWNleWMuuWfn+WIoOmZpOWkhOeQhlxuICAgICAqIEBwYXJhbSByYW5nZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWxldGVSYW5nZUluRm9ybUVkaXQocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldERhdGFFbGVtZW50KHJhbmdlLnRhcmdldCk7XG4gICAgICAgIC8v5Zyo5pWw5o2u5YWD5YaF5Yig6Zmk77yM6LCD55So5pmu6YCa55qE5Yig6Zmk5aSE55CGXG4gICAgICAgIGlmIChkYXRhRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lnKjmlbDmja7lhYPlpJbliKDpmaRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvb3BGb3JEZWxEYXRhRWxlUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6KGo5Y2V5qih5byPOuWIoOmZpOmAieS4reeahOWMuuWfn+WGheWuuVxuICAgICAqL1xuICAgIHByaXZhdGUgbG9vcEZvckRlbERhdGFFbGVSYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzZWxlY3RlZENoaWxkcmVufSA9IHJhbmdlO1xuICAgICAgICBmb3IgKGxldCBpID0gc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRSYW5nZSA9IHNlbGVjdGVkQ2hpbGRyZW5baV07XG4gICAgICAgICAgICBjb25zdCB7dGFyZ2V0OiBjaGlsZFRhcmdldH0gPSBjaGlsZFJhbmdlO1xuICAgICAgICAgICAgaWYgKGNoaWxkVGFyZ2V0IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUVsZVByb3BzID0gY2hpbGRUYXJnZXQucHJvcHMgYXMgRGF0YUVsZUJhc2VQcm9wcztcbiAgICAgICAgICAgICAgICAgICAgLy/mlbDmja7lhYPlj6/nvJbovpFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFFbGVQcm9wcy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShjaGlsZFJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9vcEZvckRlbERhdGFFbGVSYW5nZShjaGlsZFJhbmdlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5ZCR55uu5qCH56e75Yqo5YWD57SgXG4gICAgICogQHBhcmFtIHNvdXJjZUVsZW1lbnRcbiAgICAgKiBAcGFyYW0gbW92ZUVsZW1lbnRcbiAgICAgKi9cbiAgICBtb3ZlRWxlbWVudCh0YXJnZXRFbGVtZW50OiBFbGVtZW50LCB0YXJnZXRPZmZzZXQ6IG51bWJlciwgbW92ZUVsZW1lbnQ6IEVsZW1lbnQsIG1vdmVPZmZzZXQ6IG51bWJlciwgc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIG1vdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtsZWZ0RWxlbWVudCwgcmlnaHRFbGVtZW50fSA9IHRoaXMuc3BsaXRUZXh0KHRhcmdldEVsZW1lbnQsIHRhcmdldE9mZnNldCk7XG4gICAgICAgICAgICBpZiAobGVmdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobW92ZUVsZW1lbnQsIGxlZnRFbGVtZW50LmdldEluZGV4KCkgKyAxKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByaWdodEVsZW1lbnQucGFyZW50LmFkZENoaWxkKG1vdmVFbGVtZW50LCByaWdodEVsZW1lbnQuZ2V0SW5kZXgoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQucGFyZW50LmFkZENoaWxkKG1vdmVFbGVtZW50LCB0YXJnZXRFbGVtZW50LmdldEluZGV4KCkgKyB0YXJnZXRPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHNzLnJlc2V0UmFuZ2UobW92ZUVsZW1lbnQsIG1vdmVPZmZzZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQkeaMh+WumueahOebruagh+aPkuWFpeWFg+e0oFxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50XG4gICAgICogQHBhcmFtIHRhcmdldE9mZnNldFxuICAgICAqIEBwYXJhbSBkZXN0RWxlQXJyYXlcbiAgICAgKi9cbiAgICBpbnNlcnRFbGVtZW50KHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsIHRhcmdldE9mZnNldDogbnVtYmVyLCBkZXN0RWxlQXJyYXk6IEFycmF5PEVsZW1lbnQ+KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBsZXQgbGFzdEVsZSE6IEVsZW1lbnQgfCBudWxsO1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtsZWZ0RWxlbWVudCwgcmlnaHRFbGVtZW50fSA9IHRoaXMuc3BsaXRUZXh0KHRhcmdldEVsZW1lbnQsIHRhcmdldE9mZnNldCk7XG4gICAgICAgICAgICBpZiAobGVmdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3RFbGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RWxlID0gZGVzdEVsZUFycmF5W2ldO1xuICAgICAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobGFzdEVsZSwgbGVmdEVsZW1lbnQuZ2V0SW5kZXgoKSArIDEgKyBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdEVsZUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFbGUgPSBkZXN0RWxlQXJyYXlbaV1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChsYXN0RWxlLCByaWdodEVsZW1lbnQuZ2V0SW5kZXgoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0RWxlQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsYXN0RWxlID0gZGVzdEVsZUFycmF5W2ldXG4gICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobGFzdEVsZSwgdGFyZ2V0RWxlbWVudC5nZXRJbmRleCgpICsgdGFyZ2V0T2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdEVsZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOagueaNruW8gOWni+S9jee9ruWSjOe7k+adn+S9jee9ru+8jOWwhuWtl+espuWIh+WJsuaIkOaMh+WumueahOWMuumXtFxuICAgICAqIEBwYXJhbSBzcGxpdFRleHRVbml0XG4gICAgICogQHBhcmFtIHN0YXJ0XG4gICAgICogQHBhcmFtIGVuZFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIHNwbGl0VGV4dEdyb3VwQnlSYW5nZSh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50LCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFRleHRHcm91cEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgZW5kID0gZW5kID09PSAtMSA/IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCA6IGVuZDtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ID09PSB0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXN0VGV4dEdyb3VwID0gdGV4dC5zcGxpY2VUZXh0KGVuZCwgLTEsIHRydWUpO1xuICAgICAgICBsZXQgbWlkZGxlVGV4dEdyb3VwID0gdGV4dC5zcGxpY2VUZXh0KHN0YXJ0LCAtMSwgdHJ1ZSk7XG4gICAgICAgIGlmIChsYXN0VGV4dEdyb3VwKSB7XG4gICAgICAgICAgICB0ZXh0LnBhcmVudC5hZGRDaGlsZChsYXN0VGV4dEdyb3VwLCB0ZXh0LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pZGRsZVRleHRHcm91cCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaWRkbGVUZXh0IGlzIG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0LnBhcmVudC5hZGRDaGlsZChtaWRkbGVUZXh0R3JvdXAsIHRleHQuZ2V0SW5kZXgoKSArIDEpO1xuXG4gICAgICAgIGlmICh0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRleHQucmVtb3ZlKCk7XG4gICAgICAgICAgICB0ZXh0LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlkZGxlVGV4dEdyb3VwO1xuICAgIH1cblxuICAgIHNwbGl0VGV4dCh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IHsgbGVmdEVsZW1lbnQ6IFRleHRHcm91cEVsZW1lbnQgfCBudWxsLCByaWdodEVsZW1lbnQ6IFRleHRHcm91cEVsZW1lbnQgfCBudWxsIH0ge1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPT0gLTEgPyB0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGggOiBvZmZzZXQ7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudDogdGV4dCxcbiAgICAgICAgICAgICAgICByaWdodEVsZW1lbnQ6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxlZnRFbGVtZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIHJpZ2h0RWxlbWVudDogdGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJpZ2h0VGV4dCA9IHRleHQuc3BsaWNlVGV4dChvZmZzZXQsIC0xLCB0cnVlKTtcbiAgICAgICAgaWYgKHJpZ2h0VGV4dCkge1xuICAgICAgICAgICAgdGV4dC5wYXJlbnQuYWRkQ2hpbGQocmlnaHRUZXh0LCB0ZXh0LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGVmdFRleHQ6IFRleHRHcm91cEVsZW1lbnQgfCBudWxsID0gdGV4dDtcbiAgICAgICAgaWYgKHRleHQudGV4dE1lYXN1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGV4dC5yZW1vdmUoKTtcbiAgICAgICAgICAgIGxlZnRUZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdEVsZW1lbnQ6IGxlZnRUZXh0LFxuICAgICAgICAgICAgcmlnaHRFbGVtZW50OiByaWdodFRleHRcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rumAieS4reeahOaWh+acrOagt+W8j1xuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSBzZXR0ZXJGdW5jXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0VGV4dFN0eWxlKHNzOiBTZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYzogKHRleHQ6IFRleHRHcm91cEVsZW1lbnQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzcy5zZWxlY3RlZFJhbmdlO1xuICAgICAgICBpZiAoIXJhbmdlIHx8IHNzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvblJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSBFbGVtZW50VXRpbC5nZXRGaXJzdFNlbGVjdGVkUmFuZ2UocmFuZ2UpO1xuICAgICAgICBjb25zdCBlbmRSYW5nZSA9IEVsZW1lbnRVdGlsLmdldExhc3RTZWxlY3RlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgdGhpcy5yZWN1cnNpb25TZXRSYW5nZVRleHRTdHlsZShyYW5nZSwgc2V0dGVyRnVuYyk7XG4gICAgICAgIGlmIChzdGFydFJhbmdlID09PSBlbmRSYW5nZSkge1xuICAgICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChzdGFydFJhbmdlLnRhcmdldCwgMCk7XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKHN0YXJ0UmFuZ2UudGFyZ2V0LCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhcnRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRTZWxlY3RlZE9mZnNldCA9IHNzLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFNlbGVjdGVkT2Zmc2V0ID0gc3MuZW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUVsZW1lbnQgPSB0aGlzLnNwbGl0VGV4dEdyb3VwQnlSYW5nZShzdGFydFJhbmdlLnRhcmdldCwgc3RhcnRTZWxlY3RlZE9mZnNldCwgZW5kU2VsZWN0ZWRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGlmIChtaWRkbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldHRlckZ1bmMobWlkZGxlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KG1pZGRsZUVsZW1lbnQsIDApO1xuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQobWlkZGxlRWxlbWVudCwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnRSYW5nZS50YXJnZXQsIDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUVsZW1lbnQgPSB0aGlzLnNwbGl0VGV4dEdyb3VwQnlSYW5nZShzdGFydFJhbmdlLnRhcmdldCwgc3RhcnRSYW5nZS5zdGFydE9mZnNldCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWlkZGxlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhtaWRkbGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KG1pZGRsZUVsZW1lbnQsIDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnRSYW5nZS50YXJnZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnRSYW5nZS50YXJnZXQsIHN0YXJ0UmFuZ2Uuc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbmRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChlbmRSYW5nZS50YXJnZXQsIC0xKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGVuZFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlRWxlbWVudCA9IHRoaXMuc3BsaXRUZXh0R3JvdXBCeVJhbmdlKGVuZFJhbmdlLnRhcmdldCwgMCwgZW5kUmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pZGRsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlckZ1bmMobWlkZGxlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQobWlkZGxlRWxlbWVudCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoZW5kUmFuZ2UudGFyZ2V0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKGVuZFJhbmdlLnRhcmdldCwgZW5kUmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3MuYWRkUmFuZ2UobmV3U2VsZWN0aW9uUmFuZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHJlY3Vyc2lvblNldFJhbmdlVGV4dFN0eWxlKHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UsIHNldHRlckZ1bmM6ICh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIFJhbmdlVXRpbC5yZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2UsIChpdGVtUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCAmJiBpdGVtUmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKGl0ZW1SYW5nZS50YXJnZXQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2V0UGFyYUFsaWduKHNzOiBTZWxlY3Rpb25TdGF0ZSwgc2V0dGVyRnVuYzogKHRwOiBQYXJhZ3JhcGhQcm9wcykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBpZiAoc3MuY29sbGFwc2VkICYmIHNzLnN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmEpIHtcbiAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKHBhcmEucHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzcy5zZWxlY3RlZFJhbmdlO1xuICAgICAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFJhbmdlVXRpbC5yZWN1cnNpb25UcmF2ZXJzYWxSYW5nZUhhbmRsZXIocmFuZ2UsIChpdGVtUmFuZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFBhcmFncmFwaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhpdGVtUmFuZ2UudGFyZ2V0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWkjeWItlxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIG9uQ29weShldnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBjb3B5U2VyaWFsaXplU3RyID0gRWxlbWVudFNlcmlhbGl6ZS5nZXRTZWxlY3RlZEpTT04odGhpcy5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIGlmICghY29weVNlcmlhbGl6ZVN0cikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2dC5jbGlwYm9hcmREYXRhPy5zZXREYXRhKCdkb2MvcGxhaW4nLCBjb3B5U2VyaWFsaXplU3RyKTtcbiAgICAgICAgY29uc3QgY29weVN0ciA9IEVsZW1lbnRTZXJpYWxpemUuZ2V0U2VsZWN0ZWRUZXh0KHRoaXMuc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICBldnQuY2xpcGJvYXJkRGF0YT8uc2V0RGF0YSgndGV4dC9wbGFpbicsIGNvcHlTdHIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWJquWIh1xuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKi9cbiAgICBvbkN1dChldnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Db3B5KGV2dCk7XG4gICAgICAgIHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOeymOi0tFxuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIG9uUGFzdGUoZXZ0OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IHBhc3RlVGV4dCA9IGV2dC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG4gICAgICAgIGNvbnN0IHBhc3RlRGF0YSA9IGV2dC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCdkb2MvcGxhaW4nKTtcbiAgICAgICAgaWYgKCFwYXN0ZURhdGEpIHtcbiAgICAgICAgICAgIGlmIChwYXN0ZVRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhc3RlUGxhaW5UZXh0KHBhc3RlVGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFzdGVFbGVtZW50ID0gdGhpcy5lbGVSZWFkZXIucmVhZEVsZW1lbnQoSlNPTi5wYXJzZShwYXN0ZURhdGEpKTtcbiAgICAgICAgaWYgKCFwYXN0ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnspjotLTlj43luo/liJfljJbmlbDmja7lpLHotKUnLCBwYXN0ZURhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtjb2xsYXBzZWR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgbGV0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAvL1RPRE865aaC5p6c5LiA5Liq5a655Zmo5YaF55qE5YWD57Sg6KKr5YWo6YOo5Yig6Zmk77yM5YiZ6L+U5ZueIG51bGxcbiAgICAgICAgICAgIC8vIGNvbnN0IHsgY3Vyc29yRWxlLCBjdXJzb3JPZmZzZXQgfSA9IHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICAgICAgLy8gc3RhcnRDb250cm9sID0gY3Vyc29yRWxlO1xuICAgICAgICAgICAgLy8gc3RhcnRPZmZzZXQgPSBjdXJzb3JPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+ihqOWNleaooeW8jzrlpoLmnpzlpI3liLbnmoTmmK/ljZXmoLzlvI/nmoTmlofmnKzvvIzpnIDopoHluo/liJfljJbkuLrnuq/mlofmnKzlpITnkIZcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgY29uc3QgcGFzdGVTdHJpbmcgPSBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyhwYXN0ZUVsZW1lbnQsIHthbGw6IGZhbHNlfSk7XG4gICAgICAgICAgICBpZiAocGFzdGVTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhc3RlUGxhaW5UZXh0KHBhc3RlU3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFzdGVFbGVtZW50IGluc3RhbmNlb2YgUGFyYWdyYXBoRWxlbWVudCB8fCBwYXN0ZUVsZW1lbnQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICAgICAgaWYgKHBhc3RlRWxlbWVudCBpbnN0YW5jZW9mIFBhcmFncmFwaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKC4uLkVsZW1lbnRVdGlsLmdldENoaWxkcmVuRWxlbWVudHMocGFzdGVFbGVtZW50KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3RlRWxlbWVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIC8v5b2T5YmN57KY6LS055qE5YWD57Sg5Li65pWw5o2u5YWD77yM5bm25LiU5Zyo5pWw5o2u5YWD5YaF6YOo57KY6LS0XG4gICAgICAgICAgICAgICAgaWYgKElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkgJiYgcGFzdGVFbGVtZW50IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZUNoaWxkcmVuID0gcGFzdGVFbGVtZW50LmdldElubmVySXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLmNsb25lKHRydWUpKVxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKC4uLnBhc3RlQ2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChwYXN0ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmrrXokL3lrZDlhYPntKDkuLrnqbonKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhc3RFbGUgPSB0aGlzLmluc2VydEVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY2hpbGRyZW4pIGFzIEVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobGFzdEVsZSwgLTEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCfnspjotLQ6JyArIHBhc3RlRGF0YSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0U29mdEJyKCk6IHZvaWQge1xuICAgICAgICBsZXQge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgbGFzdEVsZSA9IHRoaXMuaW5zZXJ0RWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBbbmV3IEJyZWFrRWxlbWVudCgpXSkgYXMgRWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9jdXNFbGUgPSBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQobGFzdEVsZSk7XG4gICAgICAgIGlmIChmb2N1c0VsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGZvY3VzRWxlLCAwKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG6buP6LS055qE57qv5paH5pysXG4gICAgICogQHBhcmFtIHRleHRcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhc3RlUGxhaW5UZXh0KHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0ZXh0SXRlbXMgPSB0ZXh0LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQgfHwgdGV4dEl0ZW1zLmxlbmd0aCA9PT0gMSB8fCBJc0luU2lkZUlubGluZUdyb3VwSW5wdXRFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9bXFxuXFxyXS9nLCAnJyk7XG4gICAgICAgICAgICB0aGlzLm5ld0lucHV0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0ZXh0LFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhcnRJbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHN0YXJ0Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZnNldFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBicmVha1BhcmEgPSB0aGlzLnNwbGl0Q3VycmVudFBhcmFncmFwaCgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0SXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQYXJhID0gYnJlYWtQYXJhLmNsb25lKGZhbHNlKSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0VGV4dFByb3BzID0gdGhpcy5nZXREZWZhdWx0VGV4dFByb3BzQnlPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VGV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cChpbnB1dFRleHRQcm9wcyk7XG4gICAgICAgICAgICAgICAgbmV3VGV4dEVsZS50ZXh0ID0gdGV4dEl0ZW1zW2ldO1xuICAgICAgICAgICAgICAgIG5ld1BhcmEuYWRkQ2hpbGQobmV3VGV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWtQYXJhLnBhcmVudC5hZGRDaGlsZChuZXdQYXJhLCBicmVha1BhcmEuZ2V0SW5kZXgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoYnJlYWtQYXJhLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruW9k+WJjeauteiQvemhueebruespuWPt+exu+Wei1xuICAgICAqL1xuICAgIHNldFBhcmFncmFwaE51bWJlclR5cGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9ybWF0OiBQYXJ0aWFsPFBhcmFncmFwaFByb3BzPiA9IHt9O1xuICAgICAgICBpZiAocGFyYS5wcm9wcy5udW1iZXJUeXBlID49IDApIHtcbiAgICAgICAgICAgIGZvcm1hdC5udW1iZXJUeXBlID0gLTE7XG4gICAgICAgICAgICBmb3JtYXQuaW5kZW50ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdC5udW1iZXJUeXBlID0gMDtcbiAgICAgICAgICAgIGZvcm1hdC5pbmRlbnQgPSAxNTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhLnNldEZvcm1hdChmb3JtYXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeaJueazqFxuICAgICAqL1xuICAgIGluc2VydENvbW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIGNvbGxhcHNlZH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoY29sbGFwc2VkIHx8ICFzdGFydENvbnRyb2wgfHwgIWVuZENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IG5hbm9pZCg1KTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb21tTWFyayA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICBzdGFydENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgIHN0YXJ0Q29tbU1hcmsucHJvcHMubWFya1R5cGUgPSAnc3RhcnQnO1xuXG4gICAgICAgIGNvbnN0IGVuZENvbW1NYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgIGVuZENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgIGVuZENvbW1NYXJrLnByb3BzLm1hcmtUeXBlID0gJ2VuZCc7XG5cbiAgICAgICAgdGhpcy5pbnNlcnRFbGVtZW50KGVuZENvbnRyb2wsIGVuZE9mZnNldCwgW2VuZENvbW1NYXJrXSlcbiAgICAgICAgdGhpcy5pbnNlcnRFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIFtzdGFydENvbW1NYXJrXSlcblxuICAgICAgICBjb25zdCBjb21tQ29udGVudCA9IG5ldyBDb21tQ29udGVudEVsZW1lbnQoKTtcbiAgICAgICAgY29tbUNvbnRlbnQucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgY29tbUNvbnRlbnQucHJvcHMuY3JlYXRlSWQgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkO1xuICAgICAgICBjb21tQ29udGVudC5wcm9wcy5jcmVhdGVOYW1lID0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5uYW1lO1xuICAgICAgICBjb21tQ29udGVudC5wcm9wcy5jcmVhdGVEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5kb2NDb21tZW50LmdldENvbW1NYXJrSW5kZXgoc3RhcnRDb21tTWFyayk7XG4gICAgICAgIGlmIChwb3MgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+iOt+WPluaPkuWFpeeahOaJueazqOS9jee9ruS4jeato+ehricpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudC5hZGRDaGlsZChjb21tQ29udGVudCwgcG9zKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5hZnRlckNvbW1lbnRzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRhRWxlTGlzdCA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnRyZWVGaWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cD47XG4gICAgICAgIGNvbnN0IGVycm9yRWxlTGlzdCA9IGRhdGFFbGVMaXN0Lm1hcChpdGVtID0+ICh7ZXJyb3I6IGl0ZW0udmFsaWRhdGUoKSwgZWxlOiBpdGVtfSkpLmZpbHRlcihpdGVtID0+IGl0ZW0uZXJyb3IpO1xuICAgICAgICBpZiAoIWVycm9yRWxlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yRWxlTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBuYW5vaWQoNSk7XG4gICAgICAgICAgICBjb25zdCBzdGFydENvbW1NYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgICAgICBzdGFydENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgICAgICBzdGFydENvbW1NYXJrLnByb3BzLm1hcmtUeXBlID0gJ3N0YXJ0JztcblxuICAgICAgICAgICAgY29uc3QgZW5kQ29tbU1hcmsgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgICAgIGVuZENvbW1NYXJrLnByb3BzLmlkID0gaWQ7XG4gICAgICAgICAgICBlbmRDb21tTWFyay5wcm9wcy5tYXJrVHlwZSA9ICdlbmQnO1xuXG4gICAgICAgICAgICBpdGVtLmVsZS5hZGRDaGlsZChzdGFydENvbW1NYXJrLCAwKTtcbiAgICAgICAgICAgIGl0ZW0uZWxlLmFkZENoaWxkKGVuZENvbW1NYXJrLCBpdGVtLmVsZS5sZW5ndGgpXG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uID0gQ29tbW9uVXRpbC5udWxsVG9TdHJpbmcoaXRlbS5lbGUucHJvcHMuY2FwdGlvbik7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZUVsZW1lbnQgPSBuZXcgVmFsaWRhdGVFbGVtZW50KCk7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQucHJvcHMudGl0bGUgPSBjYXB0aW9uICsgJ+mqjOivgSc7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQucHJvcHMuaWQgPSBpZDtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudC5zZXRDb250ZW50KGl0ZW0uZXJyb3IpO1xuXG4gICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmRvY0NvbW1lbnQuZ2V0Q29tbU1hcmtJbmRleChzdGFydENvbW1NYXJrKTtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudC5hZGRDaGlsZCh2YWxpZGF0ZUVsZW1lbnQsIHBvcyk7XG5cblxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQuYWZ0ZXJDb21tZW50c0NoYW5nZWQoKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk56m65a2X56ym5LiyXG4gICAgICogQHBhcmFtIHRleHRcbiAgICAgKi9cbiAgICByZW1vdmVFbXB0eVRleHQodGV4dDogVGV4dEdyb3VwRWxlbWVudCk6IHZvaWQge1xuICAgICAgICAvL2NvbnN0IG5leHRMZWFmRWxlbWVudEluUGFyYSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudCh0ZXh0LCB0cnVlLCB0cnVlKTsgZ2V0Q29tcHV0ZWRTdHlsZVxuICAgICAgICB0aGlzLnNldEN1cm9zckZvckRlbGV0ZUFjdGlvbih0ZXh0KTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGV4dC5wYXJlbnQ7XG4gICAgICAgIHRleHQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRW10cHlJbmxpbmVCbG9jayhwYXJlbnQpO1xuICAgIH1cblxuICAgIHNldEN1cm9zckZvckRlbGV0ZUFjdGlvbihjb250cm9sOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnNvckluZm8gPSB0aGlzLmdldEN1cnNvckVsZW1lbnRCeURlbGV0ZUFjdGlvbihjb250cm9sKTtcbiAgICAgICAgaWYgKGN1cnNvckluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjdXJzb3JJbmZvLmVsZSwgY3Vyc29ySW5mby5vZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q3Vyc29yRWxlbWVudEJ5RGVsZXRlQWN0aW9uKGNvbnRyb2w6IEVsZW1lbnQpOiB7IGVsZTogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgcHJldkxlYWZFbGVtZW50SW5QYXJhID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgLy/liKTmlq3mmK/lkKbkuLrlkIzkuIDmrrXokL1cbiAgICAgICAgaWYgKHByZXZMZWFmRWxlbWVudEluUGFyYSAmJiBFbGVtZW50VXRpbC5pc0luU2FtZVBhcmFncmFwaChwcmV2TGVhZkVsZW1lbnRJblBhcmEsIGNvbnRyb2wpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVsZTogcHJldkxlYWZFbGVtZW50SW5QYXJhLFxuICAgICAgICAgICAgICAgIG9mZnNldDogRWxlbWVudFV0aWwuZ2V0RWxlbWVudEVuZE9mZnNldChwcmV2TGVhZkVsZW1lbnRJblBhcmEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lkIzkuIDmrrXokL3lhbbku5blhYPntKBcbiAgICAgICAgY29uc3QgbmV4dExlYWZFbGVtZW50SW5QYXJhID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIHRydWUsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICBpZiAobmV4dExlYWZFbGVtZW50SW5QYXJhKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVsZTogbmV4dExlYWZFbGVtZW50SW5QYXJhLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5LiK5LiA5q616JC9XG4gICAgICAgIGlmIChwcmV2TGVhZkVsZW1lbnRJblBhcmEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZWxlOiBwcmV2TGVhZkVsZW1lbnRJblBhcmEsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBwcmV2TGVhZkVsZW1lbnRJblBhcmEgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCA/IDAgOiBFbGVtZW50VXRpbC5nZXRFbGVtZW50RW5kT2Zmc2V0KHByZXZMZWFmRWxlbWVudEluUGFyYSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTnqbrooYzlhoXmoIfnrb5cbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICovXG4gICAgcmVtb3ZlRW10cHlJbmxpbmVCbG9jayhlbGU6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCAmJiBlbGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBlbGUucGFyZW50O1xuICAgICAgICAgICAgZWxlLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXRweUlubGluZUJsb2NrKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXlvLrliLbmjaLpobXnrKblj7dcbiAgICAgKi9cbiAgICBpbnNlcnRQYWdlQnJlYWtQYXJhKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IGN1cnJQYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgUGFyYWdyYXBoRWxlbWVudClcbiAgICAgICAgaWYgKCFjdXJyUGFyYSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyUGFyYS5wYXJlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlQnJlYWsgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICAgICAgcGFnZUJyZWFrLnByb3BzLnBhZ2VCcmVhayA9IHRydWU7XG4gICAgICAgICAgICBwYWdlQnJlYWsucHJvcHMudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICBwYWdlQnJlYWsucGFyZW50LmFkZENoaWxkKHBhZ2VCcmVhayk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuIiwiaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQge1NlbGVjdGlvblN0YXRlfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7T3JpZW50VHlwZSwgUGFnZU9wdGlvbnMsIFZpZXdPcHRpb25zfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50UGFpbnR9IGZyb20gXCIuL2VsZW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHtQYWludENvbnRlbnQsIFJlbmRlckNvbnRleHR9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBkb2N1bWVudFByaW50IHtcbiAgICBzdGF0aWMgcHJpbnQoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpbnRSYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW5kZXJDYW52YXNOb2RlcyA9IHRoaXMuZ2V0UmVuZGVyQ2FudmFzTm9kZXMoc3MsIHZpZXdPcHRpb25zLCBkb2NDdHgsIHByaW50UmFuZ2VzKTtcbiAgICAgICAgaWYgKCFyZW5kZXJDYW52YXNOb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5omT5Y2w6IqC54K5Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJpbnROb2RlcyhyZW5kZXJDYW52YXNOb2RlcywgeyAuLi5kb2NDdHguZG9jdW1lbnQucHJvcHMgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi255qEY2FudmFz6IqC54K5XG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucyBcbiAgICAgKiBAcGFyYW0gZG9jQ3R4IFxuICAgICAqIEBwYXJhbSBwcmludFJhbmdlcyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRSZW5kZXJDYW52YXNOb2RlcyhzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcmludFJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgeyBzY2FsZSxkb2NQYWdlU2V0dGluZ3M6e3dpZHRoLCBoZWlnaHQgfX0gPSB2aWV3T3B0aW9ucztcbiAgICAgICAgY29uc3QgZGMgPSBzcy5yZW5kZXJDb250YWluZXI7XG4gICAgICAgIGNvbnN0IGNhbnZhc0xpc3Q6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50PiA9IFtdO1xuICAgICAgICBjb25zdCBwcmludFBhZ2VzOiBBcnJheTxEb2N1bWVudFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFwcmludFJhbmdlcyB8fCBwcmludFJhbmdlcy5zb21lKHBhZ2VJbmRleCA9PiBwYWdlSW5kZXggPT09IGkpKSB7XG4gICAgICAgICAgICAgICAgcHJpbnRQYWdlcy5wdXNoKDxEb2N1bWVudFJlbmRlck9iamVjdD5kYy5nZXRDaGlsZChpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmludFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjYW52YXNOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmN1cnNvciA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNhbnZhc05vZGUuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXNOb2RlLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwuc2V0Q2FudmFzUHJvcHMoY2FudmFzTm9kZSwgY3R4LCB2aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MpO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQ3R4ID0gbmV3IFJlbmRlckNvbnRleHQobmV3IFBhaW50Q29udGVudChjdHgpKTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5pbml0KHt3aWR0aCxoZWlnaHQsc2NhbGV9KTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5kcmF3TW9kZSA9ICdwcmludCc7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBwcmludFBhZ2VzW2ldO1xuICAgICAgICAgICAgY29uc3QgdG1wID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KGRvYy5yZWN0KTtcbiAgICAgICAgICAgIGRvYy5yZWN0LnggPSAwO1xuICAgICAgICAgICAgZG9jLnJlY3QueSA9IDA7XG4gICAgICAgICAgICBFbGVtZW50UGFpbnQuZHJhd1BhZ2UocmVuZGVyQ3R4LGRvY0N0eCwgZG9jLCB7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgICAgICByZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmNsZWFyKCk7XG4gICAgICAgICAgICByZW5kZXJDdHgubWFpbkNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCwgJ3doaXRlJyk7XG4gICAgICAgICAgICByZW5kZXJDdHguY29tbWl0KHt3aWR0aCxoZWlnaHQsc2NhbGV9KTtcbiAgICAgICAgICAgIGRvYy5yZWN0ID0gdG1wO1xuICAgICAgICAgICAgY2FudmFzTGlzdC5wdXNoKGNhbnZhc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW52YXNMaXN0XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5a+85Ye6YmFzZTY0XG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucyBcbiAgICAgKiBAcGFyYW0gZG9jQ3R4IFxuICAgICAqIEBwYXJhbSBwcmludFJhbmdlcyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgZXhwb3J0Q2FudmFzTm9kZXMoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpbnRSYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlckNhbnZhc05vZGVzKHNzLCB2aWV3T3B0aW9ucywgZG9jQ3R4LCBwcmludFJhbmdlcyk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lvZPliY3pobVcbiAgICAgKiBAcGFyYW0gc3MgXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zIFxuICAgICAqL1xuICAgIHN0YXRpYyBwcmludEN1cnJQYWdlKHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRIaXRJbmZvIH0gPSBzcztcbiAgICAgICAgaWYgKCFzdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2NQYWdlID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHN0YXJ0SGl0SW5mby5yZW5kZXIsIERvY3VtZW50UmVuZGVyT2JqZWN0KTtcbiAgICAgICAgaWYgKCFkb2NQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmludChzcywgdmlld09wdGlvbnMsIGRvY0N0eCwgW2RvY1BhZ2UuZ2V0SW5kZXgoKV0pO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJpbnRUZW1wbGF0ZSh7IHdpZHRoLCBoZWlnaHQsIG9yaWVudCB9OiBQYWdlT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiemhcIj5cbiAgICA8aGVhZD5cbiAgICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICAgICAgPHRpdGxlPjwvdGl0bGU+XG4gICAgICA8c3R5bGUgPlxuICAgICAgaHRtbCxcbiAgICAgIGJvZHkge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuICAgICAgKiB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICB9XG4gICAgICBAcGFnZSB7XG4gICAgICAgICAgc2l6ZTogJHtvcmllbnR9O1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cbiAgICAgIGRpdiB7XG4gICAgICAgICAgd2lkdGg6ICR7d2lkdGh9bW07XG4gICAgICAgICAgbWluLWhlaWdodDogJHtoZWlnaHR9bW07XG4gICAgICAgICAgZm9udC1zaXplOiAwO1xuICAgICAgfVxuICAgICAgQG1lZGlhIHByaW50IHtcbiAgICAgICAgICBodG1sLFxuICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICB3aWR0aDogJHt3aWR0aH1tbTtcbiAgICAgICAgICAgICAgaGVpZ2h0OiAke2hlaWdodH1tbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGl2IHtcbiAgICAgICAgICAgICAgd2lkdGg6IGluaXRpYWw7XG4gICAgICAgICAgICAgIG1pbi1oZWlnaHQ6IGluaXRpYWw7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgPC9zdHlsZT5cbiAgICA8L2hlYWQ+XG4gICAgPGJvZHk+PC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgICBgLnJlcGxhY2UoL1xcbi9nLCAnJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnJlcGxhY2UoLycvZywgJ1xcXFxcXCcnKTtcbn1cblxuXG50eXBlIFByaW50UGFwZXJPcHRpb25zID0ge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgb3JpZW50OiBPcmllbnRUeXBlO1xufTtcblxuLyoqXG4gKiDmiZPljbBET01cbiAqIEBwYXJhbSBwcmludE5vZGVzIFxuICogQHBhcmFtIG9wdGlvbnMgXG4gKiBAcmV0dXJucyBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50Tm9kZXMocHJpbnROb2RlczogQXJyYXk8Tm9kZT4sIG9wdGlvbnM6IFByaW50UGFwZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3QgcHJpbnRJRnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xuICAgIHByaW50SUZyYW1lLnNyYyA9ICdhYm91dDpibGFuayc7XG4gICAgcHJpbnRJRnJhbWUuc3R5bGUuYm9yZGVyV2lkdGggPSAnMCc7XG4gICAgcHJpbnRJRnJhbWUuc3R5bGUuaGVpZ2h0ID0gXCIwXCI7XG4gICAgcHJpbnRJRnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHByaW50SUZyYW1lKTtcbiAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudC5vcGVuKFwidGV4dC9odG1sXCIsIFwicHJpbnRlclwiKTtcbiAgICBpZiAoIXByaW50Tm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5omT5Y2w6IqC54K5Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJpbnRTaXplOiBQYWdlT3B0aW9ucyA9IG5ldyBQYWdlT3B0aW9ucyhvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCwgb3B0aW9ucy5vcmllbnQpO1xuICAgIGNvbnN0IGlmcmFtZUhUTUwgPSBjcmVhdGVQcmludFRlbXBsYXRlKHByaW50U2l6ZSk7XG4gICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQud3JpdGUoaWZyYW1lSFRNTCk7XG4gICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQuY2xvc2UoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW50Tm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHByaW50Tm9kZXNbaV07XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoaXRlbSk7XG4gICAgICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KVxuICAgIH1cbiAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudC5ib2R5LmZvY3VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LnByaW50KCk7XG4gICAgICAgIHByaW50SUZyYW1lLnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKHByaW50SUZyYW1lKTtcbiAgICB9LCAwKTtcbn1cblxuLyoqXG4gKiBjYW52YXPoioLngrnlr7zlh7rliLBQREZcbiAqIEBwYXJhbSBmaWxlTmFtZSBcbiAqIEBwYXJhbSBub2RlcyBcbiAqIEBwYXJhbSBvcHRpb25zIFxuICovXG4vLyBleHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2FudmFzVG9QREYoZmlsZU5hbWU6IHN0cmluZywgbm9kZXM6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50Piwgb3B0aW9uczogUHJpbnRQYXBlck9wdGlvbnMpOiB2b2lkIHtcbi8vICAgICBpZiAoIWZpbGVOYW1lKSB7XG4vLyAgICAgICAgIGZpbGVOYW1lID0gJ2RvY3VtZW50LnBkZic7XG4vLyAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9bXFwvXFxcXDoqP1wiPD58XS9nLCAnXycpO1xuLy8gICAgICAgICBpZiAoIWZpbGVOYW1lLmVuZHNXaXRoKCcucGRmJykpIHtcbi8vICAgICAgICAgICAgIGZpbGVOYW1lICs9ICcucGRmJztcbi8vICAgICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBjb25zdCBwZGYgPSBuZXcganNQREYob3B0aW9ucy5vcmllbnQsICdweCcsIFtvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodF0pO1xuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbi8vICAgICAgICAgY29uc3QgY2FudmFzID0gbm9kZXNbaV07XG4vLyAgICAgICAgIGNvbnN0IGltZ0RhdGEgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgMS4wKTtcbi8vICAgICAgICAgcGRmLmFkZEltYWdlKGltZ0RhdGEsICdKUEVHJywgMCwgMCwgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQpO1xuLy8gICAgICAgICBpZiAoaSA8IG5vZGVzLmxlbmd0aCAtIDEpIHtcbi8vICAgICAgICAgICAgIHBkZi5hZGRQYWdlKCk7XG4vLyAgICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgcGRmLnNhdmUoZmlsZU5hbWUpO1xuLy8gfSIsImltcG9ydCB7IFBhZGRpbmdQcm9wcyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudFByb3BzIH0gZnJvbSBcIi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRGb290ZXJFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50SGVhZGVyRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFRlbXBsYXRlIHtcbiAgICBzdGF0aWMgY3JlYXRlQTREb2MoKTogRG9jdW1lbnRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZG9jID0gbmV3IERvY3VtZW50RWxlbWVudCgpO1xuICAgICAgICBkb2MucHJvcHMgPSBuZXcgRG9jdW1lbnRQcm9wcygpO1xuICAgICAgICBkb2MucHJvcHMud2lkdGggPSAyMTA7XG4gICAgICAgIGRvYy5wcm9wcy5oZWlnaHQgPSAyOTc7XG4gICAgICAgIGRvYy5wcm9wcy5wYWRkaW5nID0gbmV3IFBhZGRpbmdQcm9wcygyNS40LCAyNS40LCAxOS4xLCAxOS4xKTtcbiAgICAgICAgZG9jLmFkZENoaWxkKG5ldyBEb2N1bWVudEhlYWRlckVsZW1lbnQoKSk7XG4gICAgICAgIGRvYy5hZGRDaGlsZChuZXcgRG9jdW1lbnRCb2R5RWxlbWVudCgpKTtcbiAgICAgICAgZG9jLmFkZENoaWxkKG5ldyBEb2N1bWVudEZvb3RlckVsZW1lbnQoKSk7XG4gICAgICAgIHJldHVybiBkb2M7XG4gICAgfVxufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEV2YWxGdW5jIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7XG5cbiAgICB9XG4gICAgc2NyaXB0c0Z1bmMhOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICog5a6e5L6L5YyW5Yqo5oCB6ISa5pysXG4gICAgICovXG4gICAgaW5pdFNjcmlwdHMoc2NyaXB0czogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveVNjcmlwdHMoKTtcbiAgICAgICAgaWYgKHNjcmlwdHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbihcImRvY0N0eFwiLCBzY3JpcHRzKVxuICAgICAgICAgICAgICAgIHRoaXMuc2NyaXB0c0Z1bmMgPSBmdW5jKHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwi6Ieq5a6a5LmJ5qCH5pys6Kej5p6Q6ZSZ6K+vXCIsIGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgZnVuYyA9IChkb2NDdHg6IERvY3VtZW50Q29udGV4dCkgPT4ge1xuICAgICAgICAvLyAgICAgY29uc3Qgc2V4RUxlID0gZG9jQ3R4LmdldENvbnRyb2xCeUlkKCdOcW9ZSScpXG4gICAgICAgIC8vICAgICBjb25zdCBkeUVsZSA9IGRvY0N0eC5nZXRDb250cm9sQnlJZCgnZ1R1QkknKTtcbiAgICAgICAgLy8gICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKHNleEVMZSAmJiBkeUVsZSkge1xuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBzZXhWYWx1ZSA9IHNleEVMZS5nZXRWYWx1ZSgpO1xuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBkeVZhbHVlID0gc2V4VmFsdWUgPT09ICcxJyA/ICfnlLfnmoTlkJcnIDogc2V4VmFsdWUgPT09ICcyJyA/ICflpbPnmoTlkJcnIDogJ+mavumBk+aYr+S6uuWmluWQlyc7XG4gICAgICAgIC8vICAgICAgICAgICAgIGR5RWxlLnNldFZhbHVlKGR5VmFsdWUpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH07XG4gICAgICAgIC8vIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6ZSA5q+B5Yqo5oCB6ISa5pys5a6e5L6LXG4gICAgICovXG4gICAgZGVzdHJveVNjcmlwdHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcmlwdHNGdW5jKSB7XG4gICAgICAgICAgICB0aGlzLnNjcmlwdHNGdW5jID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOinpuWPkeWKqOaAgeiEmuacrFxuICAgICAqL1xuICAgIGludm9rZWRTY3JpcHRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjcmlwdHNGdW5jPy4oKTtcbiAgICB9XG5cblxufVxuIiwiaW1wb3J0IHsgSUltYWdlTG9hZGVyLCBJbWFnZVNvdXJjZUl0ZW0gfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBJbWdMb2FkU3RhdHVzIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRG9jdW1lbnRJbWFnZXNCYXNlTG9hZGVyIGltcGxlbWVudHMgSUltYWdlTG9hZGVyIHtcbiAgICBpbWFnZXM6IEFycmF5PEltYWdlU291cmNlSXRlbT4gPSBbXTtcblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmltYWdlcy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGxvYWRJbWFnZShzcmM6IHN0cmluZywgb25DYWxsYmFjazogKHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBpZiAoIXNyYykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5bey57uP5a2Y5Zyo55qE6LWE5rqQ5LiN6ZyA6KaB6YeN5paw5Yqg6L29XG4gICAgICAgIGxldCBtYXRjaEl0ZW0gPSB0aGlzLmltYWdlcy5maW5kKGl0ZW0gPT4gaXRlbS5zcmMgPT09IHNyYyk7XG4gICAgICAgIGlmIChtYXRjaEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChtYXRjaEl0ZW0ubG9hZFN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgICAgIG1hdGNoSXRlbS5jYnMucHVzaChvbkNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb25DYWxsYmFjayhtYXRjaEl0ZW0ubG9hZFN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFzayA9IHRoaXMuY3JlYXRlUmVxdWVzdEltYWdlKHNyYyk7XG4gICAgICAgIGNvbnN0IGltZ0l0ZW06IEltYWdlU291cmNlSXRlbSA9IHtcbiAgICAgICAgICAgIGVsZTogdW5kZWZpbmVkIGFzIGFueSxcbiAgICAgICAgICAgIHNyYyxcbiAgICAgICAgICAgIGNiczogW29uQ2FsbGJhY2tdLFxuICAgICAgICAgICAgbG9hZFN0YXR1czogJ25vJyxcbiAgICAgICAgICAgIHRhc2tcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbWFnZXMucHVzaChpbWdJdGVtKVxuICAgICAgICAvLyBpZiAodGhpcy52aWV3T3B0aW9ucy5yZXNvdXJjZU1vZGUgPT09ICdpbW1lZGlhdGUnKSB7XG4gICAgICAgIC8vICAgICBlbGUub25sb2FkID0gKGUpID0+IHsgdGhpcy5pbnZva2VJbWdMb2FkKHNyYywgJ2NvbXBsZXRlZCcpOyB9O1xuICAgICAgICAvLyAgICAgZWxlLm9uZXJyb3IgPSAoZSkgPT4geyB0aGlzLmludm9rZUltZ0xvYWQoc3JjLCAnZXJyb3InKTsgfTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIGFic3RyYWN0IGNyZWF0ZVJlcXVlc3RJbWFnZSh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgICBpbnZva2VJbWdMb2FkKHNyYzogc3RyaW5nLCBzdGF0dXM6IEltZ0xvYWRTdGF0dXMsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbWcgPSB0aGlzLmltYWdlcy5maW5kKGl0ZW0gPT4gaXRlbS5zcmMgPT09IHNyYyk7XG4gICAgICAgIGlmIChpbWcpIHtcbiAgICAgICAgICAgIGltZy5sb2FkU3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgaW1nLmNicy5mb3JFYWNoKGNiID0+IGNiKHN0YXR1cykpO1xuICAgICAgICAgICAgaW1nLmVsZSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRMb2FkVGFza3MoKTogQXJyYXk8UHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXMubWFwKGl0ZW0gPT4gaXRlbS50YXNrKTtcbiAgICB9XG5cblxuICAgIGdldEltYWdlKHNyYzogc3RyaW5nKTogSFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGltZyA9IHRoaXMuaW1hZ2VzLmZpbmQoaXRlbSA9PiBpdGVtLnNyYyA9PT0gc3JjKTtcbiAgICAgICAgcmV0dXJuIGltZz8uZWxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreWbvueJh+aYr+WQpumDveW3sue7j+WKoOi9veWujOavlVxuICAgICAqIOeUqOS6juaJk+WNsOaXtuWIpOaWre+8jOWmguaenOW9k+WJjeWbvueJh+ayoeacieWKoOi9veWujOavleWwseaJk+WNsO+8jOWbvueJh+aYr+aJk+WNsOS4jeWHuuadpVxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGltYWdlc0xvYWRDb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlcy5ldmVyeShpdGVtID0+IFsnY29tcGxldGVkJywgJ2Vycm9yJ10uaW5jbHVkZXMoaXRlbS5sb2FkU3RhdHVzKSlcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEltYWdlc0xvYWRlciBleHRlbmRzIERvY3VtZW50SW1hZ2VzQmFzZUxvYWRlciB7XG4gICAgY3JlYXRlUmVxdWVzdEltYWdlKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBlbGUuc3JjID0gdXJsO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHIsIGkpID0+IHtcbiAgICAgICAgICAgIGVsZS5vbmxvYWQgPSAoZSkgPT4geyB0aGlzLmludm9rZUltZ0xvYWQodXJsLCAnY29tcGxldGVkJywgZWxlKTsgcigpOyB9O1xuICAgICAgICAgICAgZWxlLm9uZXJyb3IgPSAoZSkgPT4geyB0aGlzLmludm9rZUltZ0xvYWQodXJsLCAnZXJyb3InLCBlbGUpOyByKCk7IH07XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG59IiwiaW1wb3J0IHtEb2N1bWVudEV2YWxGdW5jfSBmcm9tIFwiLi9kb2N1bWVudC1ldmFsLWZ1bmNcIjtcbmltcG9ydCB7RG9jdW1lbnRJbWFnZXNMb2FkZXJ9IGZyb20gXCIuL2RvY3VtZW50LWltYWdlcy1sb2FkZXJcIjtcbmltcG9ydCB7U2VsZWN0aW9uU3RhdGV9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtcbiAgICBCcmFuY2hFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEhhbmRsZXIsXG4gICAgZWxlbWVudFR5cGVFdmVudEhhbmRsZXIsXG4gICAgSW1nTG9hZFN0YXR1cyxcbiAgICBNb2RpZnlGbGFnLFxuICAgIFJlY3QsXG4gICAgUmVmcmVzaFR5cGUsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudEV2ZW50LCBFdmVudFR5cGVzfSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlbWVudFZhbHVlU3RydWN0LCBFbGVtZW50U2VyaWFsaXplfSBmcm9tIFwiLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtcbiAgICBEYXRhRWxlbWVudENoZWNrLFxuICAgIERhdGFFbGVtZW50SW5saW5lR3JvdXAsXG4gICAgRGF0YUVsZW1lbnRMZWFmLFxuICAgIERvY3VtZW50Qm9keVBhcnRFbGVtZW50LFxuICAgIERvY3VtZW50RWxlbWVudCxcbiAgICBUcmFja1J1bkVsZW1lbnQsXG4gICAgVHJhY2tSdW5UeXBlRW51bSxcbiAgICB2YWxpZGF0ZURhdGFFbGVcbn0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0RvY3VtZW50Q2hhbmdlfSBmcm9tIFwiLi9kb2N1bWVudC1jaGFuZ2VcIjtcbmltcG9ydCB7Q29tbW9uVXRpbH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcblxuaW50ZXJmYWNlIFJlZ2lzdGVyVHlwZUhhbmRsZXJQcm9wczxUIGV4dGVuZHMgRWxlbWVudD4ge1xuICAgIGVsZW1lbnRUeXBlOiB7IG5ldyguLi5hcmdzOiBhbnkpOiBUIH0sXG4gICAgZXZlbnROYW1lOiBFdmVudFR5cGVzLFxuICAgIGhhbmRsZXI6IDxFIGV4dGVuZHMgRWxlbWVudEV2ZW50PihlOiBFKSA9PiB2b2lkLFxuICAgIHVzZUNhcHR1cmU6IGJvb2xlYW5cbn1cbi8qKlxuICog5b2T5YmN5omT5byA55qE5paH5qGj55qE5LiK5LiL5paH5L+h5oGv77yM5b2T5YmN5paH5qGj5omA5pyJ55qE5bGe5oCn6K6+572u6YO95pq06Zyy5Zyo5LiK5LiL5paH5LitXG4gKi9cbmV4cG9ydCBjbGFzcyBFZGl0b3JDb250ZXh0IHtcbiAgICBpc0RpcnR5OiBib29sZWFuID0gZmFsc2U7XG4gICAgY3Vyc29yUmVjdCE6IFJlY3QgfCBudWxsO1xuICAgIHByaXZhdGUgX2RvY3VtZW50ITogRG9jdW1lbnRFbGVtZW50O1xuICAgIC8v5paH5qGj5Yi35paw55qE6K6i6ZiF5LqL5Lu2XG4gICAgLy9yZWZTdWIhOiBTdWJzY3JpcHRpb247XG4gICAgc3luY1JlZnJlc2ghOiAoKSA9PiB2b2lkO1xuICAgIGltYWdlTG9hZGVyOiBJSW1hZ2VMb2FkZXI7XG4gICAgZHluYW1pY0Z1bmM6IERvY3VtZW50RXZhbEZ1bmM7XG4gICAgZG9jQ2hhbmdlITogRG9jdW1lbnRDaGFuZ2U7XG4gICAgY2xlYXJQcmV2RG9jQ2IhOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuICAgIC8v57uY5Yi257uT5p2f5LmL5ZCO5Zue6LCD5Ye95pWwXG4gICAgcGFpbnRlZENhbGxiYWNrITogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlLCBwdWJsaWMgcmVhZG9ubHkgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZHluYW1pY0Z1bmMgPSBuZXcgRG9jdW1lbnRFdmFsRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5pbWFnZUxvYWRlciA9IG5ldyBEb2N1bWVudEltYWdlc0xvYWRlcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLm9uQ2hhbmdlZEV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNSZWZyZXNoPy4oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBhaW50ZWRDYWxsYmFjayhjYjogKCgpID0+IHZvaWQpIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnBhaW50ZWRDYWxsYmFjayA9IGNiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZG9jdW1lbnQoKTogRG9jdW1lbnRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZG9jdW1lbnQodmFsdWU6IERvY3VtZW50RWxlbWVudCkge1xuICAgICAgICB0aGlzLmNsZWFyUHJldkRvY0NiPy4oKTtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbml0U2NyaXB0cygpO1xuICAgICAgICAvLyB0aGlzLnJlZlN1YiA9IHRoaXMuX2RvY3VtZW50LnJlZnJlc2hTdWJqZWN0LnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAvLyAgICAgZGF0YSA9IGRhdGEgPz8gJ2NvbnRlbnQnO1xuICAgICAgICAvLyAgICAgdGhpcy5pc0RpcnR5ID0gdGhpcy5pc0RpcnR5IHx8IGRhdGEgPT09ICdjb250ZW50JztcbiAgICAgICAgLy8gICAgIHRoaXMuc3luY1JlZnJlc2g/LihkYXRhKTtcbiAgICAgICAgLy8gfSk7XG4gICAgICAgIGNvbnN0IGRvY1JlZnJlc2hTdWIgPSB0aGlzLl9kb2N1bWVudC5yZWZyZXNoU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zeW5jUmVmcmVzaD8uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkb2NDaGFuZ2VkU3ViID0gdGhpcy5fZG9jdW1lbnQub25DaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNSZWZyZXNoPy4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3luY1JlZnJlc2goKTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZEb2NDYiA9ICgpID0+IHtcbiAgICAgICAgICAgIGRvY1JlZnJlc2hTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGRvY0NoYW5nZWRTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kb2N1bWVudCkge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZT8ucmVuZGVyQ29udGFpbmVyPy5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2IgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZUxvYWRlci5jbGVhcigpOztcbiAgICAgICAgdGhpcy5keW5hbWljRnVuYy5kZXN0cm95U2NyaXB0cygpO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdEN0eCgpOiBEb2N1bWVudENvbnRleHQge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50Q29udGV4dCh0aGlzLl9kb2N1bWVudCwgdGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEN0eChlbGU6IEVsZW1lbnQpOiBEb2N1bWVudENvbnRleHQge1xuICAgICAgICBjb25zdCBwYXJlbnRDdHggPSBFbGVtZW50VXRpbC5nZXRQYXJlbnQoZWxlLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50RWxlbWVudCB8fCBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQpIGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnRDb250ZXh0KHBhcmVudEN0eCwgdGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5b2T5YmN6YCJ5Yy677yM6L+U5Zue5omA5Zyo55qE5LiK5LiL5paH5YWD57Sg77yM6L+U5Zue57G75Z6L5Li6RG9jdW1lbnRFbGVtZW50fERvY3VtZW50Qm9keVBhcnRFbGVtZW50XG4gICAgICovXG4gICAgZ2V0Q3VycmVudEVsZUN0eCgpOiBCcmFuY2hFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldFBhcmVudChzdGFydENvbnRyb2wsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRFbGVtZW50IHx8IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCkgYXMgQnJhbmNoRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXRDdHgoZWxlOiBCcmFuY2hFbGVtZW50KTogRG9jdW1lbnRDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudENvbnRleHQoZWxlLCB0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICB9XG5cblxuICAgIHJlZ2lzdGVyVHlwZUhhbmRsZXJzPFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudCwgRiBleHRlbmRzIEVsZW1lbnRFdmVudCA9IEVsZW1lbnRFdmVudD4oZWxlbWVudFR5cGU6IGFueSwgZXZlbnROYW1lOiBFdmVudFR5cGVzLCBoYW5kbGVyOiBFbGVtZW50SGFuZGxlcjxGPiwgdXNlQ2FwdHVyZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUV2ZW50SGFuZGxlci5maW5kKGl0ZW0gPT4gaXRlbS5jdHggPT09IHRoaXMgJiYgaXRlbS5lbGVtZW50VHlwZSA9PT0gZWxlbWVudFR5cGUgJiYgaXRlbS5ldmVudE5hbWUgPT09IGV2ZW50TmFtZSAmJiBpdGVtLnVzZUNhcHR1cmUgPT09IHVzZUNhcHR1cmUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGVtcCA9IGhhbmRsZXIgYXMgRWxlbWVudEhhbmRsZXI8RWxlbWVudEV2ZW50PjtcbiAgICAgICAgZWxlbWVudFR5cGVFdmVudEhhbmRsZXIucHVzaCh7XG4gICAgICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgIGhhbmRsZXI6IHRlbXAsXG4gICAgICAgICAgICB1c2VDYXB0dXJlLFxuICAgICAgICAgICAgY3R4OnRoaXNcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2I/LigpO1xuICAgICAgICAvL3RoaXMuZWxlX3R5cGVzX2hhbmRsZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuaW1hZ2VMb2FkZXIuY2xlYXIoKTs7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5o2i5Yiw6KGM5omT5Y2w5qih5byPXG4gICAgICovXG4gICAgc3dpdGNoVGV4dGxpbmVNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50LnZpZXdPcHRpb25zLnRleHRSb3dMaW5lTW9kZSA9ICF0aGlzLmRvY3VtZW50LnZpZXdPcHRpb25zLnRleHRSb3dMaW5lTW9kZTtcbiAgICAgICAgdGhpcy5zeW5jUmVmcmVzaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWunuS+i+WMluWKqOaAgeiEmuacrFxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdFNjcmlwdHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHluYW1pY0Z1bmMuaW5pdFNjcmlwdHModGhpcy5kb2N1bWVudC5wcm9wcy5zY3JpcHRzKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOabv+aNouaVsOaNruWFg1xuICAgICAqL1xuICAgIHJlcGxhY2VEYXRhRWxlbWVudChvbGREYXRhRWxlbWVudDogRGF0YUVsZW1lbnRMZWFmIHwgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgbmV3RWxlbWVudDogRGF0YUVsZW1lbnRMZWFmIHwgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIC8v5riF6Zmk5YWJ5qCHXG4gICAgICAgIHNzLmNsZWFyKCk7XG4gICAgICAgIC8v5omn6KGM5Yi35pawXG4gICAgICAgIC8v5o+S5YWl5paw5a+56LGh5Yiw5pen5a+56LGh5LmL5YmNXG4gICAgICAgIG9sZERhdGFFbGVtZW50LnBhcmVudC5hZGRDaGlsZChuZXdFbGVtZW50LCBvbGREYXRhRWxlbWVudC5nZXRJbmRleCgpKTtcbiAgICAgICAgLy/liKDpmaTml6foioLngrlcbiAgICAgICAgb2xkRGF0YUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHJlZnJlc2hUeXBlKCk6IFJlZnJlc2hUeXBlIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk5vbmUgPyAnYXBwZWFyYW5jZScgOiAnY29udGVudCdcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VTb3VyY2VJdGVtIHtcbiAgICBzcmM6IHN0cmluZyxcbiAgICB0YXNrOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNiczogQXJyYXk8KHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4gdm9pZD47XG4gICAgZWxlOiBIVE1MSW1hZ2VFbGVtZW50LFxuICAgIGxvYWRTdGF0dXM6IEltZ0xvYWRTdGF0dXNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2VMb2FkZXIge1xuICAgIGNsZWFyKCk6IHZvaWQ7XG4gICAgbG9hZEltYWdlKHNyYzogc3RyaW5nLCBvbkNhbGxiYWNrOiAoc3RhdHVzOiBJbWdMb2FkU3RhdHVzKSA9PiB2b2lkKTogdm9pZDtcbiAgICBnZXRJbWFnZShzcmM6IHN0cmluZyk6IEhUTUxJbWFnZUVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaW1hZ2VzTG9hZENvbXBsZXRlZCgpOiBib29sZWFuO1xuICAgIGdldExvYWRUYXNrcygpOiBBcnJheTxQcm9taXNlPHZvaWQ+Pjtcbn1cblxuLyoqXG4gKiDmlofmoaPkuIrkuIvmlodcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Q29udGV4dCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjdHg6IEJyYW5jaEVsZW1lbnQsIHByaXZhdGUgc3M6IFNlbGVjdGlvblN0YXRlKSB7IH1cblxuICAgIGdldENvbnRyb2xJRExpc3QoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVMaXN0ID0gPHVua25vd24+dGhpcy5jdHgudHJlZUZpbHRlcihpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSkgYXMgQXJyYXk8eyBwcm9wczogeyBpZDogc3RyaW5nIH0gfT47XG4gICAgICAgIHJldHVybiBkYXRhRWxlTGlzdC5tYXAoaXRlbSA9PiBpdGVtLnByb3BzLmlkKTtcbiAgICB9XG5cbiAgICBnZXRDb250cm9sSW5zdGFuY2VMaXN0KCk6IEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaWx0ZXIoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkpIGFzIEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY+O1xuICAgIH1cblxuICAgIGdldENvbnRyb2xCeUlkKGlkOiBzdHJpbmcpOiBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaW5kKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pICYmICg8YW55Pml0ZW0pWydwcm9wcyddWydpZCddID09PSBpZCkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZjtcbiAgICB9XG5cbiAgICBnZXRDb250cm9sQnlOYW1lKG5hbWU6IHN0cmluZyk6IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWYge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbmQoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkgJiYgKDxhbnk+aXRlbSlbJ3Byb3BzJ11bJ25hbWUnXSA9PT0gbmFtZSkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIOiOt+WPluaVsOaNruWFg+WAvOmbhuWQiFxuICAgICovXG4gICAgZ2V0RGF0YUVsZW1lbnRWYWx1ZXMoKTogQXJyYXk8RGF0YUVsZW1lbnRWYWx1ZVN0cnVjdD4ge1xuICAgICAgICBjb25zdCBzdHJ1Y3RMaXN0ID0gdGhpcy5nZXREYXRhRWxlbWVudE1vZGVsTGlzdCgpO1xuICAgICAgICByZXR1cm4gc3RydWN0TGlzdC5tYXA8RGF0YUVsZW1lbnRWYWx1ZVN0cnVjdD4oaXRlbSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogaXRlbS5nZXRWYWx1ZSgpXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmlbDmja7lhYPnu5PmnoTku6Xlj4pnZXRcXHNldOmXreWMheiwg+eUqOWHveaVsFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGdldERhdGFFbGVtZW50TW9kZWxMaXN0KCk6IEFycmF5PERhdGFDaGVja0VsZU1vZGVsIHwgRGF0YUlucHV0RWxlTW9kZWwgfCBEYXRhTGVhZkVsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVMaXN0ID0gdGhpcy5jdHgudHJlZUZpbHRlcihpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZj47XG5cbiAgICAgICAgY29uc3QgZGF0YUlubGluZUdyb3VwcyA9IGRhdGFFbGVMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSBhcyBBcnJheTxEYXRhRWxlbWVudElubGluZUdyb3VwPjtcbiAgICAgICAgY29uc3QgZGF0YUxlYWZzID0gZGF0YUVsZUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50TGVhZikgYXMgQXJyYXk8RGF0YUVsZW1lbnRMZWFmPjtcblxuICAgICAgICAvL+WkjemAieahhuaVsOaNruWFg1xuICAgICAgICBjb25zdCBkYXRhQ2hlY2tMaXN0ID0gZGF0YUxlYWZzLmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudENoZWNrKSBhcyBBcnJheTxEYXRhRWxlbWVudENoZWNrPjtcbiAgICAgICAgLy/pmaTlpI3pgInmoYbkuYvlpJbnmoRMZWFmRGF0YUVsZW1lbnRcbiAgICAgICAgY29uc3QgZGF0YU90aGVyTGVhZlZhbHVlcyA9IENvbW1vblV0aWwucmVtb3ZlVW5pb25TZXQoZGF0YUxlYWZzLCBkYXRhQ2hlY2tMaXN0KS5tYXA8RGF0YUxlYWZFbGVNb2RlbD4oaXRlbSA9PiAoXG4gICAgICAgICAgICB7IGlkOiBpdGVtLnByb3BzLmlkIGFzIHN0cmluZywgbmFtZTogaXRlbS5wcm9wcy5uYW1lIGFzIHN0cmluZywgZmllbGROYW1lOiBpdGVtLnByb3BzLmZpZWxkIGFzIHN0cmluZywgaXRlbSwgZ2V0VmFsdWU6ICgpID0+IHsgcmV0dXJuIGl0ZW0uZ2V0VmFsdWUoKSB9LCBzZXRWYWx1ZTogKHZhbCkgPT4geyBpdGVtLnNldFZhbHVlKHZhbCkgfSB9KSk7XG4gICAgICAgIGNvbnN0IGRhdGFJbmxpbmVTdHJ1Y3RMaXN0ID0gZGF0YUlubGluZUdyb3Vwcy5tYXA8RGF0YUlucHV0RWxlTW9kZWw+KGl0ZW0gPT4gKFxuICAgICAgICAgICAgeyBpZDogaXRlbS5wcm9wcy5pZCwgbmFtZTogaXRlbS5wcm9wcy5uYW1lLCBmaWVsZE5hbWU6IGl0ZW0ucHJvcHMuZmllbGROYW1lLCBpdGVtLCBnZXRWYWx1ZTogKCkgPT4geyByZXR1cm4gaXRlbS5nZXRWYWx1ZSgpIH0sIHNldFZhbHVlOiAodmFsKSA9PiB7IGl0ZW0uc2V0VmFsdWUodmFsKSB9IH0pKTtcbiAgICAgICAgLy/lpI3pgInmoYbliJfooahcbiAgICAgICAgY29uc3QgZGF0YUNoZWNrU3RydWN0TGlzdCA9IHRoaXMuZ2V0RGF0YUNoZWNrTW9kZWxMaXN0KGRhdGFDaGVja0xpc3QpO1xuICAgICAgICByZXR1cm4gWy4uLmRhdGFJbmxpbmVTdHJ1Y3RMaXN0LCAuLi5kYXRhQ2hlY2tTdHJ1Y3RMaXN0LCAuLi5kYXRhT3RoZXJMZWFmVmFsdWVzXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blpI3pgInmoYbmlbDmja7lhYPnu5PmnoTliJfooahcbiAgICAgKiBAcGFyYW0gZGF0YUNoZWNrTGlzdCBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldERhdGFDaGVja01vZGVsTGlzdChkYXRhQ2hlY2tMaXN0OiBBcnJheTxEYXRhRWxlbWVudENoZWNrPik6IEFycmF5PERhdGFDaGVja0VsZU1vZGVsIHwgRGF0YUxlYWZFbGVNb2RlbD4ge1xuICAgICAgICAvL+S4jeWtmOWcqGdyb3VwTmFtZeeahOWkjemAieahhlxuICAgICAgICBjb25zdCBzaW5nbGVDaGVja0xpc3QgPSBkYXRhQ2hlY2tMaXN0LmZpbHRlcihpdGVtID0+ICFpdGVtLnByb3BzLmdyb3VwTmFtZSk7XG4gICAgICAgIC8v5a2Y5ZyoZ3JvdXBOYW1l55qE5aSN6YCJ5qGGXG4gICAgICAgIGNvbnN0IGdyb3VwTmFtZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoZGF0YUNoZWNrTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmdyb3VwTmFtZSkubWFwKGl0ZW0gPT4gaXRlbS5wcm9wcy5ncm91cE5hbWUpKSk7XG4gICAgICAgIGNvbnN0IGdyb3VwQ2hlY2tMaXN0VmFsdWVzID0gZ3JvdXBOYW1lcy5tYXA8RGF0YUNoZWNrRWxlTW9kZWw+KChncm91cE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2hlY2tJdGVtcyA9IGRhdGFDaGVja0xpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBncm91cE5hbWUsXG4gICAgICAgICAgICAgICAgbmFtZTogZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLm5hbWUsXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBncm91cENoZWNrSXRlbXNbMF0ucHJvcHMuZmllbGROYW1lLFxuICAgICAgICAgICAgICAgIG11bHRpU2VsZWN0OiBncm91cENoZWNrSXRlbXNbMF0ucHJvcHMubXVsdGlTZWxlY3QsXG4gICAgICAgICAgICAgICAgaXRlbTogZ3JvdXBDaGVja0l0ZW1zLFxuICAgICAgICAgICAgICAgIGdldFZhbHVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGVja2VkVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZFZhbHVlID0gZ3JvdXBDaGVja0l0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZCkubWFwKGl0ZW0gPT4gaXRlbS5nZXRWYWx1ZSgpICsgJycpLmpvaW4oJzsnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRTaW5nbGVJdGVtID0gZ3JvdXBDaGVja0l0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZFNpbmdsZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkVmFsdWUgPSBjaGVja2VkU2luZ2xlSXRlbS5wcm9wcy5jaGVja2VkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVja2VkVmFsdWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKHZhbDogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvL+S4um51bGzml7ZcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDaGVja0l0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWQgPSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsSXRlbXMgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC5zcGxpdCgnOycpIDogdmFsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENoZWNrSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnByb3BzLmNoZWNrZWQgPSB2YWxJdGVtcy5pbmRleE9mKGl0ZW0ucHJvcHMuY2hlY2tlZFZhbHVlICsgJycpID49IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ2hlY2tJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvcHMuY2hlY2tlZCA9IGl0ZW0ucHJvcHMuY2hlY2tlZFZhbHVlID09PSB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHNpbmdsZUNoZWNrTGlzdFZhbHVlcyA9IHNpbmdsZUNoZWNrTGlzdC5tYXA8RGF0YUxlYWZFbGVNb2RlbD4oaXRlbSA9PiAoeyBpZDogaXRlbS5wcm9wcy5pZCwgbmFtZTogaXRlbS5wcm9wcy5uYW1lLCBmaWVsZE5hbWU6IGl0ZW0ucHJvcHMuZmllbGROYW1lLCBpdGVtLCBnZXRWYWx1ZTogKCkgPT4geyByZXR1cm4gaXRlbS5nZXRWYWx1ZSgpIH0sIHNldFZhbHVlOiAodmFsKSA9PiB7IGl0ZW0uc2V0VmFsdWUodmFsKSB9IH0pKTtcbiAgICAgICAgcmV0dXJuIFsuLi5zaW5nbGVDaGVja0xpc3RWYWx1ZXMsIC4uLmdyb3VwQ2hlY2tMaXN0VmFsdWVzXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnlZnnl5XlnZflhYPntKDliJfooahcbiAgICAgKi9cbiAgICBnZXRUcmFja0VsZW1lbnRzKCk6IEFycmF5PFRyYWNrUnVuRWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQpIGFzIEFycmF5PFRyYWNrUnVuRWxlbWVudD47XG4gICAgfVxuXG4gICAgZ2V0VHJhY2tFbG1lZW50QnlJZChpZDogc3RyaW5nKTogVHJhY2tSdW5FbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC50cmVlRmluZChpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQgJiYgaXRlbS5wcm9wcy5pZCA9PT0gaWQpIGFzIFRyYWNrUnVuRWxlbWVudCB8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W55WZ55eV5Z2X5YaF5pWw5o2uXG4gICAgICovXG4gICAgZ2V0VHJhY2tzRGF0YSgpOiBBcnJheTxUcmFja0Jsb2NrRGF0YT4ge1xuICAgICAgICBjb25zdCB0cmFja0VsZW1lbnRzID0gdGhpcy5nZXRUcmFja0VsZW1lbnRzKCk7XG4gICAgICAgIHJldHVybiB0cmFja0VsZW1lbnRzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrUnVuID0gaXRlbSBhcyBUcmFja1J1bkVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodHJhY2tSdW4sIHsgYWxsOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAvL+eUqOaIt2lkXG4gICAgICAgICAgICAgICAgdXNlcklkOiB0cmFja1J1bi5wcm9wcy51c2VySWQsXG4gICAgICAgICAgICAgICAgLy/nlKjmiLflkI3np7BcbiAgICAgICAgICAgICAgICB1c2VyTmFtZTogdHJhY2tSdW4ucHJvcHMudXNlck5hbWUsXG4gICAgICAgICAgICAgICAgLy/ml6XmnJ9cbiAgICAgICAgICAgICAgICBkYXRlOiB0cmFja1J1bi5wcm9wcy5kYXRlLFxuICAgICAgICAgICAgICAgIC8v57G75Z6L77yMaW5zLXJ1bu+8muaPkuWFpe+8jGRlbC1ydW7vvJrliKDpmaRcbiAgICAgICAgICAgICAgICB0eXBlOiB0cmFja1J1bi50eXBlIGFzIFRyYWNrUnVuVHlwZUVudW0sXG4gICAgICAgICAgICAgICAgLy/nlZnnl5XlnZdpZFxuICAgICAgICAgICAgICAgIGlkOiB0cmFja1J1bi5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICAvL+WGheWuuVxuICAgICAgICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0Q29udHJvbFZhbHVlKGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IHRoaXMuZ2V0Q29udHJvbEJ5SWQoaWQpO1xuICAgICAgICBpZiAoZGF0YUVsZSkge1xuICAgICAgICAgICAgZGF0YUVsZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHNldENvbnRyb2xWYWx1ZUJ5TmFtZShuYW1lOiBzdHJpbmcsIHZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSB0aGlzLmdldENvbnRyb2xCeU5hbWUobmFtZSlcbiAgICAgICAgZGF0YUVsZS5zZXRWYWx1ZSh2YWwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5aSN6YCJ5qGG6YCJ5Lit55qE5YC8XG4gICAgICovXG4gICAgZ2V0Q2hlY2tCb3hWYWx1ZXMoZ3JvdXBOYW1lOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgY2ticyA9IHRoaXMuZ2V0Q2hlY2tCb3hMaXN0KGdyb3VwTmFtZSk7XG4gICAgICAgIHJldHVybiBja2JzLmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZCkubWFwKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkVmFsdWUpO1xuICAgIH1cblxuICAgIGdldENoZWNrQm94TGlzdChncm91cE5hbWU6IHN0cmluZyk6IEFycmF5PERhdGFFbGVtZW50Q2hlY2s+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udHJvbEluc3RhbmNlTGlzdCgpLmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudENoZWNrICYmIGl0ZW0ucHJvcHMuZ3JvdXBOYW1lID09PSBncm91cE5hbWUpIGFzIEFycmF5PERhdGFFbGVtZW50Q2hlY2s+O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeS4iuS4i+aWh+aJp+ihjOm7mOiupOe7keWumlxuICAgICAqIEBwYXJhbSBkYXRhIFxuICAgICAqL1xuICAgIGJpbmREYXRhVmFsdWVzKGRhdGE6IHN0cmluZyB8IE9iamVjdCB8IEFycmF5PHsga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkgfT4sIHByZWRpY2F0ZUtleTogJ2lkJyB8ICduYW1lJyB8ICdmaWVsZE5hbWUnID0gJ2ZpZWxkTmFtZScpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zcy5jbGVhcigpO1xuICAgICAgICBsZXQgYmluZERhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGRhdGEpIGFzIE9iamVjdCA6IGRhdGE7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJpbmREYXRhKSkge1xuICAgICAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgICAgICBiaW5kRGF0YS5mb3JFYWNoKGl0ZW0gPT4geyBvYmpbaXRlbS5rZXldID0gaXRlbS52YWx1ZSB9KTtcbiAgICAgICAgICAgIGJpbmREYXRhID0gb2JqO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFMaXN0ID0gdGhpcy5nZXREYXRhRWxlbWVudE1vZGVsTGlzdCgpO1xuICAgICAgICBkYXRhTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JqS2V5ID0gaXRlbVtwcmVkaWNhdGVLZXldO1xuICAgICAgICAgICAgaWYgKGJpbmREYXRhLmhhc093blByb3BlcnR5KG9iaktleSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgYmluZFZhbHVlID0gYmluZERhdGFbb2JqS2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJpbmRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlID0gYmluZFZhbHVlLnJlcGxhY2UoL1tcXG5cXHJdL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRWYWx1ZShiaW5kRGF0YVtvYmpLZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5cbmludGVyZmFjZSBEYXRhRWxlQmFzZU1vZGVsIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmaWVsZE5hbWU6IHN0cmluZztcbiAgICBnZXRWYWx1ZTogKCkgPT4gYW55O1xuICAgIHNldFZhbHVlOiAodmFsOiBhbnkpID0+IHZvaWQ7XG59XG5pbnRlcmZhY2UgRGF0YUNoZWNrRWxlTW9kZWwgZXh0ZW5kcyBEYXRhRWxlQmFzZU1vZGVsIHtcbiAgICBpdGVtOiBBcnJheTxEYXRhRWxlbWVudENoZWNrPjtcbiAgICBtdWx0aVNlbGVjdDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIERhdGFJbnB1dEVsZU1vZGVsIGV4dGVuZHMgRGF0YUVsZUJhc2VNb2RlbCB7XG4gICAgaXRlbTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cFxufVxuXG5pbnRlcmZhY2UgRGF0YUxlYWZFbGVNb2RlbCBleHRlbmRzIERhdGFFbGVCYXNlTW9kZWwge1xuICAgIGl0ZW06IERhdGFFbGVtZW50TGVhZjtcbn1cblxuLyoqXG4gKiDnlZnnl5XlnZfnu5PmnoTljJbmlbDmja5cbiAqL1xuaW50ZXJmYWNlIFRyYWNrQmxvY2tEYXRhIHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICB1c2VyTmFtZTogc3RyaW5nO1xuICAgIGRhdGU6IHN0cmluZztcbiAgICB0eXBlOiBUcmFja1J1blR5cGVFbnVtLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nO1xufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgQ29tbUNvbnRlbnRCYXNlRWxlbWVudCwgQ29tbUNvbnRlbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgUmFuZ2VVdGlsIH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuXG4vKipcbiAqIOWkhOeQhuaWh+aho+aJueazqFxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb21tZW50IHtcbiAgICBjb21tTWFya0xpc3Q6IEFycmF5PENvbW1lbnRFbGVtZW50PiA9IFtdO1xuICAgIGNvbW1Db250ZW50TGlzdDogQXJyYXk8Q29tbUNvbnRlbnRCYXNlRWxlbWVudD4gPSBbXTtcbiAgICBpc0RpcnR5OiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7IH1cblxuICAgIC8qKlxuICAgICog6K+75Y+W5a6h6ZiF5qCH6K6w56ym5Y+3XG4gICAgKi9cbiAgICByZWFkQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0RpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tbUxpc3QgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnY29tbScpIGFzIEFycmF5PENvbW1lbnRFbGVtZW50PjtcbiAgICAgICAgY29uc3Qgc3RhcnRDb21tTGlzdCA9IGNvbW1MaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMubWFya1R5cGUgPT09IFwic3RhcnRcIik7XG4gICAgICAgIGNvbnN0IGVuZENvbW1MaXN0ID0gY29tbUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5tYXJrVHlwZSA9PT0gXCJlbmRcIik7XG4gICAgICAgIGNvbnN0IGNvbW1NYXBzID0gc3RhcnRDb21tTGlzdC5tYXAoc3RhcnRJdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IGVuZENvbW1MaXN0LmZpbmQoZW5kSXRlbSA9PiBlbmRJdGVtLnByb3BzLmlkID09PSBzdGFydEl0ZW0ucHJvcHMuaWQpO1xuICAgICAgICAgICAgaWYgKCFlbmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWMuemFjeeahOe7k+adn+WuoemYheespuWPtycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogc3RhcnRJdGVtLCBlbmQgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBjb21tQ29udGVudExpc3Q6IEFycmF5PENvbW1Db250ZW50QmFzZUVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb2NDdHguZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tQ29udGVudCA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudC5nZXRDaGlsZChpKSBhcyBDb21tQ29udGVudEJhc2VFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY29tbU1hcCA9IGNvbW1NYXBzLmZpbmQoaXRlbSA9PiBpdGVtLnN0YXJ0LnByb3BzLmlkID09PSBjb21tQ29udGVudC5wcm9wcy5pZCk7XG4gICAgICAgICAgICBpZiAoIWNvbW1NYXApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWuoemYheWGheWuueWvueW6lOeahOWuoemYheespuWPtycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tbUNvbnRlbnQuc3RhcnRNYXJrID0gY29tbU1hcC5zdGFydDtcbiAgICAgICAgICAgIGNvbW1Db250ZW50LmVuZE1hcmsgPSBjb21tTWFwLmVuZDtcbiAgICAgICAgICAgIGNvbW1Db250ZW50TGlzdC5wdXNoKGNvbW1Db250ZW50KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tbU1hcmtMaXN0ID0gY29tbUxpc3Q7XG4gICAgICAgIHRoaXMuY29tbUNvbnRlbnRMaXN0ID0gY29tbUNvbnRlbnRMaXN0O1xuICAgICAgICB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy5zaG93UmV2aWV3V2luZG93ID0gdGhpcy5jb21tQ29udGVudExpc3QubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omn6KGM5Yig6Zmk5YmN77yM6ZyA6KaB5pu05paw5om55rOo6IqC54K55L2N572uXG4gICAgICovXG4gICAgdXBkYXRlQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUgfSA9IHRoaXMuZG9jQ3R4O1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZCwgc2VsZWN0ZWRSYW5nZSB9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nRWxlID0gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgICAgICAvL+e0p+aMqOedgOeahOWFg+e0oFxuICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nRWxlIGluc3RhbmNlb2YgQ29tbWVudEVsZW1lbnQgJiYgbmV4dFNpYmxpbmdFbGUucHJvcHMubWFya1R5cGUgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoID09PSBzdGFydE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KG5leHRTaWJsaW5nRWxlLnByb3BzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudChuZXh0U2libGluZ0VsZS5wcm9wcy5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy/lpoLmnpzlvIDlp4vmibnms6jooqvpgInkuK3vvIzliJnpnIDopoHnp7vliqjlvIDlp4vmibnms6jlhYPntKDliLDpgInljLrmnKvlsL5cbiAgICAgICAgICAgIC8v5aaC5p6c57uT5p2f5om55rOo6KKr6YCJ5Lit77yM5YiZ6ZyA6KaB5Yig6Zmk5b2T5YmN5om55rOoXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZFJhbmdlID0gUmFuZ2VVdGlsLmdldEVuZFJhbmdlVGFyZ2V0KHNlbGVjdGVkUmFuZ2UpO1xuICAgICAgICAgICAgaWYgKCFlbmRSYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tbVBhaXJzOiBBcnJheTxDb21tTWFya1NlbGVjdGVkU3RhdHVzPiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbW1Db250ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRNYXJrLCBlbmRNYXJrIH0gPSB0aGlzLmNvbW1Db250ZW50TGlzdFtpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tUGFpcjogQ29tbU1hcmtTZWxlY3RlZFN0YXR1cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNYXJrLFxuICAgICAgICAgICAgICAgICAgICBlbmRNYXJrLFxuICAgICAgICAgICAgICAgICAgICBzdGFydE1hcmtTdGF0dXM6IFJhbmdlVXRpbC5jaGVja0VsZW1lbnRGdWxsSW5SYW5nZShzZWxlY3RlZFJhbmdlLCBzdGFydE1hcmspLFxuICAgICAgICAgICAgICAgICAgICBlbmRNYXJrU3RhdHVzOiBSYW5nZVV0aWwuY2hlY2tFbGVtZW50RnVsbEluUmFuZ2Uoc2VsZWN0ZWRSYW5nZSwgZW5kTWFyayksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb21tUGFpcnMucHVzaChjb21tUGFpcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tUGFpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tUGFpciA9IGNvbW1QYWlyc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoY29tbVBhaXIuZW5kTWFya1N0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQoY29tbVBhaXIuZW5kTWFyay5wcm9wcy5pZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb21tUGFpci5zdGFydE1hcmtTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgbmV3U3RhcnRNYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5ld1N0YXJ0TWFyay5wcm9wcy5pZCA9IGNvbW1QYWlyLnN0YXJ0TWFyay5wcm9wcy5pZDtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tbVBhaXIuc3RhcnRNYXJrLmlzRGVjb3JhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG9jdW1lbnRDaGFuZ2UuaW5zZXJ0RWxlbWVudChlbmRSYW5nZS50YXJnZXQsIGVuZFJhbmdlLmVuZE9mZnNldCwgW25ld1N0YXJ0TWFya10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk5om55rOoXG4gICAgICogQHBhcmFtIGlkIFxuICAgICAqL1xuICAgIHJlbW92ZUNvbW1lbnQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21tZW50TWFya3MgPSB0aGlzLmNvbW1NYXJrTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmlkID09PSBpZCk7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRDb250ZW50ID0gdGhpcy5jb21tQ29udGVudExpc3QuZmluZChpdGVtID0+IGl0ZW0ucHJvcHMuaWQgPT09IGlkKTtcbiAgICAgICAgY29tbWVudE1hcmtzLmZvckVhY2goaXRlbSA9PiBpdGVtLnJlbW92ZSgpKVxuICAgICAgICBjb21tZW50Q29udGVudD8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJDb21tZW50c0NoYW5nZWQoKTtcbiAgICB9XG5cbiAgICBnZXRDb21tTWFya0luZGV4KGNvbW1NYXJrOiBDb21tZW50RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1hcmtUeXBlID0gY29tbU1hcmsucHJvcHMubWFya1R5cGU7XG4gICAgICAgIGNvbnN0IGNvbW1MaXN0ID0gdGhpcy5kb2NDdHguZG9jdW1lbnQudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2NvbW0nKSBhcyBBcnJheTxDb21tZW50RWxlbWVudD47XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29tbUxpc3QgPSBjb21tTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLm1hcmtUeXBlID09PSBtYXJrVHlwZSk7XG4gICAgICAgIHJldHVybiBzdGFydENvbW1MaXN0LmluZGV4T2YoY29tbU1hcmspO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa4hemZpOaJgOacieaJueazqFxuICAgICAqL1xuICAgIGNsZWFyQWxsQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVhZENvbW1lbnRzKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21tQ29udGVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudCh0aGlzLmNvbW1Db250ZW50TGlzdFtpXS5wcm9wcy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmiYDmnInnmoTpqozor4Hmibnms6hcbiAgICAgKi9cbiAgICBjbGVhckFsbFZhbGlkYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3ZhbGlkYXRlJykuZm9yRWFjaChpdGVtID0+IHsgdGhpcy5yZW1vdmVDb21tZW50KGl0ZW0ucHJvcHMuaWQpIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5om55rOo5L+u5pS55ZCO5LqL5Lu2XG4gICAgICog55So5LqO5qCH5rOo5b2T5YmN5paH5qGj55qE5om55rOo5Y+R55Sf5pu05pS55LqG77yM5LiN5YaN6YeN5aSN6K+75Y+W5om55rOo77yM5o+Q6auY5oCn6IO9XG4gICAgICovXG4gICAgYWZ0ZXJDb21tZW50c0NoYW5nZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG5cbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1NYXJrU2VsZWN0ZWRTdGF0dXMge1xuICAgIHN0YXJ0TWFyazogQ29tbWVudEVsZW1lbnQsXG4gICAgZW5kTWFyazogQ29tbWVudEVsZW1lbnQsXG4gICAgc3RhcnRNYXJrU3RhdHVzOiBib29sZWFuLFxuICAgIGVuZE1hcmtTdGF0dXM6IGJvb2xlYW5cbn1cbiIsImltcG9ydCB7IEVsZW1lbnQsIExlYWZFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uUmFuZ2UsIFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIEludGwge1xuXG4gICAgdHlwZSBCQ1A0N0xhbmd1YWdlVGFnID0gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdpdGggc29tZSBvciBhbGwgcHJvcGVydGllcyBvZiB0aGUgYEludGwuU2VnbWVudGVyYCBjb25zdHJ1Y3RvciBgb3B0aW9uc2AgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIvU2VnbWVudGVyI3BhcmFtZXRlcnMpXG4gICAgICovXG4gICAgaW50ZXJmYWNlIFNlZ21lbnRlck9wdGlvbnMge1xuICAgICAgICAvKiogVGhlIGxvY2FsZSBtYXRjaGluZyBhbGdvcml0aG0gdG8gdXNlLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24sIHNlZSBbSW50bCBwYWdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsI0xvY2FsZV9uZWdvdGlhdGlvbikuICovXG4gICAgICAgIGxvY2FsZU1hdGNoZXI/OiBcImJlc3QgZml0XCIgfCBcImxvb2t1cFwiIHwgdW5kZWZpbmVkO1xuICAgICAgICAvKiogVGhlIHR5cGUgb2YgaW5wdXQgdG8gYmUgc3BsaXQgKi9cbiAgICAgICAgZ3JhbnVsYXJpdHk/OiBcImdyYXBoZW1lXCIgfCBcIndvcmRcIiB8IFwic2VudGVuY2VcIiB8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgU2VnbWVudGVyIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYFNlZ21lbnRzYCBvYmplY3QgY29udGFpbmluZyB0aGUgc2VnbWVudHMgb2YgdGhlIGlucHV0IHN0cmluZywgdXNpbmcgdGhlIHNlZ21lbnRlcidzIGxvY2FsZSBhbmQgZ3JhbnVsYXJpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBpbnB1dCAtIFRoZSB0ZXh0IHRvIGJlIHNlZ21lbnRlZCBhcyBhIGBzdHJpbmdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJucyBBIG5ldyBpdGVyYWJsZSBTZWdtZW50cyBvYmplY3QgY29udGFpbmluZyB0aGUgc2VnbWVudHMgb2YgdGhlIGlucHV0IHN0cmluZywgdXNpbmcgdGhlIHNlZ21lbnRlcidzIGxvY2FsZSBhbmQgZ3JhbnVsYXJpdHkuXG4gICAgICAgICAqL1xuICAgICAgICBzZWdtZW50KGlucHV0OiBzdHJpbmcpOiBTZWdtZW50cztcblxuICAgICAgICByZXNvbHZlZE9wdGlvbnMoKTogUmVzb2x2ZWRTZWdtZW50ZXJPcHRpb25zO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBSZXNvbHZlZFNlZ21lbnRlck9wdGlvbnMge1xuICAgICAgICBsb2NhbGU6IHN0cmluZztcbiAgICAgICAgZ3JhbnVsYXJpdHk6IFwiZ3JhcGhlbWVcIiB8IFwid29yZFwiIHwgXCJzZW50ZW5jZVwiO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBTZWdtZW50cyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSBzZWdtZW50IGluIHRoZSBvcmlnaW5hbCBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgY29kZSB1bml0IGF0IGEgc3BlY2lmaWVkIGluZGV4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gY29kZVVuaXRJbmRleCAtIEEgbnVtYmVyIHNwZWNpZnlpbmcgdGhlIGluZGV4IG9mIHRoZSBjb2RlIHVuaXQgaW4gdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZy4gSWYgdGhlIHZhbHVlIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGAwYC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnRhaW5pbmcoY29kZVVuaXRJbmRleD86IG51bWJlcik6IFNlZ21lbnREYXRhO1xuXG4gICAgICAgIC8qKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciB0aGUgc2VnbWVudHMuICovXG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8U2VnbWVudERhdGE+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBTZWdtZW50RGF0YSB7XG4gICAgICAgIC8qKiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBzZWdtZW50IGV4dHJhY3RlZCBmcm9tIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmcuICovXG4gICAgICAgIHNlZ21lbnQ6IHN0cmluZztcbiAgICAgICAgLyoqIFRoZSBjb2RlIHVuaXQgaW5kZXggaW4gdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZyBhdCB3aGljaCB0aGUgc2VnbWVudCBiZWdpbnMuICovXG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgY29tcGxldGUgaW5wdXQgc3RyaW5nIHRoYXQgd2FzIHNlZ21lbnRlZC4gKi9cbiAgICAgICAgaW5wdXQ6IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgYm9vbGVhbiB2YWx1ZSBvbmx5IGlmIGdyYW51bGFyaXR5IGlzIFwid29yZFwiOyBvdGhlcndpc2UsIHVuZGVmaW5lZC5cbiAgICAgICAgICogSWYgZ3JhbnVsYXJpdHkgaXMgXCJ3b3JkXCIsIHRoZW4gaXNXb3JkTGlrZSBpcyB0cnVlIHdoZW4gdGhlIHNlZ21lbnQgaXMgd29yZC1saWtlIChpLmUuLCBjb25zaXN0cyBvZiBsZXR0ZXJzL251bWJlcnMvaWRlb2dyYXBocy9ldGMuKTsgb3RoZXJ3aXNlLCBmYWxzZS5cbiAgICAgICAgICovXG4gICAgICAgIGlzV29yZExpa2U/OiBib29sZWFuO1xuICAgIH1cblxuICAgIGNvbnN0IFNlZ21lbnRlcjoge1xuICAgICAgICBwcm90b3R5cGU6IFNlZ21lbnRlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBgSW50bC5TZWdtZW50ZXJgIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGxvY2FsZXMgLSBBIHN0cmluZyB3aXRoIGEgW0JDUCA0NyBsYW5ndWFnZSB0YWddKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU2NDYpLCBvciBhbiBhcnJheSBvZiBzdWNoIHN0cmluZ3MuXG4gICAgICAgICAqICBGb3IgdGhlIGdlbmVyYWwgZm9ybSBhbmQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBsb2NhbGVzYCBhcmd1bWVudCxcbiAgICAgICAgICogIHNlZSB0aGUgW2BJbnRsYCBwYWdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsI0xvY2FsZV9pZGVudGlmaWNhdGlvbl9hbmRfbmVnb3RpYXRpb24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIFtvYmplY3RdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyL1NlZ21lbnRlciNwYXJhbWV0ZXJzKVxuICAgICAgICAgKiAgd2l0aCBzb21lIG9yIGFsbCBvcHRpb25zIG9mIGBTZWdtZW50ZXJPcHRpb25zYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMgW0ludGwuU2VnbWVudGVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRzKSBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyKS5cbiAgICAgICAgICovXG4gICAgICAgIG5ldyhsb2NhbGVzPzogQkNQNDdMYW5ndWFnZVRhZyB8IEJDUDQ3TGFuZ3VhZ2VUYWdbXSwgb3B0aW9ucz86IFNlZ21lbnRlck9wdGlvbnMpOiBTZWdtZW50ZXI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aG9zZSBvZiB0aGUgcHJvdmlkZWQgbG9jYWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgd2l0aG91dCBoYXZpbmcgdG8gZmFsbCBiYWNrIHRvIHRoZSBydW50aW1lJ3MgZGVmYXVsdCBsb2NhbGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBsb2NhbGVzIC0gQSBzdHJpbmcgd2l0aCBhIFtCQ1AgNDcgbGFuZ3VhZ2UgdGFnXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NjQ2KSwgb3IgYW4gYXJyYXkgb2Ygc3VjaCBzdHJpbmdzLlxuICAgICAgICAgKiAgRm9yIHRoZSBnZW5lcmFsIGZvcm0gYW5kIGludGVycHJldGF0aW9uIG9mIHRoZSBgbG9jYWxlc2AgYXJndW1lbnQsXG4gICAgICAgICAqICBzZWUgdGhlIFtgSW50bGAgcGFnZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bCNMb2NhbGVfaWRlbnRpZmljYXRpb25fYW5kX25lZ290aWF0aW9uKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgQW4gW29iamVjdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIvc3VwcG9ydGVkTG9jYWxlc09mI3BhcmFtZXRlcnMpLlxuICAgICAgICAgKiAgd2l0aCBzb21lIG9yIGFsbCBwb3NzaWJsZSBvcHRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlci9zdXBwb3J0ZWRMb2NhbGVzT2YpXG4gICAgICAgICAqL1xuICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlczogQkNQNDdMYW5ndWFnZVRhZyB8IEJDUDQ3TGFuZ3VhZ2VUYWdbXSwgb3B0aW9ucz86IFBpY2s8U2VnbWVudGVyT3B0aW9ucywgXCJsb2NhbGVNYXRjaGVyXCI+KTogQkNQNDdMYW5ndWFnZVRhZ1tdO1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c1RleHRTZWdtZW50KHNlbGVjdGlvbjogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICBsZXQgeyBzdGFydENvbnRyb2w6IGVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBvZmZzZXQgfSA9IHNlbGVjdGlvbjtcbiAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXN1cHBvcnRTZWdtZW50KCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBmb2N1c0VsZSA9IGVsZW1lbnQgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyAxO1xuICAgIG9mZnNldCA9IG9mZnNldCA+IGZvY3VzRWxlLnRleHRNZWFzdXJlcy5sZW5ndGggPyBmb2N1c0VsZS50ZXh0TWVhc3VyZXMubGVuZ3RoIDogb2Zmc2V0O1xuICAgIC8v6I635Y+W6L+e57ut55qE5a2X56ymXG4gICAgY29uc3QgaXRlbXMgPSBbLi4uZ2V0Q29uc2VjdXRpdmVUZXh0c0J5RGlyZWN0aW9uKGVsZW1lbnQpLCBlbGVtZW50LCAuLi5nZXRDb25zZWN1dGl2ZVRleHRzQnlEaXJlY3Rpb24oZWxlbWVudCwgZmFsc2UpXTtcbiAgICBjb25zdCBzb3J0SXRlbXMgPSBnZXRUZXh0U29ydERhdGEoaXRlbXMpO1xuICAgIGNvbnN0IHsgaW5kZXgsIHRleHQgfSA9IHNvcnRJdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgcHJldi50ZXh0ICs9IGN1cnIudGV4dDtcbiAgICAgICAgaWYgKHByZXYuY29tcGxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3Vyci5pdGVtID09PSBmb2N1c0VsZSkge1xuICAgICAgICAgICAgcHJldi5pbmRleCArPSBvZmZzZXQ7XG4gICAgICAgICAgICBwcmV2LmNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2LmluZGV4ICs9IGN1cnIuaXRlbS50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2XG4gICAgfSwgeyBjb21wbGV0ZWQ6IGZhbHNlLCBpbmRleDogMCwgdGV4dDogJycgfSk7XG4gICAgY29uc3QgeyBpbmRleDogaGl0SW5kZXgsIGxlbjogaGl0TGVuIH0gPSBnZXRIaXRTZWdtZW50KHRleHQsIGluZGV4KTtcbiAgICBjb25zdCBtYXRjaFNlZ21lbnQgPSBzb3J0SXRlbXMuZmlsdGVyKGl0ZW0gPT4gKGl0ZW0uaW5kZXggPD0gaGl0SW5kZXggJiYgaXRlbS5lbmRJbmRleCA+IGhpdEluZGV4KSB8fCAoaXRlbS5pbmRleCA8PSBoaXRJbmRleCArIGhpdExlbiAmJiBpdGVtLmVuZEluZGV4ID4gaGl0SW5kZXggKyBoaXRMZW4pKTtcbiAgICBjb25zdCBzdGFydFNlZ21lbnQgPSBtYXRjaFNlZ21lbnRbMF07XG4gICAgY29uc3QgZW5kU2VnbWVudCA9IG1hdGNoU2VnbWVudFttYXRjaFNlZ21lbnQubGVuZ3RoIC0gMV07XG4gICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBoaXRJbmRleCAtIHN0YXJ0U2VnbWVudC5pbmRleDtcbiAgICBjb25zdCBlbmRPZmZzZXQgPSBoaXRJbmRleCArIGhpdExlbiAtIGVuZFNlZ21lbnQuaW5kZXg7XG4gICAgY29uc3QgbmV3UmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBuZXdSYW5nZS5zZXRTdGFydChzdGFydFNlZ21lbnQuaXRlbSwgc3RhcnRPZmZzZXQpO1xuICAgIG5ld1JhbmdlLnNldEVuZChlbmRTZWdtZW50Lml0ZW0sIGVuZE9mZnNldCk7XG4gICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuaW50ZXJmYWNlIFRleHRTZWdtZW50RGF0YSB7XG4gICAgaXRlbTogVGV4dEdyb3VwRWxlbWVudCxcbiAgICBsZW46IG51bWJlcixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGVuZEluZGV4OiBudW1iZXIsXG4gICAgdGV4dDogc3RyaW5nXG59XG5cbi8qKlxuICog6L+b6KGM5YiG6K+NXG4gKiBAcGFyYW0gdGV4dFxuICogQHBhcmFtIGZvY3VzT2Zmc2V0XG4gKi9cbmZ1bmN0aW9uIGdldEhpdFNlZ21lbnQodGV4dDogc3RyaW5nLCBmb2N1c09mZnNldDpudW1iZXIpOiB7IGluZGV4OiBudW1iZXIsIGxlbjogbnVtYmVyIH0ge1xuICAgIGNvbnN0IHNlZ21lbnRlciA9IG5ldyBJbnRsLlNlZ21lbnRlcihcInpoLUNOXCIsIHsgZ3JhbnVsYXJpdHk6IFwid29yZFwiIH0pO1xuICAgIGNvbnN0IGl0ZXJhdG9yMSA9IHNlZ21lbnRlci5zZWdtZW50KHRleHQpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBjb25zdCBzZWdJdGVtcyA9IEFycmF5LmZyb20oaXRlcmF0b3IxKTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc2VnSXRlbSA9IHNlZ0l0ZW1zW2ldO1xuICAgICAgICBjb25zdCBjdXJySW5kZXggPSBzZWdJdGVtLmluZGV4O1xuICAgICAgICBjb25zdCBjdXJyTGVuID0gc2VnSXRlbS5zZWdtZW50Lmxlbmd0aDtcbiAgICAgICAgaWYgKGZvY3VzT2Zmc2V0ID4gY3VyckluZGV4ICYmIGZvY3VzT2Zmc2V0IDw9IGN1cnJMZW4gKyBjdXJySW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgbGVuOiBjdXJyTGVuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggKz0gY3VyckxlbjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCfmnKrojrflj5bliLDlr7nlupTnmoTliIbor43or43nu4QnKTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydFNlZ21lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBJbnRsLlNlZ21lbnRlciA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiDmoLnmja7liY3lkI7pobrluo/moIfor4bntKLlvJXkvY1cbiAqIEBwYXJhbSB0ZXh0c1xuICovXG5mdW5jdGlvbiBnZXRUZXh0U29ydERhdGEodGV4dHM6IEFycmF5PFRleHRHcm91cEVsZW1lbnQ+KTogQXJyYXk8VGV4dFNlZ21lbnREYXRhPiB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBjb25zdCBzb3J0SXRlbXM6IEFycmF5PFRleHRTZWdtZW50RGF0YT4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0ZXh0c1tpXTtcbiAgICAgICAgY29uc3Qgc29ydERhdGEgPSB7XG4gICAgICAgICAgICBsZW46IGl0ZW0udGV4dE1lYXN1cmVzLmxlbmd0aCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXg6IGluZGV4ICsgaXRlbS50ZXh0TWVhc3VyZXMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dFxuICAgICAgICB9O1xuICAgICAgICBzb3J0SXRlbXMucHVzaChzb3J0RGF0YSk7XG4gICAgICAgIGluZGV4ICs9IHNvcnREYXRhLmxlbjtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRJdGVtcztcbn1cblxuLyoqXG4gKiDojrflj5bmjIflrprmlrnlkJHkuIrov57nu63nmoTlrZfnrKZcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gcHJldlxuICovXG5mdW5jdGlvbiBnZXRDb25zZWN1dGl2ZVRleHRzQnlEaXJlY3Rpb24oZWxlbWVudDogVGV4dEdyb3VwRWxlbWVudCwgcHJldiA9IHRydWUpOiBBcnJheTxUZXh0R3JvdXBFbGVtZW50PiB7XG4gICAgbGV0IHByZXZUZXh0OiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG4gICAgY29uc3QgcHJldlRleHRzOiBBcnJheTxUZXh0R3JvdXBFbGVtZW50PiA9IFtdO1xuICAgIGNvbnN0IGZ1bmMgPSBwcmV2ID8gRWxlbWVudFV0aWwuZ2V0UHJldlNpYmxpbmdFbGVtZW50IDogRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50O1xuICAgIGNvbnN0IGFkZEl0ZW0gPSBwcmV2ID8gcHJldlRleHRzLnVuc2hpZnQgOiBwcmV2VGV4dHMucHVzaDtcbiAgICB3aGlsZSAoKHByZXZUZXh0ID0gZnVuYyhwcmV2VGV4dCkpICYmIHByZXZUZXh0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAvL2FkZEl0ZW0ocHJldlRleHQpO1xuICAgICAgICBhZGRJdGVtLmFwcGx5KHByZXZUZXh0cywgW3ByZXZUZXh0XSk7XG4gICAgfVxuICAgIHJldHVybiBwcmV2VGV4dHM7XG59XG4iLCJpbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSAnLi9jb21tb24tdXRpbCc7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi9kb2N1bWVudC1jb250ZXh0J1xuaW1wb3J0IHsgU2VsZWN0aW9uUmFuZ2UgfSBmcm9tICcuL2RvY3VtZW50LXNlbGVjdGlvbic7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50LWRlZmluZSc7XG5pbXBvcnQgeyBFbGVtZW50UmVhZGVyIH0gZnJvbSAnLi9lbGVtZW50LXJlYWRlcic7XG5pbXBvcnQge1xuICAgIERlbGV0ZUVsZU9wc0RlbHRhLFxuICAgIERlbGV0ZVRleHRPcHNEZWx0YSxcbiAgICBGb3JtYXRPcHNEZWx0YSxcbiAgICBnZW5lcmF0ZVBhdGNoLFxuICAgIEluc2VydE9wc0RlbHRhLFxuICAgIEluc2VydFRleHRPcHNEZWx0YSxcbiAgICBvcHNUcmFja01vZGVsLFxuICAgIHN1cHByZXNzVHJhY2tpbmdcbn0gZnJvbSAnLi9lbGVtZW50LXRyYWNlLXRyYWNraW5nJ1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tICcuL2VsZW1lbnQtdXRpbCc7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSAnLi9pbXBsJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuXG50eXBlIEhpc3RvcnlDb21tYW5kID0gJ3VuZG8nIHwgJ3JlZG8nO1xudHlwZSBIaXN0b3J5Q2hhbmdlcyA9IHsgZGF0ZTogRGF0ZSwgb3BzOiBBcnJheTxvcHNUcmFja01vZGVsPiwgYmVmb3JlU2VsZWN0aW9uOiBTZWxlY3Rpb25Mb2cgfCBudWxsLCBhZnRlclNlbGVjdGlvbjogU2VsZWN0aW9uTG9nIHwgbnVsbCB9XG5cbi8qKlxuICog5aSE55CG5pKk6ZSA5Zue5rua562J6KGM5Li6XG4gKi9cbmV4cG9ydCBjbGFzcyBFbGVtZW50VHJhY2tNYW5hZ2Uge1xuXG4gICAgYWN0aW9uczogQXJyYXk8SGlzdG9yeUNoYW5nZXM+ID0gW107XG4gICAgaW5kZXg6IG51bWJlciA9IDA7XG4gICAgLy/kuIDml6blj5HnlJ/lj5jmm7TvvIzlsLHplIHlrprlvZPliY3pgInljLrnmoTmlbDmja5cbiAgICAvL2xvZ0xvY2tTdGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgc2VsZWN0aW9uTG9nITogU2VsZWN0aW9uTG9nIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHB1YmxpYyByZWFkZXI6IEVsZW1lbnRSZWFkZXIpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlJ/miJDlj5jmm7TkuYvliY3nmoTpgInljLrmlbDmja5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVNlbGVjdGlvbkxvZygpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmxvZ0xvY2tTdGF0ZSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTG9nID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkxvZyA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog55Sf5oiQ5Y6G5Y+y5pON5L2c5L+h5oGvXG4gICAgICovXG4gICAgZ2VuZXJhdGVUcmFjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy5lbmFibGVUcmFja0hpc3RvcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHMgPSBnZW5lcmF0ZVBhdGNoKHRoaXMuZG9jQ3R4LmRvY3VtZW50KTtcbiAgICAgICAgaWYgKCFvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWVyZ2VPcHMob3BzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UodGhpcy5pbmRleCk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBvcHMsXG4gICAgICAgICAgICBiZWZvcmVTZWxlY3Rpb246IHRoaXMuc2VsZWN0aW9uTG9nLFxuICAgICAgICAgICAgYWZ0ZXJTZWxlY3Rpb246IHRoaXMuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPiB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy50cmFja0hpc3RvcnlNYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UodGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkxvZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQiOW5tuaTjeS9nCxcbiAgICAgKiDlkIjlubbovpPlhaXjgIHliKDpmaTmloflrZflnKjkuIDlrprlkajmnJ/lhoXnmoTmm7TmlLlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgbWVyZ2VPcHMob3BzOiBvcHNUcmFja01vZGVsW10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvL+mXrumimOWcqOS6ju+8mlxuICAgICAgICAvLzEu5paw6L6T5YWl55qE5a2X56ym5Liy77yMc2VsZWN0U3RhdGXnmoRzdGFydE9mZnNldOOAgWVuZE9mZnNldD0xLOWQjui+k+WFpeeahOWtl+espuS4sueahGVuZE9mZnNldOi/m+ihjOe0r+WKoFxuICAgICAgICAvLzIu5pKk6ZSA5ZCO6YeN5YGa77yM6YCJ5Yy66IyD5Zu05ZyoMS0yLOiLseWbveaYrzAtMizlm6DkuLrkuYvliY3lnKjliJvlu7rmlofmnKzlr7nosaHlkI7vvIzpgInljLrnmoTnu5PmnZ/kvY3kuLoxXG4gICAgICAgIC8vIGlmIChvcHMubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGNvbnN0IGxhc3RPcHMgPSB0aGlzLmFjdGlvbnNbdGhpcy5hY3Rpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgICAvLyBpZiAoIWxhc3RPcHMpIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyAvL2lmKGxhc3RPcHMub3BzW2xhc3RPcHMub3BzLmxlbmd0aC0xXSlcbiAgICAgICAgLy8gLy/otoXov4cxMOenkueahOaTjeS9nOS4jeWQiOW5tlxuICAgICAgICAvLyBpZiAobW9tZW50KCkuZGlmZihtb21lbnQobGFzdE9wcy5kYXRlKSwgJ3NlY29uZHMnKSA+IDEwKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc3QgcHJldk9wID0gbGFzdE9wcy5vcHNbbGFzdE9wcy5vcHMubGVuZ3RoIC0gMV07XG4gICAgICAgIC8vIGNvbnN0IGN1cnJPcCA9IG9wc1swXTtcbiAgICAgICAgLy8gY29uc3QgcHJldkFmdGVyU2VsZWN0aW9uID0gbGFzdE9wcy5hZnRlclNlbGVjdGlvbjtcbiAgICAgICAgLy8gLy/mk43kvZznsbvlnovnm7jlkIxcbiAgICAgICAgLy8gaWYgKCdpbnNUZXh0JyBpbiBjdXJyT3Aub3BzICYmICdpbnNUZXh0JyBpbiBwcmV2T3Aub3BzICYmIGN1cnJPcC5pbmRleCA9PT0gcHJldk9wLmluZGV4KSB7XG4gICAgICAgIC8vICAgICBpZiAoIXByZXZBZnRlclNlbGVjdGlvbikge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIC8v6YCJ5Yy65b+F6aG76Zet5ZCIXG4gICAgICAgIC8vICAgICBpZiAoIXByZXZBZnRlclNlbGVjdGlvbi5jb2xsYXBzZWQpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICAvL+WJjeWQjuaYr+i/nue7reeahOaTjeS9nFxuICAgICAgICAvLyAgICAgY29uc3QgeyBpbmRleCwgbGVuZ3RoIH0gPSBwcmV2T3Aub3BzLmluc1RleHQ7XG4gICAgICAgIC8vICAgICBpZiAoaW5kZXggKyBsZW5ndGggPT09IGN1cnJPcC5vcHMuaW5zVGV4dC5pbmRleCkge1xuICAgICAgICAvLyAgICAgICAgIGlmIChwcmV2QWZ0ZXJTZWxlY3Rpb24uZW5kT2Zmc2V0ID09PSBpbmRleCArIGxlbmd0aCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBwcmV2T3Aub3BzLmNvbnRlbnQgKz0gY3Vyck9wLm9wcy5jb250ZW50O1xuICAgICAgICAvLyAgICAgICAgICAgICBwcmV2T3Aub3BzLmluc1RleHQubGVuZ3RoICs9IGN1cnJPcC5vcHMuaW5zVGV4dC5sZW5ndGg7XG4gICAgICAgIC8vICAgICAgICAgICAgIGxhc3RPcHMuZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIC8vICAgICAgICAgICAgIHByZXZBZnRlclNlbGVjdGlvbi5lbmRPZmZzZXQgKz0gY3Vyck9wLm9wcy5pbnNUZXh0Lmxlbmd0aDtcbiAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgLy90aGlzLmNvbW1hbmRGb3JJbnNlcnRUZXh0T3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxJbnNlcnRUZXh0T3BzRGVsdGE+KVxuICAgICAgICAvLyB9IGVsc2UgaWYgKCdkZWxUZXh0JyBpbiBjdXJyT3Aub3BzICYmICdkZWxUZXh0JyBpbiBwcmV2T3Aub3BzICYmIGN1cnJPcC5pbmRleCA9PT0gcHJldk9wLmluZGV4KSB7XG4gICAgICAgIC8vICAgICBpZiAocHJldk9wLm9wcy5kZWxUZXh0LmluZGV4ID09PSBjdXJyT3Aub3BzLmRlbFRleHQuaW5kZXggKyBjdXJyT3Aub3BzLmRlbFRleHQubGVuZ3RoKSB7XG4gICAgICAgIC8vICAgICAgICAgcHJldk9wLm9wcy5kZWxUZXh0Lmxlbmd0aCArPSBjdXJyT3Aub3BzLmRlbFRleHQubGVuZ3RoO1xuICAgICAgICAvLyAgICAgICAgIHByZXZPcC5vcHMuY29udGVudCA9IGN1cnJPcC5vcHMuY29udGVudDtcbiAgICAgICAgLy8gICAgICAgICBsYXN0T3BzLmRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgLy90aGlzLmNvbW1hbmRGb3JEZWxldGVUZXh0T3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxEZWxldGVUZXh0T3BzRGVsdGE+KVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvbigpOiBTZWxlY3Rpb25Mb2cgfCBudWxsIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIGVkaXRhYmxlIH0gPSB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoc3RhcnRDb250cm9sLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRDb250cm9sID09PSBlbmRDb250cm9sID8gc3RhcnRJbmRleCA6IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChlbmRDb250cm9sLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICBlbmRJbmRleCxcbiAgICAgICAgICAgIGVuZE9mZnNldCxcbiAgICAgICAgICAgIGVkaXRhYmxlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmiafooYzmkqTplIBcbiAgICAgKi9cbiAgICB1bmRvKCk6IHZvaWQge1xuICAgICAgICBzdXBwcmVzc1RyYWNraW5nKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUNvbW1hbmQoJ3VuZG8nKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Y+v5Lul5pKk6ZSAXG4gICAgICovXG4gICAgZ2V0IGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6Xph43lgZpcbiAgICAgKi9cbiAgICBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPCB0aGlzLmFjdGlvbnMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaJp+ihjOmHjeWBmlxuICAgICAqL1xuICAgIHJlZG8oKTogdm9pZCB7XG4gICAgICAgIHN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZCgncmVkbycpO1xuICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb25zW3RoaXMuaW5kZXhdO1xuICAgICAgICBpZiAoIWFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNzID0gY29tbWFuZCA9PT0gJ3VuZG8nID8gYWN0aW9uLmJlZm9yZVNlbGVjdGlvbiA6IGFjdGlvbi5hZnRlclNlbGVjdGlvbjtcbiAgICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uKHNzKTtcbiAgICAgICAgY29uc3Qgb3BzID0gY29tbWFuZCA9PT0gJ3VuZG8nID8gWy4uLmFjdGlvbi5vcHNdLnJldmVyc2UoKSA6IGFjdGlvbi5vcHM7XG4gICAgICAgIG9wcy5mb3JFYWNoKG9wID0+IHtcbiAgICAgICAgICAgIGlmICgnaW5zZXJ0JyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRGb3JJbnNlcnRFbGVPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPEluc2VydE9wc0RlbHRhPik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdkZWxldGUnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEZvckRlbGV0ZUVsZU9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8RGVsZXRlRWxlT3BzRGVsdGE+KVxuICAgICAgICAgICAgfSBlbHNlIGlmICgnaW5zVGV4dCcgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kRm9ySW5zZXJ0VGV4dE9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8SW5zZXJ0VGV4dE9wc0RlbHRhPilcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2RlbFRleHQnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEZvckRlbGV0ZVRleHRPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPERlbGV0ZVRleHRPcHNEZWx0YT4pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdmb3JtYXQnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEZvckVsZUZvcm1hdChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPEZvcm1hdE9wc0RlbHRhPik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6L+Y5Y6f5YWJ5qCHXG4gICAgICogQHBhcmFtIHNzTG9nXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICByZXN0b3JlU2VsZWN0aW9uKHNzTG9nOiBTZWxlY3Rpb25Mb2cgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIGlmICghc3NMb2cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5zZXRQYWludGVkQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydEluZGV4LCBzdGFydE9mZnNldCwgZW5kSW5kZXgsIGVuZE9mZnNldCwgZWRpdGFibGUgfSA9IHNzTG9nO1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHNjID0gdGhpcy5nZXRDb250cm9sKHN0YXJ0SW5kZXgsIGZhbHNlKSBhcyBFbGVtZW50O1xuXG4gICAgICAgICAgICBjb25zdCBlYyA9IHN0YXJ0SW5kZXggPT09IGVuZEluZGV4ID8gc2MgOiB0aGlzLmdldENvbnRyb2woZW5kSW5kZXgsIGZhbHNlKSBhcyBFbGVtZW50O1xuICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc2MsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgIHJhbmdlLnNldEVuZChlYywgZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgIHJhbmdlLmVkaXRhYmxlID0gZWRpdGFibGU7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5paH5pys6L6T5YWl5pON5L2cXG4gICAgICovXG4gICAgY29tbWFuZEZvckluc2VydFRleHRPcChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCwgZGF0YTogb3BzVHJhY2tNb2RlbDxJbnNlcnRUZXh0T3BzRGVsdGE+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdlID0gdGhpcy5nZXRDb250cm9sPFRleHRHcm91cEVsZW1lbnQ+KGRhdGEuaW5kZXgpO1xuICAgICAgICBjb25zdCB7IGNvbnRlbnQsIGluc1RleHQ6IHsgaW5kZXgsIGxlbmd0aCB9IH0gPSBkYXRhLm9wcztcbiAgICAgICAgY29tbWFuZCA9PT0gJ3VuZG8nID8gdGFyZ2Uuc3BsaWNlKGluZGV4LCBsZW5ndGgpIDogdGFyZ2Uuc3BsaWNlKGluZGV4LCAwLCBjb250ZW50KTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgOaWh+acrOWIoOmZpOaTjeS9nFxuICAgICAqIEBwYXJhbSBjb21tYW5kXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICBjb21tYW5kRm9yRGVsZXRlVGV4dE9wKGNvbW1hbmQ6IEhpc3RvcnlDb21tYW5kLCBkYXRhOiBvcHNUcmFja01vZGVsPERlbGV0ZVRleHRPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXRDb250cm9sPFRleHRHcm91cEVsZW1lbnQ+KGRhdGEuaW5kZXgpO1xuICAgICAgICBjb25zdCB7IGNvbnRlbnQsIGRlbFRleHQ6IHsgaW5kZXgsIGxlbmd0aCB9IH0gPSBkYXRhLm9wcztcbiAgICAgICAgY29tbWFuZCA9PT0gJ3VuZG8nID8gdGFyZ2V0LnNwbGljZShpbmRleCwgMCwgY29udGVudCkgOiB0YXJnZXQuc3BsaWNlKGluZGV4LCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgOWFg+e0oOWxnuaAp+S/ruaUueaTjeS9nFxuICAgICAqL1xuICAgIGNvbW1hbmRGb3JFbGVGb3JtYXQoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQsIGRhdGE6IG9wc1RyYWNrTW9kZWw8Rm9ybWF0T3BzRGVsdGE+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZ2V0Q29udHJvbDxFbGVtZW50PihkYXRhLmluZGV4KTtcbiAgICAgICAgY29uc3QgYXBwbHlQcm9wcyA9IHt9O1xuICAgICAgICBjb25zdCBnZXR0ZXJGaWVsZCA9IGNvbW1hbmQgPT09ICd1bmRvJyA/ICdvbGRWYWx1ZScgOiAnbmV3VmFsdWUnO1xuICAgICAgICAvL+iOt+WPluS/ruaUueS5i+WJjeeahOWAvOWvueixoVxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhLm9wcy5mb3JtYXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGFwcGx5UHJvcHNba2V5XSA9IGRhdGEub3BzLmZvcm1hdFtrZXldW2dldHRlckZpZWxkXTtcbiAgICAgICAgfSlcbiAgICAgICAgLy/mm7TmlrDliLDkuYvliY3nmoTlgLxcbiAgICAgICAgdGhpcy51cGRhdGVQcm9wcyh0YXJnZXQucHJvcHMsIGFwcGx5UHJvcHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgOWIoOmZpOWFg+e0oOeahOaTjeS9nFxuICAgICAqIEBwYXJhbSBjb21tYW5kXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICBjb21tYW5kRm9yRGVsZXRlRWxlT3AoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQsIGRhdGE6IG9wc1RyYWNrTW9kZWw8RGVsZXRlRWxlT3BzRGVsdGE+KTogdm9pZCB7XG4gICAgICAgIGlmIChjb21tYW5kID09PSAndW5kbycpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZVRvSW5zZXJ0KGRhdGEuaW5kZXgsIGRhdGEucGFyZW50SW5kZXgsIGRhdGEucHJldkluZGV4LCBkYXRhLm9wcy5kZWxldGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZWxlID0gdGhpcy5nZXRDb250cm9sKGRhdGEuaW5kZXgpO1xuICAgICAgICAgICAgZWxlLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5o+S5YWl55qE5YWD57SgXG4gICAgICogQHBhcmFtIGNvbW1hbmRcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIGNvbW1hbmRGb3JJbnNlcnRFbGVPcChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCwgZGF0YTogb3BzVHJhY2tNb2RlbDxJbnNlcnRPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbW1hbmQgPT09ICd1bmRvJykge1xuICAgICAgICAgICAgY29uc3QgZWxlID0gdGhpcy5nZXRDb250cm9sKGRhdGEuaW5kZXgpO1xuICAgICAgICAgICAgZWxlLnJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlVG9JbnNlcnQoZGF0YS5pbmRleCwgZGF0YS5wYXJlbnRJbmRleCwgZGF0YS5wcmV2SW5kZXgsIGRhdGEub3BzLmluc2VydCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3RvcmVUb0luc2VydChpbmRleDogbnVtYmVyLCBwYXJlbnRJbmRleDogbnVtYmVyLCBwcmV2SW5kZXg6IG51bWJlciwgZGF0YTogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U2libGluZ0VsZSA9IHByZXZJbmRleCAhPT0gLTEgPyB0aGlzLmdldENvbnRyb2wocHJldkluZGV4KSA6IG51bGw7XG4gICAgICAgIC8v6I635Y+W5o+S5YWl5L2N572u5LmL5YmN55qE5YWD57Sg77yM54S25ZCO5ZCR5ZCO5o+S5YWl55uu5qCH5YWD57SgXG4gICAgICAgIGNvbnN0IGVsZSA9IHRoaXMuZ2V0Q29udHJvbChpbmRleCAtIDEpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBkYXRhLmNsb25lKHRydWUpO1xuICAgICAgICBpZiAocHJldlNpYmxpbmdFbGUpIHtcbiAgICAgICAgICAgIHByZXZTaWJsaW5nRWxlLnBhcmVudC5hZGRDaGlsZCh0YXJnZXQsIHByZXZTaWJsaW5nRWxlLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vZWxl6I635Y+W55qE5Li654i25a655ZmoXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHBhcmVudEluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZS5hZGRDaGlsZCh0YXJnZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfniLbnuqfnsbvlnovkuI3mraPnoa4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGUucGFyZW50LmFkZENoaWxkKHRhcmdldCwgZWxlLmdldEluZGV4KCkgKyAxKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pu05paw5bGe5oCnXG4gICAgICogQHBhcmFtIGN1cnJQcm9wc1xuICAgICAqIEBwYXJhbSBuZXdQcm9wc1xuICAgICAqL1xuICAgIHVwZGF0ZVByb3BzKGN1cnJQcm9wczogb2JqZWN0LCBuZXdQcm9wczogb2JqZWN0KTogdm9pZCB7XG4gICAgICAgIE9iamVjdC5rZXlzKG5ld1Byb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjdXJyUHJvcHNba2V5XSA9IENvbW1vblV0aWwuY2xvbmVWYWx1ZShuZXdQcm9wc1trZXldKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRDb250cm9sPFQgZXh0ZW5kcyBFbGVtZW50PihpbmRleDogbnVtYmVyLCBwdXJlOiBib29sZWFuID0gdHJ1ZSk6IFQge1xuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEJ5SW5kZXgodGhpcy5kb2NDdHguZG9jdW1lbnQsIHsgY3VyckluZGV4OiAtMSwgaW5kZXg6IGluZGV4IH0sIHB1cmUpIGFzIFQ7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgU2VsZWN0aW9uTG9nIHtcbiAgICBzdGFydEluZGV4OiBudW1iZXI7XG4gICAgc3RhcnRPZmZzZXQ6IG51bWJlcjtcbiAgICBlbmRJbmRleDogbnVtYmVyO1xuICAgIGVuZE9mZnNldDogbnVtYmVyO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBEb2N1bWVudFBhaW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7IHByaW50Tm9kZXMgfSBmcm9tIFwiLi9kb2N1bWVudC1wcmludFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7IFZpZXdPcHRpb25zIH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRQYWludCB9IGZyb20gXCIuL2VsZW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7IEVsZW1lbnRSZWFkZXIgfSBmcm9tIFwiLi9lbGVtZW50LXJlYWRlclwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCwgRG9jdW1lbnRSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1pbXBsXCI7XG5pbXBvcnQgeyBQYWludENvbnRlbnQsIFJlbmRlckNvbnRleHQsIFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4vcmVuZGVyLWNvbnRleHRcIjtcblxuLyoqXG4gKiDnprvlsY/miZPljbBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERvY3VtZW50UHJpbnRPZmZzY3JlZW5CYXNlIHtcbiAgICBkb2N1bWVudFBhaW50OiBEb2N1bWVudFBhaW50O1xuICAgIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgICBkb2NDdHg6IEVkaXRvckNvbnRleHQ7XG4gICAgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZTtcbiAgICBlbGVtZW50UmVhZGVyOiBFbGVtZW50UmVhZGVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSBuZXcgVmlld09wdGlvbnMoKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5jb3B5UmlnaHRJbmZvID0gJ+S4h+i+vuS/oeaBr+eUteWtkOeXheWOhue8lui+keWZqCx3d3cud29uZGVyc2dyb3VwLmNvbSc7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuc2hvd0NoYXJSZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kcmF3Q2hhclJlY3RDb2xvciA9ICdncmVlbic7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuc2hvd0xpbmVSZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NTcGFjZSA9IDIwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnJldmlld1dpbmRvd1dpZHRoID0gMjAwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyA9IDMuNzc5NTAwMTIyMDcwMzEyNjtcbiAgICAgICAgLy/mlbTkuKrnlLvluIPnmoTlsLrlr7hcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwMCxcbiAgICAgICAgICAgIGhlaWdodDogODAwXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIgPSB7XG4gICAgICAgICAgICBpZDogJzY2NjYnLFxuICAgICAgICAgICAgbmFtZTogJ+euoeeQhuWRmCdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBjYW52YXMsIGN0eCB9ID0gdGhpcy5jcmVhdGVDYW52YXMoMjAwLCAyMDApO1xuICAgICAgICBjb25zdCBzcyA9IG5ldyBTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgICB0aGlzLmRvY0N0eCA9IG5ldyBFZGl0b3JDb250ZXh0KHNzLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgdGhpcy5yZW5kZXJDdHggPSB0aGlzLmNyZWF0ZVJlbmRlckN0eChjdHgsIHRoaXMudmlld09wdGlvbnMsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50ID0gbmV3IERvY3VtZW50UGFpbnQodGhpcy5yZW5kZXJDdHgsIHRoaXMuZG9jQ3R4LCBuZXcgTWFwKCkpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWFkZXIgPSBuZXcgRWxlbWVudFJlYWRlcih0aGlzLmRvY0N0eCwgdGhpcy5yZW5kZXJDdHgpO1xuICAgICAgICB0aGlzLmRvY0N0eC5zeW5jUmVmcmVzaCA9ICgpID0+IHtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYyBwcmludChkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQsIHJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZShkYXRhKTtcbiAgICAgICAgY29uc3QgY2FudmFzTm9kZXMgPSB0aGlzLmdldENhbnZhc05vZGVzKHRoaXMuZG9jdW1lbnRQYWludC5kb2NQYWdlcywgcmFuZ2VzKTtcbiAgICAgICAgaWYgKCFjYW52YXNOb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybign5peg5Y+v5omT5Y2w6aG1JylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2NQcm9wcyA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzO1xuICAgICAgICBwcmludE5vZGVzKGNhbnZhc05vZGVzLCB7IC4uLmRvY1Byb3BzIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue7mOWItueahOWbvueJh++8jOagvOW8j+S4ukJhc2U2NOe8lueggVxuICAgICAqL1xuICAgIGFzeW5jIGdldEltYWdlc0NvbnRlbnQoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50LCByYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGNhbnZhc05vZGVzID0gdGhpcy5nZXRDYW52YXNOb2Rlcyh0aGlzLmRvY3VtZW50UGFpbnQuZG9jUGFnZXMsIHJhbmdlcyk7XG4gICAgICAgIGlmICghY2FudmFzTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+aXoOWPr+WvvOWHuumhtScpXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbnZhc05vZGVzLm1hcChub2RlID0+IG5vZGUudG9EYXRhVVJMKCkpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFByaW50Tm9kZXMoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50LCByYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IFByb21pc2U8QXJyYXk8YW55Pj4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGNhbnZhc05vZGVzID0gdGhpcy5nZXRDYW52YXNOb2Rlcyh0aGlzLmRvY3VtZW50UGFpbnQuZG9jUGFnZXMsIHJhbmdlcyk7XG4gICAgICAgIHJldHVybiBjYW52YXNOb2RlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDor7vlj5bmlbDmja7vvIzmjpLniYhcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgcHJlcGFyZShkYXRhOiBhbnkgfCBEb2N1bWVudEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVhZGVyLnJlYWQoZGF0YSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5yZVBhZ2VzKCk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuZG9jQ3R4LmltYWdlTG9hZGVyLmdldExvYWRUYXNrcygpKTtcbiAgICAgICAgY29uc3QgeyBzY2FsZSwgZG9jUGFnZVNldHRpbmdzOiB7IHdpZHRoLCBoZWlnaHQgfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgdGhpcy5yZW5kZXJDdHgudXBkYXRlKHsgc2NhbGUsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgZ2V0Q2FudmFzTm9kZXMocHJpbnRQYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+LCBwcmludFJhbmdlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsKTogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgeyBzY2FsZSwgZG9jUGFnZVNldHRpbmdzOiB7IHdpZHRoLCBoZWlnaHQgfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgY29uc3QgY2FudmFzTGlzdDogQXJyYXk8SFRNTENhbnZhc0VsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJpbnRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHByaW50UmFuZ2VzICYmIHByaW50UmFuZ2VzLmluZGV4T2YoaSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGNhbnZhczogY2FudmFzTm9kZSwgY3R4IH0gPSB0aGlzLmNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckN0eCA9IHRoaXMuY3JlYXRlUmVuZGVyQ3R4KGN0eCwgdGhpcy52aWV3T3B0aW9ucywgdGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmluaXQoeyB3aWR0aCwgaGVpZ2h0LCBzY2FsZSB9KTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5kcmF3TW9kZSA9ICdwcmludCc7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBwcmludFBhZ2VzW2ldO1xuICAgICAgICAgICAgY29uc3QgdG1wID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KGRvYy5yZWN0KTtcbiAgICAgICAgICAgIGRvYy5yZWN0LnggPSAwO1xuICAgICAgICAgICAgZG9jLnJlY3QueSA9IDA7XG4gICAgICAgICAgICBFbGVtZW50UGFpbnQuZHJhd1BhZ2UocmVuZGVyQ3R4LCB0aGlzLmRvY0N0eCwgZG9jLCB7IHg6IDAsIHk6IDAgfSk7XG4gICAgICAgICAgICByZW5kZXJDdHgub3ZlcmxheXNDb250ZXh0LmNsZWFyKCk7XG4gICAgICAgICAgICByZW5kZXJDdHgubWFpbkNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCwgJ3doaXRlJyk7XG4gICAgICAgICAgICByZW5kZXJDdHguY29tbWl0KHsgd2lkdGgsIGhlaWdodCwgc2NhbGUgfSk7XG4gICAgICAgICAgICBkb2MucmVjdCA9IHRtcDtcbiAgICAgICAgICAgIGNhbnZhc0xpc3QucHVzaChjYW52YXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FudmFzTGlzdDtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBjcmVhdGVDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIH07XG5cbiAgICBhYnN0cmFjdCBjcmVhdGVSZW5kZXJDdHgobWFpbkN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCk6IFJlbmRlckNvbnRleHRUeXBlO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFByaW50T2Zmc2NyZWVuIGV4dGVuZHMgRG9jdW1lbnRQcmludE9mZnNjcmVlbkJhc2Uge1xuICAgIGNyZWF0ZVJlbmRlckN0eChtYWluQ3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KTogUmVuZGVyQ29udGV4dFR5cGUge1xuICAgICAgICBjb25zdCByZW5kZXJDdHggPSBuZXcgUmVuZGVyQ29udGV4dChuZXcgUGFpbnRDb250ZW50KG1haW5DdHgpKTtcbiAgICAgICAgY29uc3QgeyBzY2FsZSwgZG9jUGFnZVNldHRpbmdzOiB7IHdpZHRoLCBoZWlnaHQgfSB9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgcmVuZGVyQ3R4LmluaXQoeyBzY2FsZSwgd2lkdGgsIGhlaWdodCB9KTtcbiAgICAgICAgcmV0dXJuIHJlbmRlckN0eDtcbiAgICB9XG5cbiAgICBjcmVhdGVDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB7IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIH0ge1xuICAgICAgICBjb25zdCBjYW52YXNOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNhbnZhc05vZGUuc3R5bGUuY3Vyc29yID0gJ3RleHQnO1xuICAgICAgICBjYW52YXNOb2RlLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhc05vZGUuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKGNhbnZhc05vZGUsIGN0eCwgdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2FudmFzOiBjYW52YXNOb2RlLCBjdHhcbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQgeyBQYWludENvbnRlbnQsIFJlbmRlckNvbnRleHQgfSBmcm9tICcuL2ZyYW1ld29yay9yZW5kZXItY29udGV4dCc7XG5pbXBvcnQgeyBDb250ZW50TWVudUl0ZW0sIENvbnRleHRNZW51RWxlbWVudEV2ZW50LCBFdmVudE1hcCwgSGl0RXZlbnRJbmZvIH0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1ldmVudC1kZWZpbmUnO1xuaW1wb3J0IHsgRG9jdW1lbnRQYWludCB9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LXBhaW50JztcbmltcG9ydCB7IEVsZW1lbnRSZWFkZXIgfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXJlYWRlcic7XG5pbXBvcnQgeyBEb2N1bWVudEV2ZW50IH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtZXZlbnQnO1xuaW1wb3J0IHsgRG9jdW1lbnRJbnB1dCB9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LWlucHV0LWN1cnNvcic7XG5pbXBvcnQgeyBEb2N1bWVudEN1cnNvciwgRG9jdW1lbnRTZWxlY3Rpb24sIFNlbGVjdGlvblN0YXRlIH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtc2VsZWN0aW9uJztcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC11dGlsJztcbmltcG9ydCB7IERvY3VtZW50Q2hhbmdlIH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtY2hhbmdlJztcbmltcG9ydCB7IEN1cnNvclR5cGUgfSBmcm9tICcuL2ZyYW1ld29yay9yZW5kZXItZGVmaW5lJztcbmltcG9ydCB7IFNlbGVjdGlvbk92ZXJsYXlzIH0gZnJvbSAnLi9mcmFtZXdvcmsvc2VsZWN0aW9uLW92ZXJsYXlzJztcbmltcG9ydCB7XG4gICAgQnJhbmNoRWxlbWVudCxcbiAgICBEb2NNb2RlLFxuICAgIEVsZW1lbnQsXG4gICAgSUNhbmNlbFRva2VuRm4sXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgTWFyZ2luUHJvcHMsXG4gICAgT3JpZW50VHlwZSwgUGFnZUxheW91dE1vZGUsXG4gICAgUGFnZU9wdGlvbnMsXG4gICAgUG9zaXRpb24sXG4gICAgUmVjdCxcbiAgICBUZXh0QWxpZ24sXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1kZWZpbmUnO1xuaW1wb3J0IHsgRWxlbWVudFNlcmlhbGl6ZSB9IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtc2VyaWFsaXplJztcbmltcG9ydCB7XG4gICAgQ29tbUNvbnRlbnRCYXNlRWxlbWVudCxcbiAgICBEYXRhRWxlbWVudElubGluZUdyb3VwLFxuICAgIERhdGFFbGVtZW50TGVhZiwgRGF0YUVsZW1lbnRUZXh0LFxuICAgIERvY3VtZW50Qm9keUVsZW1lbnQsXG4gICAgRG9jdW1lbnRFbGVtZW50LFxuICAgIERvY3VtZW50UmVuZGVyT2JqZWN0LFxuICAgIElzSW5TaWRlRGF0YUVsZW1lbnQsXG4gICAgUGFyYWdyYXBoRWxlbWVudCxcbiAgICBQU3ltYm9sRWxlbWVudCxcbiAgICBUYWJsZUVsZW1lbnQsXG4gICAgVGFibGVSb3dFbGVtZW50LFxuICAgIFRhYmxlVXRpbCxcbiAgICBUZXh0R3JvdXBFbGVtZW50LFxuICAgIHZhbGlkYXRlRGF0YUVsZVxufSBmcm9tICcuL2ZyYW1ld29yay9pbXBsJztcbmltcG9ydCB7IGRvY3VtZW50UHJpbnQgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1wcmludCc7XG5pbXBvcnQgeyBEb2N1bWVudFRlbXBsYXRlIH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtdGVtcGxhdGUnO1xuaW1wb3J0IHsgRG9jUnVsZSB9IGZyb20gJy4vZG9jLXJ1bGVyJztcbmltcG9ydCB7IERhdGFFbGVCYXNlVGV4dFByb3BzLCBQYXJhZ3JhcGhQcm9wcywgVGV4dFByb3BzIH0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1wcm9wcyc7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtY29udGV4dCc7XG5pbXBvcnQgeyBEb2N1bWVudENvbW1lbnQgfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1jb21tZW50JztcbmltcG9ydCB7IGdldEZvY3VzVGV4dFNlZ21lbnQgfSBmcm9tIFwiLi9mcmFtZXdvcmsvZG9jdW1lbnQtc2VnbWVudGVyXCI7XG5pbXBvcnQgKiBhcyBUcmFjayBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXRyYWNlLXRyYWNraW5nJ1xuaW1wb3J0IHsgRWxlbWVudFRyYWNrTWFuYWdlIH0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC10cmFjZS1tYW5hZ2UnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4vZnJhbWV3b3JrL2V2ZW50LXN1YmplY3QnO1xuaW1wb3J0IHtcbiAgICBkZWxldGVDdXJyZW50UGFyYWdyYXBoLFxuICAgIG9uVGFibGVDb250ZXh0bWVudSxcbiAgICBwcmludERvY09uQ29udGV4dG1lbnUsXG4gICAgc2V0RGF0YUVsZW1lbnRQcm9wc1xufSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXR5cGUtaGFuZGxlcic7XG5pbXBvcnQgeyBEb2N1bWVudFByaW50T2Zmc2NyZWVuIH0gZnJvbSBcIi4vZnJhbWV3b3JrL2RvY3VtZW50LXByaW50LW9mZnNjcmVlblwiO1xuXG5cbmV4cG9ydCBjbGFzcyBDYW52YXNUZXh0RWRpdG9yIHtcbiAgICBwcml2YXRlIGNvbnRlbnRDdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG4gICAgZG9jQ3R4OiBFZGl0b3JDb250ZXh0O1xuICAgIHByaXZhdGUgZG9jQ29tbWVudDogRG9jdW1lbnRDb21tZW50O1xuICAgIHByaXZhdGUgcmVuZGVyQ29udGV4dDogUmVuZGVyQ29udGV4dDtcbiAgICBwcml2YXRlIGRvY3VtZW50UGFpbnQ6IERvY3VtZW50UGFpbnQ7XG4gICAgZWxlbWVudFJlYWRlcjogRWxlbWVudFJlYWRlcjtcbiAgICBwcml2YXRlIGRvY3VtZW50RXZlbnQ6IERvY3VtZW50RXZlbnQ7XG4gICAgcHJpdmF0ZSBkb2N1bWVudFNlbGVjdGlvbjogRG9jdW1lbnRTZWxlY3Rpb247XG4gICAgcHJpdmF0ZSBkb2N1bWVudElucHV0OiBEb2N1bWVudElucHV0O1xuICAgIHByaXZhdGUgZG9jdW1lbnRDaGFuZ2U6IERvY3VtZW50Q2hhbmdlO1xuICAgIHByaXZhdGUgc2VsZWN0aW9uT3ZlcmxheXM6IFNlbGVjdGlvbk92ZXJsYXlzO1xuICAgIHByaXZhdGUgZG9jUnVsZTogRG9jUnVsZTtcbiAgICBwcml2YXRlIGV2ZW50TWFwOiBFdmVudE1hcCA9IG5ldyBFdmVudE1hcCgpO1xuICAgIGhpc3RvcnlNYW5nZTogRWxlbWVudFRyYWNrTWFuYWdlO1xuICAgIHNlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8U2VsZWN0aW9uU3RhdGU+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBiZWZvcmVSZW5kZXJTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBhZnRlclJlbmRlclN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZTtcbiAgICAvL+aYvuekuuWPs+mUruiPnOWNlVxuICAgIG9uQ29udGV4dE1lbnVJdGVtQ2hhbmdlZDogU3ViamVjdDxFZGl0b3JDb250ZW54dFByb3BzPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25EYmxDbGlja0V2ZW50OiBTdWJqZWN0PEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25DbGlja0V2ZW50OiBTdWJqZWN0PEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25TY3JvbGxWaWV3RXZlbnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/mlofmoaPmlLnlj5jkuovku7Y65YaF5a655Y+K5qC35byP77yM5Lia5Yqh5qih5Z2X6ZyA6KaB5qC55o2u5q2k5LqL5Lu277yM5p2l6L+96Liq5b2T5YmN5paH5qGj5piv5ZCm5pS55Y+Y55qE54q25oCBXG4gICAgb25Eb2NDaGFuZ2VkRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkb2NTY3JvbGw6IEhUTUxEaXZFbGVtZW50LCBwcml2YXRlIGhvbGRTcGFjZTogSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgcnVsZUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIHByaXZhdGUgZWRpdENhbnZhc0NvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgZWRpdENhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGVkaXRJbnB1dDogSFRNTElucHV0RWxlbWVudCwgZWRpdEN1cnNvcjogSFRNTFNwYW5FbGVtZW50LCBwcml2YXRlIGN1cnNvcldyYXBwZXI6IEhUTUxEaXZFbGVtZW50KSB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSBuZXcgVmlld09wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbiA9IG5ldyBEb2N1bWVudFNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmRvY0N0eCA9IG5ldyBFZGl0b3JDb250ZXh0KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmNvcHlSaWdodEluZm8gPSAn5LiH6L6+5L+h5oGv55S15a2Q55eF5Y6G57yW6L6R5ZmoLHd3dy53b25kZXJzZ3JvdXAuY29tJztcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kcmF3Q2hhclJlY3RDb2xvciA9ICdncmVlbic7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuc2hvd0xpbmVSZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NTcGFjZSA9IDIwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnJldmlld1dpbmRvd1dpZHRoID0gMjAwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRlZmF1bHRGb250TmFtZSA9ICflrovkvZMnXG4gICAgICAgIC8vdGhpcy52aWV3T3B0aW9ucy5zY2FsZSA9IDI7XG4gICAgICAgIC8v5pW05Liq55S75biD55qE5bC65a+4XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzID0ge1xuICAgICAgICAgICAgd2lkdGg6IDEwMDAsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZ2V0Q29udGFpbmVySGVpZ2h0KCkuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIgPSB7XG4gICAgICAgICAgICBpZDogJzY2NjYnLFxuICAgICAgICAgICAgbmFtZTogJ+euoeeQhuWRmCdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jcmVhdGVEb2NWaWV3ZXIoKTtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50ID0gbmV3IERvY3VtZW50Q29tbWVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuY29udGVudEN0eCA9IGVkaXRDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgIHRoaXMucmVuZGVyQ29udGV4dCA9IG5ldyBSZW5kZXJDb250ZXh0KG5ldyBQYWludENvbnRlbnQodGhpcy5jb250ZW50Q3R4KSk7XG4gICAgICAgIHRoaXMucmVuZGVyQ29udGV4dC5pbml0KHsgd2lkdGg6IDUwMCwgaGVpZ2h0OiA1MDAsIHNjYWxlOiAxIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25PdmVybGF5cyA9IG5ldyBTZWxlY3Rpb25PdmVybGF5cyh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50ID0gbmV3IERvY3VtZW50UGFpbnQodGhpcy5yZW5kZXJDb250ZXh0LCB0aGlzLmRvY0N0eCwgdGhpcy5zZWxlY3Rpb25PdmVybGF5cy5zZWxlY3RlZFNldHMpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWFkZXIgPSBuZXcgRWxlbWVudFJlYWRlcih0aGlzLmRvY0N0eCwgdGhpcy5yZW5kZXJDb250ZXh0KTtcbiAgICAgICAgdGhpcy5kb2NSdWxlID0gbmV3IERvY1J1bGUodGhpcy5ydWxlQ2FudmFzLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dCA9IG5ldyBEb2N1bWVudElucHV0KGVkaXRJbnB1dCwgZWRpdEN1cnNvciwgY3Vyc29yV3JhcHBlciwgdGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlID0gbmV3IERvY3VtZW50Q2hhbmdlKHRoaXMuZWxlbWVudFJlYWRlciwgdGhpcy5kb2NDdHgsIHRoaXMuZG9jQ29tbWVudCwgdGhpcy5kb2N1bWVudElucHV0KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50ID0gbmV3IERvY3VtZW50RXZlbnQoZWRpdENhbnZhcywgdGhpcy5kb2N1bWVudFBhaW50LCB0aGlzLmRvY0N0eCwgdGhpcy5kb2N1bWVudElucHV0KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UgPSBuZXcgRWxlbWVudFRyYWNrTWFuYWdlKHRoaXMuZG9jQ3R4LCB0aGlzLmVsZW1lbnRSZWFkZXIpO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuaGl0SW5mb0NoYW5nZWQuc3Vic2NyaWJlKChoaXRJbmZvKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhpdEluZm9DaGFuZ2VkKGhpdEluZm8pXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuY2xpY2tFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2NDbGlja0hhbmRsZShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuZGJsQ2xpY2tFdmVudC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2NEYmxDbGlja0hhbmRsZShldnQpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuY2hhbmdlQ3Vyc29yLnN1YnNjcmliZSgoY3Vyc29yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUN1cnNvcihjdXJzb3IpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuY29udGV4dE1lbnUuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29udGV4dE1lbnUoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LnRyYWNrVGlwc0NoYW5nZWQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRvY0N0eC5kb2NDaGFuZ2UgPSB0aGlzLmRvY3VtZW50Q2hhbmdlO1xuICAgICAgICB0aGlzLmxpc3RlbkNvbnRhaW5lckhlaWdodCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2NSdWxlKCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnN5bmNSZWZyZXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mbHVzaFRvU2NoZWR1bGUoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLm9uQ2hhbmdlLnN1YnNjcmliZSgodHlwZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNldFZpZXdlcih0eXBlKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7moIflsLpcbiAgICAgKi9cbiAgICByZWZyZXNoRG9jUnVsZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGRvY0xlZnQgPSAwLy9Db21tb25VdGlsLmdldE9mZnNldFgodGhpcy5lZGl0Q2FudmFzLnBhcmVudEVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgICBsZXQgcGFnZVBMID0gMCwgcGFnZVBSID0gMDtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRQYWludC5kb2NDb250YWluZXIpIHtcbiAgICAgICAgICAgIGRvY0xlZnQgKz0gdGhpcy5kb2N1bWVudFBhaW50LmRvY0NvbnRhaW5lci5yZWN0Lng7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZG9jQ3R4LmRvY3VtZW50Py5wcm9wcz8ucGFkZGluZykge1xuICAgICAgICAgICAgY29uc3QgeyBsZWZ0LCByaWdodCB9ID0gdGhpcy5kb2NDdHguZG9jdW1lbnQucHJvcHMucGFkZGluZztcbiAgICAgICAgICAgIHBhZ2VQTCA9IGxlZnQ7XG4gICAgICAgICAgICBwYWdlUFIgPSByaWdodDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY1J1bGUuc2V0UnVsZU9wdGlvbnMoeyB3aWR0aDogdGhpcy52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGgsIHBhZ2VQTCwgcGFnZVBSLCBkb2NMZWZ0IH0pO1xuICAgICAgICB0aGlzLmRvY1J1bGUucmVmcmVzaFJ1bGUoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVEb2NWaWV3ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvID0gdGhpcy5tZWFzdXJlTU1Ub1BpeHMoKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLmZsb29yKDIxMCAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5mbG9vcigyOTcgKiB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzID0gbmV3IFBhZ2VPcHRpb25zKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmRvY1Njcm9sbC5vbnNjcm9sbCA9IChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlldyhldnQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1lYXN1cmVNTVRvUGl4cygpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGl2LnN0eWxlLndpZHRoID0gJzEwMG1tJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICAgICAgICByZXR1cm4gd2lkdGggLyAxMDA7XG4gICAgfVxuXG4gICAgZmx1c2hUYXNrITogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgICAvL+aYr+WQpueUqOS6jui3n+i4quS/ruaUueeKtuaAge+8jOWcqOWIneWni+WMluOAgeaVsOaNruWFg+i1i+WAvOetieaDheWGteS4jemcgOimgei3n+i4quS/ruaUueagh+W/l1xuICAgIHByaXZhdGUgdHJhY2tDaGFuZ2VTdGF0ZSA9IHRydWU7XG5cbiAgICBmbHVzaFRvU2NoZWR1bGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY0N0eC5yZWZyZXNoVHlwZSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgICAgICAvL+inpuWPkeWKqOaAgeiEmuacrFxuICAgICAgICAgICAgdGhpcy5kb2NDdHguZHluYW1pY0Z1bmMuaW52b2tlZFNjcmlwdHMoKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckRvY0NoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZsdXNoVGFzaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmx1c2hUYXNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZmx1c2hUYXNrID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBjYiA9IHRoaXMuZG9jQ3R4LnBhaW50ZWRDYWxsYmFjaztcbiAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9jQ3R4LnNldFBhaW50ZWRDYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLmdlbmVyYXRlVHJhY2soKTtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLmdlbmVyYXRlU2VsZWN0aW9uTG9nKCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmx1c2hUYXNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbHVzaFRhc2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Kem5Y+R5paH5qGj5pS55Y+Y5LqL5Lu2XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICB0cmlnZ2VyRG9jQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudHJhY2tDaGFuZ2VTdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Eb2NDaGFuZ2VkRXZlbnQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZu5Ye95pWw5omn6KGM5pe277yM5LiN6Kem5Y+Rb25Eb2NDaGFuZ2VcbiAgICAgKiBAcGFyYW0gZm5cbiAgICAgKi9cbiAgICBub0VmZmVjdENoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy50cmFja0NoYW5nZVN0YXRlO1xuICAgICAgICB0aGlzLnRyYWNrQ2hhbmdlU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmFja0NoYW5nZVN0YXRlID0gcHJldjtcbiAgICB9XG5cblxuICAgIGxvYWREb2MoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIFRyYWNrLnN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVhZGVyLnJlYWQoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRG9jUnVsZSgpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UuY2xlYXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pu05paw5rua5Yqo6auY5bqmXG4gICAgICogMS7mlofmoaPlhoXlrrnpq5jluqZcbiAgICAgKiAyLuaWh+aho+e8qeaUvuWAvFxuICAgICAqL1xuICAgIHNldFNjcm9sbFNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG9sZFNwYWNlLnN0eWxlLmhlaWdodCA9IHRoaXMuZG9jdW1lbnRQYWludC5nZXREb2N1bWVudENvbnRhaW5lckhlaWdodCgpICsgJ3B4JztcbiAgICB9XG5cbiAgICBzY3JvbGxWaWV3KGV2dDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgICAgY29uc3QgdG9wID0gTWF0aC5mbG9vcih0YXJnZXQuc2Nyb2xsVG9wKTtcbiAgICAgICAgdGhpcy5lZGl0Q2FudmFzQ29udGFpbmVyLnN0eWxlLnRvcCA9IHRvcCArICdweCc7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZSgwLC1cIiArIHRvcCArIFwicHgpXCI7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSA9IHRvcCAvIHRoaXMudmlld09wdGlvbnMuc2NhbGU7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5yZWZyZXNoVmlldygpO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQub25TY3JvbGxWaWV3KCk7XG4gICAgICAgIHRoaXMub25TY3JvbGxWaWV3RXZlbnQubmV4dCh0b3ApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIt+aWsOaWh+aho++8jOmHjeaWsOa1i+mHj+W5tuiuvue9ruWFieagh+etiVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWZyZXNoRG9jdW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY0N0eC5yZWZyZXNoVHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZVBhaW50ID0gdGhpcy5kb2NDdHgucmVmcmVzaFR5cGUgPT09ICdjb250ZW50JztcbiAgICAgICAgaWYgKHJlUGFpbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uY2xlYXJTbmFwc2hvdCgpO1xuICAgICAgICAgICAgdGhpcy5kb2NDb21tZW50LnJlYWRDb21tZW50cygpO1xuICAgICAgICAgICAgVHJhY2suc3VwcHJlc3NUcmFja2luZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LnJlUGFnZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5iZWZvcmVSZW5kZXJTdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KHJlUGFpbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIt+aWsOe7mOWItuaWh+aho1xuICAgICAqIFRPRE866YCJ5Yy65pS55Y+Y5pe277yM55u05o6l6LCD55So6K+l5pa55rOVXG4gICAgICogQHBhcmFtIHJlUGFpbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZnJlc2hWaWV3KHJlUGFpbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3NDaGFuZ2VkID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbi51cGRhdGVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk92ZXJsYXlzLmdldFNlbGVjdGlvblRyZWVEYXRhKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5yZWZyZXNoVmlldyhyZVBhaW50KTtcbiAgICAgICAgdGhpcy5zZXRTY3JvbGxTaXplKCk7XG4gICAgICAgIHRoaXMuc2V0Q3Vyc29yKCk7XG4gICAgICAgIHNzQ2hhbmdlZCAmJiB0aGlzLnNlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgdGhpcy5kb2NSdWxlLnJlZnJlc2hSdWxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaXRJbmZvQ2hhbmdlZChoaXRJbmZvOiB7IHN0YXJ0SGl0SW5mbzogSGl0RXZlbnRJbmZvLCBlbmRIaXRJbmZvOiBIaXRFdmVudEluZm8gfSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNldFNlbGVjdGlvblN0YXRlKGhpdEluZm8pO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lhYnmoIdcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEN1cnNvcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXRoaXMuY2FuU2V0Q3Vyc29yKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5zZXRDdXJzb3JWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0YXJ0UmVnaW9uLCBoaXREb2NJbmRleCB9ID0gdGhpcy5kb2N1bWVudEV2ZW50LnN0YXJ0SGl0SW5mbyBhcyBIaXRFdmVudEluZm87XG4gICAgICAgIGNvbnN0IGN1cnNvclBvcyA9IERvY3VtZW50Q3Vyc29yLmdldEVsZW1lbnRDdXJzb3JQb3Moc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgc3RhcnRSZWdpb24sIGhpdERvY0luZGV4KTtcbiAgICAgICAgdGhpcy5kb2NDdHguY3Vyc29yUmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChjdXJzb3JQb3MucmVjdCk7XG4gICAgICAgIGNvbnN0IGFiUG9zID0gdGhpcy50cmFuc1RvQWJzb2x1dGVQb3MoRWxlbWVudFV0aWwuY2xvbmVSZWN0KGN1cnNvclBvcy5yZWN0KSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5zZXRDdXJzb3JQb3NpdGlvbihhYlBvcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY3Vyc29yUG9zID0gY3Vyc29yUG9zLnJlY3Q7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5pbnZva2VDdXJzb3Ioc3RhcnRDb250cm9sKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bCG55u45a+55Z2Q5qCH5L2N572u6L2s5o2i5Li657ud5a+55Z2Q5qCH5L2NXG4gICAgICog55Sx5LqO57yp5pS+77yM5a+86Ie057ud5a+55L2N572uPeebuOWvueS9jee9ripzY2FsZVxuICAgICAqIEBwYXJhbSBwb3NcbiAgICAgKi9cbiAgICB0cmFuc1RvQWJzb2x1dGVQb3M8VCBleHRlbmRzIFBvc2l0aW9uIHwgUmVjdD4ocG9zOiBUKTogVCB7XG4gICAgICAgIGNvbnN0IHsgc2NhbGUgfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIGNvbnN0IG9mZnNldFggPSB0aGlzLmRvY3VtZW50UGFpbnQuZG9jQ29udGFpbmVyLnJlY3QueDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IHRoaXMuZG9jdW1lbnRQYWludC5kb2NDb250YWluZXIucmVjdC55O1xuICAgICAgICBwb3MueCA9IHBvcy54ICogc2NhbGU7XG4gICAgICAgIHBvcy55ID0gcG9zLnkgKiBzY2FsZTtcbiAgICAgICAgaWYgKCdoZWlnaHQnIGluIHBvcykge1xuICAgICAgICAgICAgcG9zLmhlaWdodCA9IHBvcy5oZWlnaHQgKiBzY2FsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreaYr+WQpuWFieagh+WPr+S7peiuvue9ruaOpeWPl+e8lui+kVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYW5TZXRDdXJzb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZWRpdGFibGUgfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICFlZGl0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRGVzaWduKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvL+a1j+iniOaooeW8j1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLlZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvL+ihqOWNleaooeW8j+S4i++8jOWmguaenOS4jeWcqOaVsOaNruWFg+e0oOS4re+8jOWImeS4jeaYvuekuuWFieagh1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICBpZiAoIUlzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFFbGVtZW50VXRpbC52ZXJpZnlIaXRhYmxlKHN0YXJ0Q29udHJvbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvL+ihqOWNleaooeW8j+S4i++8jOaVsOaNruWFg+S4jeWPr+e8lui+kVxuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0ICYmIElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFFbGUgPSBFbGVtZW50VXRpbC5nZXREYXRhRWxlbWVudChzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKGRhdGFFbGUgJiYgIWRhdGFFbGUucHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5pS55YWJ5qCHXG4gICAgICogQHBhcmFtIG5ld0N1cnNvclxuICAgICAqL1xuICAgIHByaXZhdGUgY2hhbmdlQ3Vyc29yKG5ld0N1cnNvcjogQ3Vyc29yVHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRDYW52YXMuc3R5bGUuY3Vyc29yID0gbmV3Q3Vyc29yO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmN1cnNvciA9IG5ld0N1cnNvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlofmoaPngrnlh7vkuovku7ZcbiAgICAgKi9cbiAgICBwcml2YXRlIGRvY0NsaWNrSGFuZGxlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEN1cnNvcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk92ZXJsYXlzLmdldFNlbGVjdGlvblRyZWVEYXRhKCk7XG4gICAgICAgIHRoaXMub25DbGlja0V2ZW50Lm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlofmoaPlj4zlh7vkuovku7ZcbiAgICAgKiDlpITnkIblhajpgInlvZPliY3mrrXokL1cbiAgICAgKi9cbiAgICBwcml2YXRlIGRvY0RibENsaWNrSGFuZGxlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXMgPSBnZXRGb2N1c1RleHRTZWdtZW50KHRoaXMuc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25EYmxDbGlja0V2ZW50Lm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3lhYnmoIfmiYDlnKjnmoTmlbDmja7lhYNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldEN1cnJlbnREYXRhRWxlbWVudCgpOiBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXRlID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wgfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoIUVsZW1lbnRVdGlsLnZlcmlmeUhpdGFibGUoc3RhcnRDb250cm9sKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldFBhcmVudChzdGFydENvbnRyb2wsIHZhbGlkYXRlRGF0YUVsZSkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lvZPliY3lhYnmoIfmiYDlnKjnmoTmlbDmja7lhYPnmoTlgLxcbiAgICAgKiBAcGFyYW0gdmFsXG4gICAgICovXG4gICAgc2V0Q3VycmVudERhdGFFbGVtZW50VmFsdWUodmFsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IHRoaXMuZ2V0Q3VycmVudERhdGFFbGVtZW50KCk7XG4gICAgICAgIGlmIChkYXRhRWxlKSB7XG4gICAgICAgICAgICBkYXRhRWxlPy5zZXRWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5pWw5o2u5YWD5L2N572uXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldERhdGFFbGVtZW50UG9zaXRpb24oZWxlbWVudDogTGVhZkVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnREZWNvcmF0ZVJlbmRlciA9IGVsZW1lbnQucGFpbnRSZW5kZXJzWzBdXG4gICAgICAgIGlmICghc3RhcnREZWNvcmF0ZVJlbmRlcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign5pyq5om+5Yiw5pWw5o2u5YWD5byA5aeL5riy5p+T5YWD57SgJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB4LCBoZWlnaHQsIHksIHdpZHRoIH0gPSBzdGFydERlY29yYXRlUmVuZGVyLnJlY3Q7XG4gICAgICAgIGNvbnN0IHBvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3Moc3RhcnREZWNvcmF0ZVJlbmRlcilcbiAgICAgICAgcmV0dXJuIHsgeDogcG9zLnggKyB3aWR0aCwgeTogcG9zLnkgKyBoZWlnaHQgKyA1LCB0cmFuc2xhdGVZOiB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaWh+aho+aooeWei1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0RG9jU2NoZW1hKCk6IGFueSB7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZSh0aGlzLmRvY0N0eC5kb2N1bWVudCwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZ2V0RG9jU2NoZW1hSlNPTigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByZXMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldERvY1NjaGVtYSgpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlj7PplK7oj5zljZVcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICovXG4gICAgb25Db250ZXh0TWVudShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUgfSA9IHRoaXMuZG9jdW1lbnRTZWxlY3Rpb247XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50RXZlbnQgPSBuZXcgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICBlbGVtZW50RXZlbnQuc291cmNlID0gc3RhcnRDb250cm9sO1xuICAgICAgICBEb2N1bWVudEV2ZW50Lmludm9rZUV2ZW50KCdFbGVtZW50Q29udGV4dE1lbnUnLCBzdGFydENvbnRyb2wsIGVsZW1lbnRFdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB7IHg6IGV2dC5vZmZzZXRYICsgMTAsIHk6IGV2dC5vZmZzZXRZLCB0cmFuc2xhdGVZOiB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVkgfTtcbiAgICAgICAgdGhpcy5vbkNvbnRleHRNZW51SXRlbUNoYW5nZWQubmV4dCh7IHBvczogcG9zaXRpb24sIG1lbnVzOiBlbGVtZW50RXZlbnQubWVudXMgfSlcbiAgICB9XG5cbiAgICByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGxpc3RlbkNvbnRhaW5lckhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRG9jSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuZG9jU2Nyb2xsKTtcbiAgICAgICAgdGhpcy51cGRhdGVEb2NIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURvY0hlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmdldENvbnRhaW5lckhlaWdodCgpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGlmICh3aWR0aCA8IHRoaXMudmlld09wdGlvbnMuQ29udGVudFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy53aWR0aCA9IHRoaXMudmlld09wdGlvbnMuQ29udGVudFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8v6YCC5bqU6aG15a695qih5byPXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnBhZ2VMYXlvdXRNb2RlID09PSAnZml0LXBhZ2UnKSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9ICh0aGlzLnZpZXdPcHRpb25zLnZpZXdTZXR0aW5ncy53aWR0aCAtIDgwKSAvIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoO1xuICAgICAgICAgICAgdGhpcy5fc2NhbGVWaWV3KHNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0Vmlld2VyKCk7XG4gICAgfVxuXG4gICAgcmVzZXRWaWV3ZXIodHlwZTogJ2RlbWFuZCcgfCAnZm9yY2UnIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUeXBlID0gdHlwZSA9PT0gJ2ZvcmNlJyA/ICdjb250ZW50JyA6ICdhcHBlYXJhbmNlJztcbiAgICAgICAgaWYgKHJlZnJlc2hUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnB1Yk9uQ2hhbmdlKCdzZWxmJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJDdHgoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LmxheW91dFBhZ2VzKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY1J1bGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnvKnmlL7op4blm75cbiAgICAgKiBAcGFyYW0gc2NhbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHNjYWxlKHNjYWxlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy/oh6rpgILlupTpobXlrr3mqKHlvI/ml7bvvIzlpoLmnpzmiYvliqjosIPmlbTnvKnmlL7mr5TkvovvvIzliJnovazlj5jkuLrljZXpobXmqKHlvI9cbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMucGFnZUxheW91dE1vZGUgPT09ICdmaXQtcGFnZScpIHtcbiAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMucGFnZUxheW91dE1vZGUgPSAnc2luZ2xlUGFnZSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2NhbGVWaWV3KHNjYWxlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnvKnmlL7op4blm75cbiAgICAgKiBAcGFyYW0gc2NhbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgX3NjYWxlVmlldyhzY2FsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgc2NhbGUgPSBzY2FsZSA8IDAuNSA/IDAuNSA6IHNjYWxlO1xuICAgICAgICBzY2FsZSA9IHNjYWxlID4gMiA/IDIgOiBzY2FsZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlbmRlckN0eCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2NSdWxlKCk7XG4gICAgICAgIHRoaXMuZmx1c2hUb1NjaGVkdWxlKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5sYXlvdXRQYWdlcygpO1xuICAgICAgICByZXR1cm4gc2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVSZW5kZXJDdHgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2NhbGUsIHZpZXdTZXR0aW5nczogeyB3aWR0aCwgaGVpZ2h0IH0gfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMucmVuZGVyQ29udGV4dC51cGRhdGUoeyB3aWR0aCwgaGVpZ2h0LCBzY2FsZSB9KTtcbiAgICB9XG5cbiAgICBnZXRDb250YWluZXJIZWlnaHQoKTogeyBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlciB9IHtcbiAgICAgICAgbGV0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5kb2NTY3JvbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7IGhlaWdodDogTWF0aC5mbG9vcihoZWlnaHQpLCB3aWR0aDogTWF0aC5mbG9vcih3aWR0aCkgfTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWcqOW9k+WJjeS9jee9ruaPkuWFpeihqOagvFxuICAgICAqIEBwYXJhbSByb3dzXG4gICAgICogQHBhcmFtIGNvbHNcbiAgICAgKi9cbiAgICBpbnNlcnRUYWJsZShyb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YiA9IFRhYmxlRWxlbWVudC5jcmVhdGVUYWJsZShyb3dzLCBjb2xzKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRUYWJsZSh0Yik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omT5Y2w5omA5pyJ5paH5qGjXG4gICAgICovXG4gICAgcHJpbnRBbGxQYWdlcygpOiB2b2lkIHtcbiAgICAgICAgZG9jdW1lbnRQcmludC5wcmludCh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY0N0eClcbiAgICB9XG5cbiAgICBnZXRQcmludE5vZGVzKCk6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudFByaW50LmV4cG9ydENhbnZhc05vZGVzKHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMsIHRoaXMuZG9jQ3R4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmlofmoaNcbiAgICAgKi9cbiAgICBjbGVhckRvYygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jQ3R4LmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmNsZWFySGl0SW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ3R4LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5paw5bu65paH5qGjXG4gICAgICogQHBhcmFtIGRvY1xuICAgICAqL1xuICAgIGNyZWF0ZU5ld0RvYyhkb2M6IERvY3VtZW50RWxlbWVudCB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIC8vdGhpcy5kb2NDdHguY2xlYXIoKTtcbiAgICAgICAgY29uc3QgbmV3RG9jID0gZG9jID8/IERvY3VtZW50VGVtcGxhdGUuY3JlYXRlQTREb2MoKTtcbiAgICAgICAgLy8gdGhpcy5lbGVtZW50UmVhZGVyLnNldERvY3VtZW50KG5ld0RvYyk7XG4gICAgICAgIC8vIHRoaXMucmVmcmVzaERvY3VtZW50KCdjb250ZW50Jyk7XG4gICAgICAgIHRoaXMubG9hZERvYyhFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZShuZXdEb2MsIHRoaXMudmlld09wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0N0eC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jbGVhclN1YkV2ZW50KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZmx1c2hUYXNrID0gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumAieWMuuaWh+acrOWxnuaAp1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0U2VsZWN0aW9uVGV4dEdyb3VwUHJvcHMoKTogVGV4dFByb3BzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXRlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlO1xuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbC5wcm9wcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJhbmdlID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RTZWxlY3RlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBFbGVtZW50VXRpbC5nZXRMYXN0U2VsZWN0ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgIGlmIChzdGFydFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydFJhbmdlLnRhcmdldC5wcm9wcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3Rpb25QYXJhUHJvcHMoKTogUGFyYWdyYXBoUHJvcHMgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXNlbGVjdGlvblN0YXRlIHx8ICFzZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICByZXR1cm4gcGFyYS5wcm9wcztcbiAgICB9XG5cblxuICAgIHNldFRleHRGb3JtYXQobmV3UHJvcHM6IFBhcnRpYWw8VGV4dFByb3BzPik6IHZvaWQge1xuICAgICAgICBEb2N1bWVudENoYW5nZS5zZXRUZXh0U3R5bGUodGhpcy5zZWxlY3Rpb25TdGF0ZSwgKHQpID0+IHtcbiAgICAgICAgICAgIHQuc2V0Rm9ybWF0KG5ld1Byb3BzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOW8gOWQr+agvOW8j+WIt1xuICAgICAqL1xuICAgIGVuYWJsZUZvcm1hdEJydXNoKCk6IElDYW5jZWxUb2tlbkZuIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29udHJvbCA9IHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sO1xuICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdHlsZSA9IHN0YXJ0Q29udHJvbC5wcm9wcy5jbG9uZShudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbk92ZXJsYXlDb2xvciA9IHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvcjtcbiAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvciA9IFwicmdiYSgwLDU4LDE0MCwwLjgpXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbFRva2VuOiBJQ2FuY2VsVG9rZW5GbiA9IHt9O1xuICAgICAgICAgICAgY29uc3Qgc3ViID0gdGhpcy5vbkNsaWNrRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRleHRGb3JtYXQoc2VsZWN0ZWRTdHlsZSk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yID0gc2VsZWN0aW9uT3ZlcmxheUNvbG9yO1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxUb2tlbi5vbkZpbmlzaCkge1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxUb2tlbi5vbkZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FuY2VsVG9rZW4uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvciA9IHNlbGVjdGlvbk92ZXJsYXlDb2xvcjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gY2FuY2VsVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q616JC95a+56b2QXG4gICAgICogQHBhcmFtIGFsaWduXG4gICAgICovXG4gICAgc3dpdGNoUGFyYUFsaWduKGFsaWduOiBUZXh0QWxpZ24pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2V0dGVyRnVuYyA9IChwYXJhUHJvcHM6IFBhcmFncmFwaFByb3BzKSA9PiB7XG4gICAgICAgICAgICBwYXJhUHJvcHMudGV4dEFsaWduID0gYWxpZ247XG4gICAgICAgIH07XG4gICAgICAgIERvY3VtZW50Q2hhbmdlLnNldFBhcmFBbGlnbih0aGlzLnNlbGVjdGlvblN0YXRlLCBzZXR0ZXJGdW5jKTtcbiAgICB9XG5cblxuICAgIGNvbWJpbmVDZWxsKCk6IHZvaWQge1xuICAgICAgICBUYWJsZVV0aWwubWVyZ2VDZWxscyh0aGlzLnNlbGVjdGlvblN0YXRlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+aNouW9k+WJjeauteiQvemhueebruespuWPt+eKtuaAgVxuICAgICAqL1xuICAgIHNldFBhcmFncmFwaE51bWJlclR5cGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2Uuc2V0UGFyYWdyYXBoTnVtYmVyVHlwZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIoOmZpOW9k+WJjeaJueazqFxuICAgICAqIEBwYXJhbSBpZFxuICAgICAqL1xuICAgIHJlbW92ZUNvbW1lbnQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQucmVtb3ZlQ29tbWVudChpZCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTnhKbngrnmiYDlnKjnmoTmibnms6hcbiAgICAgKi9cbiAgICByZW1vdmVDdXJyZW50Q29tbWVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29tbWVudCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudCh0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCwgKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIENvbW1Db250ZW50QmFzZUVsZW1lbnQpKSBhcyBDb21tQ29udGVudEJhc2VFbGVtZW50O1xuICAgICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KGNvbW1lbnQucHJvcHMuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5om55rOoXG4gICAgICovXG4gICAgaW5zZXJ0Q29tbWVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRDb21tZW50KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5riF6Zmk5omA5pyJ5om55rOoXG4gICAgICovXG4gICAgY2xlYXJBbGxDb21tZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50LmNsZWFyQWxsQ29tbWVudHMoKTtcbiAgICB9XG5cblxuICAgIGN1dFRhYmxlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUodGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wsIFRhYmxlUm93RWxlbWVudCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCB0YiA9IHJvdz8ucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgVGFibGVVdGlsLmN1dFRhYmxlKHRiLCByb3cuZ2V0SW5kZXgoKSk7XG4gICAgICAgIGNvbnN0IHBhcmEgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICB0Yi5wYXJlbnQuYWRkQ2hpbGQocGFyYSwgdGIuZ2V0SW5kZXgoKSArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIneWni+WMluW9k+WJjeaWh+aho+WIm+W7uueUqOaIt+S/oeaBr1xuICAgICAqIOS4gOS7veaWh+aho+WPqumcgOimgeiuvue9ruS4gOasoVxuICAgICAqL1xuICAgIGluaXRDdXJyZW50RG9jVXNlcih1c2VySWQ6IHN0cmluZywgdXNlck5hbWU6IHN0cmluZywgZGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIFRyYWNrLnN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5kb2NDdHguZG9jdW1lbnQ7XG4gICAgICAgICAgICBkb2MucHJvcHMuY3JlYXRlVXNlcklkID0gdXNlcklkO1xuICAgICAgICAgICAgZG9jLnByb3BzLmNyZWF0ZVVzZXJOYW1lID0gdXNlck5hbWU7XG4gICAgICAgICAgICBkb2MucHJvcHMuY3JlYXRlRGF0ZSA9IGRhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmqjOivgeaWh+aho+WGheWuuVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5jbGVhckFsbFZhbGlkYXRlcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudENoYW5nZS52YWxpZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgFxuICAgICAqL1xuICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLnVuZG8oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmgaLlpI1cbiAgICAgKi9cbiAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZS5yZWRvKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Y+v5Lul5pKk6ZSAXG4gICAgICovXG4gICAgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeU1hbmdlLmNhblVuZG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Y+v5Lul5oGi5aSNXG4gICAgICovXG4gICAgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeU1hbmdlLmNhblJlZG87XG4gICAgfVxuXG4gICAgc3dpdGNoVHJhY2tDaGFuZ2VzKGVsZUN0eDogQnJhbmNoRWxlbWVudCB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGVsZUN0eCA9IGVsZUN0eCB8fCB0aGlzLmRvY0N0eC5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgYm9keSA9IGVsZUN0eC50cmVlRmluZChpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50O1xuICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgYm9keS50cmFja0NoYW5nZXMgPSAhYm9keS50cmFja0NoYW5nZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsGRvYy1ib2R5Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdHJhY2tUaXBzQ2hhbmdlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRFdmVudC50cmFja1RpcHNDaGFuZ2VkO1xuICAgIH1cblxuICAgIHN3aXRjaEZ1bGxWaWV3UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXcgPSAhdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXc7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRKU09OKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLmdldFNlbGVjdGVkSlNPTih0aGlzLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY29weVNlcmlhbGl6ZVN0ciA9IEVsZW1lbnRTZXJpYWxpemUuZ2V0U2VsZWN0ZWRTdHJ1Y3QodGhpcy5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyhjb3B5U2VyaWFsaXplU3RyIGFzIEJyYW5jaEVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rue6uOW8oOaWueWQkVxuICAgICAqIEBwYXJhbSBvcmllbnRhdGlvblxuICAgICAqL1xuICAgIHNldFBhcGVyT3JpZW50KG9yaWVudGF0aW9uOiBPcmllbnRUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzLm9yaWVudCA9IG9yaWVudGF0aW9uO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy5vcmllbnQgPSBvcmllbnRhdGlvbjtcbiAgICAgICAgdGhpcy5yZXNldFZpZXdlcignZm9yY2UnKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rue6uOW8oOWkp+WwjyzljZXkvY3kuLrmr6vnsbMobW0pXG4gICAgICogQHBhcmFtIHdpZHRoXG4gICAgICogQHBhcmFtIGhlaWdodFxuICAgICAqL1xuICAgIHNldFBhcGVyU2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NQcm9wcyA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzO1xuICAgICAgICBkb2NQcm9wcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBkb2NQcm9wcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5mbG9vcihoZWlnaHQgKiB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzID0gbmV3IFBhZ2VPcHRpb25zKHdpZHRoLCBoZWlnaHQsIGRvY1Byb3BzLm9yaWVudCk7XG4gICAgICAgIHRoaXMucmVzZXRWaWV3ZXIoJ2ZvcmNlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5by65Yi25o2i6aG156ymXG4gICAgICovXG4gICAgaW5zZXJ0UGFnZUJyZWFrUGFyYSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRQYWdlQnJlYWtQYXJhKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pi+56S65b2T5YmN5YWD57Sg5Yiw6KeG5Zu+5LitXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKi9cbiAgICBicmluZ1RvVmlldyhlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50ID8gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChlbGVtZW50KSA6IGVsZW1lbnQgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24oZWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlck9iaiA9IGVsZS5wYWludFJlbmRlcnNbMF07XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIocmVuZGVyT2JqLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGRvY1JlbmRlci5nZXRJbmRleCgpO1xuICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gRG9jdW1lbnRDdXJzb3IuZ2V0RWxlbWVudEN1cnNvclBvcyhlbGUsIDAsIHJlZ2lvbiwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdXJyb3VuZChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChjdXJzb3JQb3MucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZID4gMCAmJiBjdXJzb3JQb3MucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZIDwgdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kb2NTY3JvbGwuc2Nyb2xsVG8oY3Vyc29yUG9zLnJlY3QueCwgY3Vyc29yUG9zLnJlY3QueSAtIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lvZPliY3mlofmoaPpobXovrnot51cbiAgICAgKi9cbiAgICBzZXREb2N1bWVudE1hcmdpbihwYWdlTWFyZ2luOiBQYXJ0aWFsPE1hcmdpblByb3BzPik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZG9jQ3R4LmRvY3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQudXBkYXRlTWFyZ2luKHBhZ2VNYXJnaW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeWFg+e0oFxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50XG4gICAgICogQHBhcmFtIHRhcmdldE9mZnNldFxuICAgICAqIEBwYXJhbSBkZXN0RWxlQXJyYXlcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGluc2VydEVsZW1lbnQodGFyZ2V0RWxlbWVudDogRWxlbWVudCwgdGFyZ2V0T2Zmc2V0OiBudW1iZXIsIGRlc3RFbGVBcnJheTogQXJyYXk8RWxlbWVudD4pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRDaGFuZ2UuaW5zZXJ0RWxlbWVudCh0YXJnZXRFbGVtZW50LCB0YXJnZXRPZmZzZXQsIGRlc3RFbGVBcnJheSk7XG4gICAgfVxuXG4gICAgc2hvd0hpc3RvcnkoKTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS5sb2coSGlzdG9yeS5vcHMpO1xuICAgICAgICBjb25zdCBuZXdQYXJhID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcFN5bWJvbCA9IG5ldyBQU3ltYm9sRWxlbWVudCgpO1xuICAgICAgICBuZXdQYXJhLmFkZENoaWxkKG5ldyBUZXh0R3JvdXBFbGVtZW50KCkpO1xuICAgICAgICBuZXdQYXJhLmFkZENoaWxkKHBTeW1ib2wpO1xuICAgICAgICBjb25zdCBpbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChwU3ltYm9sKTtcbiAgICAgICAgY29uc29sZS5sb2coaW5kZXgpXG4gICAgICAgIGNvbnNvbGUubG9nKEVsZW1lbnRVdGlsLmdldENvbnRyb2xCeUluZGV4KG5ld1BhcmEsIHsgY3VyckluZGV4OiAtMSwgaW5kZXggfSkpO1xuICAgIH1cblxuICAgIGdldENvbnRyb2xCeUlkKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldENvbnRyb2xCeUluZGV4KHRoaXMuZG9jQ3R4LmRvY3VtZW50LCB7IGN1cnJJbmRleDogLTEsIGluZGV4IH0pO1xuICAgIH1cblxuICAgIGdldENvbnRyb2xJZChlbGU6IEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChlbGUpO1xuICAgIH1cblxuICAgIHN3aXRjaFBhZ2VMYXlvdXQobW9kZTogUGFnZUxheW91dE1vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5wYWdlTGF5b3V0TW9kZSA9IG1vZGU7XG4gICAgICAgIGlmIChtb2RlID09PSAnZml0LXBhZ2UnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURvY0hlaWdodCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmx1c2hUb1NjaGVkdWxlKCk7XG4gICAgfVxuXG4gICAgdGVzdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJpbnQgPSBuZXcgRG9jdW1lbnRQcmludE9mZnNjcmVlbigpO1xuICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC5jbG9uZSgpO1xuICAgICAgICBjb25zdCBwYXJhID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcHMgPSBuZXcgUFN5bWJvbEVsZW1lbnQoKTtcbiAgICAgICAgcHMuZGVmYXVsdEhlaWdodCA9IDYwO1xuICAgICAgICBwYXJhLmFkZENoaWxkKHBzKTtcbiAgICAgICAgZG9jLmdldENoaWxkPERvY3VtZW50Qm9keUVsZW1lbnQ+KDEpLmFkZENoaWxkKHBhcmEsIDApO1xuICAgICAgICBwcmludC5wcmludChkb2MpO1xuICAgIH1cblxufVxuXG5cbmV4cG9ydCB0eXBlIEVkaXRvckN1cnJlbnRQb3MgPSB7XG4gICAgcG9zOiBQb3NpdGlvblxufTtcblxuZXhwb3J0IHR5cGUgRWRpdG9yQ29udGVueHRQcm9wcyA9IHtcbiAgICBtZW51czogQXJyYXk8Q29udGVudE1lbnVJdGVtPlxufSAmIEVkaXRvckN1cnJlbnRQb3NcblxuZXhwb3J0IHR5cGUgRWRpdG9yUGFuZWxQcm9wcyA9IHtcbiAgICB0eXBlOiBzdHJpbmc7XG59ICYgRWRpdG9yQ3VycmVudFBvcztcblxuIiwiaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LXBhcnQtaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuXG4vKipcbiAqIOaWh+aho+WQiOW5tlxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb21iaW5lIHtcbiAgICAvKipcbiAgICAgKiDlkIjlubbmqKHmnb/mlofmoaNcbiAgICAgKiDnlKjkuo7orr7nva7lkIjlubblkI7vvIzpobXnnInpobXohJrnrYnnu5/kuIDpg6jliIZcbiAgICAgKi9cbiAgICBtYWluVGVtcGxhdGUhOiBEb2N1bWVudEVsZW1lbnRcblxuICAgIGRvY1BhcnRzOiBBcnJheTx7IGRvYzogRG9jdW1lbnRFbGVtZW50LCBkb2NJZDogc3RyaW5nIH0+ID0gW107XG4gICAgLyoqXG4gICAgICog5re75Yqg6ZyA6KaB5ZCI5bm255qE5paH5qGj6YOo5YiGXG4gICAgICovXG4gICAgYWRkKGRvY1BhcnQ6IERvY3VtZW50RWxlbWVudCwgaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY1BhcnRzLnB1c2goeyBkb2M6IGRvY1BhcnQsIGRvY0lkOiBpZCB9KVxuICAgIH1cblxuICAgIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jUGFydHMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlKjkuo7lkIjlubbmlofmoaPorqHnrpdcbiAgICAgKi9cbiAgICBsb2FkKCk6IERvY3VtZW50RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5tYWluVGVtcGxhdGUuY2xvbmUoKTtcbiAgICAgICAgY29uc3QgYm9keSA9IHRlbXBsYXRlLmZpbmQoKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50O1xuICAgICAgICBib2R5LmNsZWFySXRlbXMoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvY1BhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gdGhpcy5kb2NQYXJ0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGRvY1BhcnRDb250YWluZXIgPSBuZXcgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQoKTtcbiAgICAgICAgICAgIGRvY1BhcnRDb250YWluZXIucHJvcHMucGFydElkID0gcGFydC5kb2NJZDtcbiAgICAgICAgICAgIGNvbnN0IGRvY1BhcnRCb2R5ID0gcGFydC5kb2MuZmluZChpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50XG4gICAgICAgICAgICBkb2NQYXJ0Q29udGFpbmVyLmFkZENoaWxkKGRvY1BhcnRCb2R5LmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIGJvZHkuYWRkQ2hpbGQoZG9jUGFydENvbnRhaW5lcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfVxufSIsImltcG9ydCB7Q29udGVudE1lbnVJdGVtLCBDb250ZXh0TWVudUVsZW1lbnRFdmVudCwgS2V5Ym9yYWRFbGVtZW50RXZlbnR9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgRWxlbWVudEhhbmRsZXIgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgZG9jdW1lbnRQcmludCB9IGZyb20gXCIuL2RvY3VtZW50LXByaW50XCI7XG5pbXBvcnQge1BhcmFncmFwaEVsZW1lbnQsIFRhYmxlU3BsaXRDZWxsLCBUYWJsZVV0aWx9IGZyb20gXCIuL2ltcGxcIjtcblxuLyoqXG4gKiDliKDpmaTlvZPliY3mrrXokL1cbiAqIEBwYXJhbSBldnRcbiAqL1xuZXhwb3J0IGNvbnN0IGRlbGV0ZUN1cnJlbnRQYXJhZ3JhcGg6IEVsZW1lbnRIYW5kbGVyPENvbnRleHRNZW51RWxlbWVudEV2ZW50PiA9IChldnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IHNlbGVjdGlvblN0YXRlLCBjdHg6IHsgdmlld09wdGlvbnMgfSwgY3VycmVudEVsZW1lbnQgfSA9IGV2dDtcbiAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246ICdEZWxldGVUYWJsZScsIGNhcHRpb246ICfliKDpmaTmrrXokL0nLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBzeW1ib2wgPSBFbGVtZW50VXRpbC5nZXRMYXN0TGVhZkVsZW1lbnQoY3VycmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGb2N1c2FibGVFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQocHN5bWJvbCwgZmFsc2UsIHRydWUsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dEZvY3VzYWJsZUVsZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKG5leHRGb2N1c2FibGVFbGUsIDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIOaWh+aho+aJk+WNsFxuICogQHBhcmFtIGNldnQgXG4gKi9cbmV4cG9ydCBjb25zdCBwcmludERvY09uQ29udGV4dG1lbnU6IEVsZW1lbnRIYW5kbGVyPENvbnRleHRNZW51RWxlbWVudEV2ZW50PiA9IChjZXZ0KTogdm9pZCA9PiB7XG4gICAgY2V2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogJ1ByaW50JywgY2FwdGlvbjogJ+aJk+WNsOaJgOaciemhtScsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRQcmludC5wcmludChjZXZ0LnNlbGVjdGlvblN0YXRlLCBjZXZ0LmN0eC52aWV3T3B0aW9ucywgY2V2dC5jdHgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICBpY29uOiAnUHJpbnQnLCBjYXB0aW9uOiAn5omT5Y2w5b2T5YmN6aG1JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IChldnQpID0+IHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFByaW50LnByaW50Q3VyclBhZ2UoY2V2dC5zZWxlY3Rpb25TdGF0ZSwgY2V2dC5jdHgudmlld09wdGlvbnMsIGNldnQuY3R4KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0RGF0YUVsZW1lbnRQcm9wczpFbGVtZW50SGFuZGxlcjxDb250ZXh0TWVudUVsZW1lbnRFdmVudD49KGV2dCk6dm9pZCA9PntcbiAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246ICdTZXR0aW5ncycsIGNhcHRpb246ICflhoXlrrnmjqfliLborr7nva4nLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazooZSk9PntcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn54K55Ye75LqGJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG9uVGFibGVDb250ZXh0bWVudTpFbGVtZW50SGFuZGxlcjxDb250ZXh0TWVudUVsZW1lbnRFdmVudD49KGV2dCk6dm9pZCA9PntcbiAgICBjb25zdCB7c2VsZWN0aW9uU3RhdGUsIGN0eDoge3ZpZXdPcHRpb25zfSxjdXJyZW50RWxlbWVudH0gPSBldnQ7XG4gICAgaWYgKFRhYmxlVXRpbC5jYW5EZWxldGVUYWJsZShzZWxlY3Rpb25TdGF0ZSkpIHtcbiAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgaWNvbjogJ0RlbGV0ZVRhYmxlJywgY2FwdGlvbjogJ+WIoOmZpOihqOagvCcsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChjdXJyZW50RWxlbWVudCwgZmFsc2UsIHRydWUsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZFbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKFRhYmxlVXRpbC5jYW5NZXJnZUNlbGxzKHNlbGVjdGlvblN0YXRlKSkge1xuICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICBpY29uOiAnTWVyZ2VEdXBsaWNhdGUnLCBjYXB0aW9uOiAn5ZCI5bm25Y2V5YWD5qC8JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZVV0aWwubWVyZ2VDZWxscyhzZWxlY3Rpb25TdGF0ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoVGFibGVVdGlsLmNhblNwbGl0Q2VsbChzZWxlY3Rpb25TdGF0ZSkpIHtcbiAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgaWNvbjogJ1NwbGl0JywgY2FwdGlvbjogJ+aLhuWIhuWNleWFg+agvCcsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgVGFibGVTcGxpdENlbGwuc3BsaXRDZWxsKHNlbGVjdGlvblN0YXRlLCAwLCAyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgICAgIGljb246ICdDb21iaW5lJywgY2FwdGlvbjogJ+WQiOW5tuWNleWFg+agvOi/mOWOnycsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgVGFibGVVdGlsLnJlc3RvcmVDZWxsKHNlbGVjdGlvblN0YXRlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICBpY29uOiBcIkluc2VydFwiLCBjYXB0aW9uOiAn5LiK5pa55o+S5YWl5q616JC9JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucGFyZW50LmFkZENoaWxkKFBhcmFncmFwaEVsZW1lbnQuY3JlYXRlRWxlbWVudCgpLCBjdXJyZW50RWxlbWVudC5nZXRJbmRleCgpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5yZWZyZXNoVmlldygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246IFwiSW5zZXJ0XCIsIGNhcHRpb246ICfkuIvmlrnmj5LlhaXmrrXokL0nLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQoUGFyYWdyYXBoRWxlbWVudC5jcmVhdGVFbGVtZW50KCksIGN1cnJlbnRFbGVtZW50LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5yZWZyZXNoVmlldygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBldnQubWVudXMgPSByZW1vdmVEdXBsaWNhdGVzRXZlbnQoZXZ0Lm1lbnVzKTtcbn07XG5cbmZ1bmN0aW9uIHJlbW92ZUR1cGxpY2F0ZXNFdmVudChldmVudHM6IENvbnRlbnRNZW51SXRlbVtdKTogQ29udGVudE1lbnVJdGVtW10ge1xuICAgIGxldCBhcnI6IENvbnRlbnRNZW51SXRlbVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBsZXQga2V5cyA9IGFyci5tYXAoaXRlbSA9PiBpdGVtLmNhcHRpb24pO1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoZXZlbnRzW2ldLmNhcHRpb24pKSB7XG4gICAgICAgICAgICBhcnIudW5zaGlmdChldmVudHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59Il0sIm5hbWVzIjpbIm5hbm9pZCIsIlJlbmRlck9iamVjdFR5cGUiLCJtb21lbnQiLCJNb2RpZnlGbGFnIiwiSGlzdG9yeS5sb2dVcGRhdGVFbGVQcm9wcyIsIkhpc3RvcnkuaW5zZXJ0RWxlIiwiSGlzdG9yeS5yZW1vdmVFbGUiLCJFZGl0TW9kZSIsIkRvY01vZGUiLCJCb29sZWFuRW51bSIsIkhpc3RvcnkuZm9ybWF0RWxlIiwiSGlzdG9yeS5yZW1vdmVUZXh0IiwiSGlzdG9yeS5pbnB1dFRleHQiLCJUcmFja1J1blR5cGVFbnVtIiwiYndpcGpzIiwiVHJhY2suc3VwcHJlc3NUcmFja2luZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQXdCQTs7QUFFRztNQUNVLFlBQVksQ0FBQTtBQUNGLElBQUEsR0FBQSxDQUFBO0FBQW5CLElBQUEsV0FBQSxDQUFtQixHQUFrQixFQUFBO1FBQWxCLElBQUcsQ0FBQSxHQUFBLEdBQUgsR0FBRyxDQUFlO0tBQUs7QUFDMUM7O0FBRUc7QUFDSCxJQUFBLE1BQU0sQ0FBVztBQUNqQixJQUFBLFlBQVksQ0FBVTtBQUN0QixJQUFBLFlBQVksQ0FBZ0I7QUFDNUI7O0FBRUc7QUFDSCxJQUFBLGNBQWMsQ0FBVztBQUN6QixJQUFBLG9CQUFvQixDQUFVO0FBQzlCLElBQUEsb0JBQW9CLENBQVU7O0FBRTlCLElBQUEsUUFBUSxDQUFXO0FBQ25CLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsS0FBSyxDQUFVO0FBQ2YsSUFBQSxLQUFLLENBQVU7QUFDZixJQUFBLEtBQUssQ0FBVztBQUNoQixJQUFBLElBQUksQ0FBVztBQUNmLElBQUEsT0FBTyxD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QUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxhQUFhLENBQUMsTUFBaUIsRUFBRSxNQUFpQixFQUFBO0FBQzlDLFFBQUEsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzVCLFFBQUEsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ3RDLFFBQUEsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ3BDLFFBQUEsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ3BDLFFBQUEsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQ3hDLFFBQUEsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQ3RDLFFBQUEsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQ3hDLFFBQUEsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ3BDLFFBQUEsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0tBQ2pDO0FBRUQsSUFBQSxpQkFBaUIsQ0FBQyxXQUF3QixFQUFBO1FBQ3RDLE1BQU0sS0FBSyxHQUE0QixFQUFFLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLFlBQVksRUFBRTtBQUN2RCxZQUFBLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENB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QUN4RSxRQUFBLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0tBQ2pDO0FBRUQsSUFBQSxPQUFPLFdBQVcsQ0FBQyxDQUFPLEVBQUUsQ0FBTyxFQUFFLENBQU8sRUFBQTtRQUV4QyxNQUFNLEVBQUUsR0FBUyxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFBO1FBRTdDLE1BQU0sRUFBRSxHQUFTLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7UUFFOUMsTUFBTSxFQUFFLEdBQVMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQTtBQUU3QyxRQUFBLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxRQUFBLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFZixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENB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RUFBRTtZQUN4QixNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsR0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFlBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRyxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFL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WUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNyRCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENB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LEVBQUUsVUFBVSxFQUFFO1FBQzFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUM1QyxLQUFBO0FBQ0QsSUFBQTtRQUNJLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUNsQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7UUFDdEMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1FBQzFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUN6QyxLQUFBO0FBQ0QsSUFBQTtRQUNJLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUNsQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7UUFDdEMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1FBQzFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUM1QyxLQUFBO0NBQ0osQ0FBQTtBQUdELFNBQVMsU0FBUyxDQUFDLElBQVksRUFBQTtBQUMzQixJQUFBLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDO0FBQ25CLElBQUEsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMxQixJQUFBLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RCxJQUFBLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMs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LENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNqQjtBQUVPLElBQUEsV0FBVyxDQUFDLElBQVksRUFB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QUFDO1FBQ3BDLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtBQUN0QixZQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1RCxTQUFBO1FBQ0QsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLFNBQUE7UUFDRCxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7QUFDckIsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFNBQUE7UUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7QUFDcEIsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsU0FBQTtRQUNELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLElBQUksVUFBVSxHQUFHLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBQSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssYUFBYSxFQUFFOztZQUV2QyxVQUFVLElBQUksU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7QUFHNUMsU0FBQTtBQUNELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxF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LENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3BGLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FB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
17105
+ //# sourceMappingURL=index-cjs.js.map