ng-virtual-list 17.12.4 → 17.12.8

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.
Files changed (42) hide show
  1. package/esm2022/lib/components/ng-list-item/const/index.mjs +2 -1
  2. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.mjs +2 -5
  3. package/esm2022/lib/components/ng-prerender-container/core/prerender-track-box.mjs +4 -2
  4. package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +6 -16
  5. package/esm2022/lib/components/ng-scroll-view/base/base-scroll-view.component.mjs +17 -3
  6. package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +20 -10
  7. package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +8 -12
  8. package/esm2022/lib/core/interfaces/metrics.mjs +1 -1
  9. package/esm2022/lib/core/interfaces/recalculate-metrics-options.mjs +1 -1
  10. package/esm2022/lib/core/track-box.mjs +17 -9
  11. package/esm2022/lib/directives/locale-sensitive/locale-sensitive.directive.mjs +7 -7
  12. package/esm2022/lib/models/render-item-config.model.mjs +1 -1
  13. package/esm2022/lib/models/render-item-measures.model.mjs +1 -1
  14. package/esm2022/lib/ng-virtual-list.component.mjs +91 -87
  15. package/esm2022/lib/utils/animator/animator.mjs +12 -6
  16. package/esm2022/lib/utils/animator/interfaces/animator-params.mjs +1 -1
  17. package/esm2022/lib/utils/animator/interfaces/animator-update-data.mjs +1 -1
  18. package/esm2022/lib/utils/animator/types/easing.mjs +1 -1
  19. package/esm2022/lib/utils/event-emitter/event-emitter.mjs +2 -2
  20. package/esm2022/lib/utils/event-emitter/interfaces/event-emitter.mjs +1 -1
  21. package/fesm2022/ng-virtual-list.mjs +177 -147
  22. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  23. package/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.d.ts +1 -4
  24. package/lib/components/ng-prerender-container/core/prerender-track-box.d.ts +1 -1
  25. package/lib/components/ng-scroll-bar/ng-scroll-bar.component.d.ts +2 -7
  26. package/lib/components/ng-scroll-view/base/base-scroll-view.component.d.ts +8 -2
  27. package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +5 -1
  28. package/lib/components/ng-scroller/ng-scroller.component.d.ts +2 -4
  29. package/lib/core/interfaces/metrics.d.ts +3 -1
  30. package/lib/core/interfaces/recalculate-metrics-options.d.ts +1 -0
  31. package/lib/core/track-box.d.ts +1 -1
  32. package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +3 -3
  33. package/lib/models/render-item-config.model.d.ts +5 -1
  34. package/lib/models/render-item-measures.model.d.ts +5 -1
  35. package/lib/ng-virtual-list.component.d.ts +2 -3
  36. package/lib/utils/animator/animator.d.ts +1 -1
  37. package/lib/utils/animator/interfaces/animator-params.d.ts +1 -1
  38. package/lib/utils/animator/interfaces/animator-update-data.d.ts +1 -1
  39. package/lib/utils/animator/types/easing.d.ts +1 -1
  40. package/lib/utils/event-emitter/event-emitter.d.ts +1 -1
  41. package/lib/utils/event-emitter/interfaces/event-emitter.d.ts +1 -1
  42. package/package.json +1 -1
@@ -12,7 +12,7 @@ import { ItemDisplayMethods } from "./enums";
12
12
  import { Alignments } from "../enums";
13
13
  /**
14
14
  * An object that performs tracking, calculations and caching.
15
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/17.x/projects/ng-virtual-list/src/lib/core/track-box.ts
15
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/core/track-box.ts
16
16
  * @author Evgenii Alexandrovich Grebennikov
17
17
  * @email djonnyx@gmail.com
18
18
  */
@@ -393,7 +393,7 @@ export class TrackBox extends CacheMap {
393
393
  * Calculates list metrics
394
394
  */
395
395
  recalculateMetrics(options) {
396
- const { alignment, fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize: minBufferSize, scrollSize, stickyEnabled, itemConfigMap, enabledBufferOptimization, previousTotalSize, snapToItem, snapToItemAlign, deletedItemsMap, itemTransform } = options, roundedScrollSize = Math.round(scrollSize);
396
+ const { alignment, fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize: minBufferSize, scrollSize, stickyEnabled, itemConfigMap, enabledBufferOptimization, previousTotalSize, snapToItem, snapToItemAlign, deletedItemsMap, inverted, itemTransform } = options, roundedScrollSize = Math.round(scrollSize);
397
397
  const trackBy = this._trackingPropertyName, bufferSize = Math.max(minBufferSize, this._bufferSize), { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize, w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height, map = this._map, snapshot = this._snapshot, divides = this._divides, stickyPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsOrRowsWeights = [], isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)
398
398
  || (typeof fromItemId === 'string' && fromItemId > '-1');
399
399
  let leftItemsOffset = 0, rightItemsOffset = 0;
@@ -846,6 +846,7 @@ export class TrackBox extends CacheMap {
846
846
  rightItemLength,
847
847
  rightItemsWeight,
848
848
  scrollSize: actualScrollSize,
849
+ maxScrollSize: totalSize,
849
850
  leftSizeOfAddedItems,
850
851
  sizeProperty,
851
852
  stickyEnabled,
@@ -860,6 +861,7 @@ export class TrackBox extends CacheMap {
860
861
  isUpdating,
861
862
  snapToItem,
862
863
  snapToItemAlign,
864
+ inverted,
863
865
  itemTransform,
864
866
  };
865
867
  return metrics;
@@ -911,7 +913,7 @@ export class TrackBox extends CacheMap {
911
913
  return false;
912
914
  }
913
915
  generateDisplayCollection(items, actualItems, itemConfigMap, metrics) {
914
- const { width, height, normalizedItemWidth, normalizedItemHeight, dynamicSize, divides, itemsOnDisplayLength, itemsFromStartToScrollEnd, isVertical, leftLayoutOffset: layoutOffset, leftLayoutIndexOffset: layoutIndexOffset, renderItems: renderItemsLength, scrollSize, sizeProperty, stickyEnabled, stickyPos, startPosition, totalLength, startIndex, typicalItemSize, minItemSize, maxItemSize, snapToItem, snapToItemAlign, itemTransform, } = metrics, displayItems = [];
916
+ const { width, height, normalizedItemWidth, normalizedItemHeight, dynamicSize, divides, itemsOnDisplayLength, itemsFromStartToScrollEnd, isVertical, leftLayoutOffset: layoutOffset, leftLayoutIndexOffset: layoutIndexOffset, renderItems: renderItemsLength, scrollSize, maxScrollSize, sizeProperty, stickyEnabled, stickyPos, startPosition, totalLength, startIndex, typicalItemSize, minItemSize, maxItemSize, snapToItem, snapToItemAlign, inverted, itemTransform, } = metrics, displayItems = [];
915
917
  if (items.length) {
916
918
  const trackBy = this._trackingPropertyName, actualSnippedPosition = stickyPos, isSnappingMethodAdvanced = this._isSnappingMethodAdvanced, deltaOffet = (isSnappingMethodAdvanced ? scrollSize : 0), scrollDirection = this._scrollDirection, boundsSize = isVertical ? height : width, actualEndSnippedPosition = scrollSize + boundsSize - this._scrollEndOffset;
917
919
  let pos = startPosition, renderItems = renderItemsLength, stickyItem, nextSticky, stickyItemIndex = -1, nexstStickyItemIndex = -1, stickyItemSize = 0, endStickyItem, nextEndSticky, endStickyItemIndex = -1, endStickyItemSize = 0;
@@ -951,6 +953,7 @@ export class TrackBox extends CacheMap {
951
953
  position: pos,
952
954
  boundsSize,
953
955
  scrollSize,
956
+ maxScrollSize,
954
957
  absoluteStartPosition,
955
958
  absoluteStartPositionPercent,
956
959
  absoluteEndPosition,
@@ -981,6 +984,7 @@ export class TrackBox extends CacheMap {
981
984
  tabIndex: i - layoutIndexOffset,
982
985
  divides,
983
986
  opacity: 1,
987
+ inverted,
984
988
  zIndex: Z_INDEX_1,
985
989
  };
986
990
  const itemData = collectionItem;
@@ -1027,6 +1031,7 @@ export class TrackBox extends CacheMap {
1027
1031
  position: pos,
1028
1032
  boundsSize,
1029
1033
  scrollSize,
1034
+ maxScrollSize,
1030
1035
  absoluteStartPosition,
1031
1036
  absoluteStartPositionPercent,
1032
1037
  absoluteEndPosition,
@@ -1063,6 +1068,7 @@ export class TrackBox extends CacheMap {
1063
1068
  tabIndex: i - layoutIndexOffset,
1064
1069
  divides,
1065
1070
  opacity: 1,
1071
+ inverted,
1066
1072
  zIndex: Z_INDEX_1,
1067
1073
  };
1068
1074
  const itemData = collectionItem;
@@ -1123,6 +1129,7 @@ export class TrackBox extends CacheMap {
1123
1129
  position: pos,
1124
1130
  boundsSize,
1125
1131
  scrollSize,
1132
+ maxScrollSize,
1126
1133
  absoluteStartPosition,
1127
1134
  absoluteStartPositionPercent,
1128
1135
  absoluteEndPosition,
@@ -1161,6 +1168,7 @@ export class TrackBox extends CacheMap {
1161
1168
  opacity: 1,
1162
1169
  zIndex: Z_INDEX_0,
1163
1170
  fullSize,
1171
+ inverted,
1164
1172
  };
1165
1173
  if (snapped) {
1166
1174
  config.zIndex = Z_INDEX_2;
@@ -1305,18 +1313,18 @@ export class TrackBox extends CacheMap {
1305
1313
  let first = null, last = null;
1306
1314
  if (!!components) {
1307
1315
  for (const comp of components) {
1308
- const id = comp.instance.itemId ?? null, isVertical = comp.instance.item?.config?.isVertical, x = comp.instance.item?.measures?.x ?? 0, y = comp.instance.item?.measures?.y ?? 0, isFirst = comp.instance.item?.config?.isFirst ?? false, isLast = comp.instance.item?.config?.isLast ?? false, { width, height } = comp.instance.getBounds(), pos = position;
1316
+ const id = comp.instance.itemId ?? null, isVertical = comp.instance.item?.config?.isVertical, inverted = comp.instance.item?.config.inverted ?? false, maxScrollSize = comp.instance.item?.measures.maxScrollSize ?? 0, { width, height } = comp.instance.getBounds(), x = comp.instance.item?.measures?.x ?? 0, xx = inverted ? (maxScrollSize - x) - width : x, y = comp.instance.item?.measures?.y ?? 0, isFirst = comp.instance.item?.config?.isFirst ?? false, isLast = comp.instance.item?.config?.isLast ?? false, pos = position;
1309
1317
  if (isVertical && (pos >= y && pos < y + height)) {
1310
1318
  return { id, x, y, width, height, isFirst, isLast };
1311
1319
  }
1312
- else if (!isVertical && (pos >= x && pos < x + width)) {
1313
- return { id, x, y, width, height, isFirst, isLast };
1320
+ else if (!isVertical && (pos >= xx && pos < xx + width)) {
1321
+ return { id, x: xx, y, width, height, isFirst, isLast };
1314
1322
  }
1315
1323
  if (isFirst) {
1316
- first = { id, x, y, width, height, isFirst, isLast };
1324
+ first = { id, x: xx, y, width, height, isFirst, isLast };
1317
1325
  }
1318
1326
  else if (isLast) {
1319
- last = { id, x, y, width, height, isFirst, isLast };
1327
+ last = { id, x: xx, y, width, height, isFirst, isLast };
1320
1328
  }
1321
1329
  }
1322
1330
  }
@@ -1377,4 +1385,4 @@ export class TrackBox extends CacheMap {
1377
1385
  }
1378
1386
  }
1379
1387
  }
1380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2stYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29yZS90cmFjay1ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFDSCxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUM1SyxXQUFXLEVBQUUsV0FBVyxHQUMzQixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsaUNBQWlDLEVBQUUsa0NBQWtDLEVBQUUsaUNBQWlDLEVBQUUsd0JBQXdCLEVBQ2xJLE1BQU0sRUFBRSwwQkFBMEIsR0FDckMsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUt2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXRDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFFBQ1Qs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QUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVRLE9BQU87UUFDWixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgfSBmcm9tIFwiLi4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfSBmcm9tIFwiLi4vbW9kZWxzL3JlbmRlci1pdGVtLm1vZGVsXCI7XHJcbmltcG9ydCB7IElkIH0gZnJvbSBcIi4uL3R5cGVzL2lkXCI7XHJcbmltcG9ydCB7IENBQ0hFX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgQ2FjaGVNYXAgfSBmcm9tIFwiLi9jYWNoZS1tYXBcIjtcclxuaW1wb3J0IHsgVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuaW1wb3J0IHsgSVJlY3QsIElTaXplIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcclxuaW1wb3J0IHtcclxuICAgIERFRkFVTFRfRElWSURFUywgSEVJR0hUX1BST1BfTkFNRSwgU0VSVklDRV9QUk9QX0RVTU1ZLCBTRVJWSUNFX1BST1BfRFVNTVlfRU5BQkxFRCwgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSwgVFJBTlNGT1JNRURfWF9QUk9QX05BTUUsIFRSQU5TRk9STUVEX1lfUFJPUF9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbiAgICBYX1BST1BfTkFNRSwgWV9QUk9QX05BTUUsXHJcbn0gZnJvbSBcIi4uL2NvbnN0XCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1Db25maWcsIElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1NZWFzdXJlcywgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuaW1wb3J0IHsgQ01hcCB9IGZyb20gJy4uL3V0aWxzL2NtYXAnO1xyXG5pbXBvcnQgeyBidWZmZXJJbnRlcnBvbGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzL2J1ZmZlci1pbnRlcnBvbGF0aW9uXCI7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vYmFzZVwiO1xyXG5pbXBvcnQgeyBQcmVyZW5kZXJDYWNoZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL25nLXByZXJlbmRlci1jb250YWluZXIvdHlwZXMvY2FjaGVcIjtcclxuaW1wb3J0IHsgU2Nyb2xsRGlyZWN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IG9iamVjdEFzUmVhZG9ubHkgfSBmcm9tIFwiLi4vdXRpbHMvb2JqZWN0XCI7XHJcbmltcG9ydCB7IGdldFNlcnZpY2VJZFByb3AgfSBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xELCBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RILCBERUZBVUxUX1JFU0VUX0JVRkZFUl9TSVpFX1RJTUVPVVQsIEVORF9DT0xMRUNUSU9OX1BSRUZJWF9JRCxcclxuICAgIElTX05FVywgU1RBUlRfQ09MTEVDVElPTl9QUkVGSVhfSUQsXHJcbn0gZnJvbSBcIi4vY29uc3RcIjtcclxuaW1wb3J0IHsgWl9JTkRFWF8wLCBaX0lOREVYXzEsIFpfSU5ERVhfMiwgWl9JTkRFWF8zLCB9IGZyb20gJy4uL2NvbnN0JztcclxuaW1wb3J0IHtcclxuICAgIElHZXRJdGVtUG9zaXRpb25PcHRpb25zLCBJR2V0TWV0cmljc1JldHVybnMsIElJdGVtLCBJTWV0cmljcywgSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucyxcclxuICAgIElVcGRhdGVDb2xsZWN0aW9uUmV0dXJucyxcclxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IFRyYWNrQm94RXZlbnRzIH0gZnJvbSBcIi4vZXZlbnRzXCI7XHJcbmltcG9ydCB7IENhY2hlLCBDYWNoZU1hcEV2ZW50cywgQ2FjaGVNYXBMaXN0ZW5lcnMgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBJdGVtRGlzcGxheU1ldGhvZHMgfSBmcm9tIFwiLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBbGlnbm1lbnRzIH0gZnJvbSBcIi4uL2VudW1zXCI7XHJcblxyXG4vKipcclxuICogQW4gb2JqZWN0IHRoYXQgcGVyZm9ybXMgdHJhY2tpbmcsIGNhbGN1bGF0aW9ucyBhbmQgY2FjaGluZy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTcueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb3JlL3RyYWNrLWJveC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFja0JveDxDIGV4dGVuZHMgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCA9IGFueT5cclxuICAgIGV4dGVuZHMgQ2FjaGVNYXA8SWQsIENhY2hlLCBDYWNoZU1hcEV2ZW50cywgQ2FjaGVNYXBMaXN0ZW5lcnM+IHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX3RyYWNrZXIhOiBUcmFja2VyPEM+O1xyXG5cclxuICAgIHByb3RlY3RlZCBfaXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHNldCBpdGVtcyh2OiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pdGVtcyA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pdGVtcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IGRpc3BsYXlDb21wb25lbnRzKHY6IEFycmF5PENvbXBvbmVudFJlZjxDPj4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IHNuYXBwZWREaXNwbGF5Q29tcG9uZW50cyh2OiBBcnJheTxDb21wb25lbnRSZWY8Qz4+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Njcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uID0gMDtcclxuICAgIHNldCBzY3JvbGxEaXJlY3Rpb24odjogU2Nyb2xsRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbERpcmVjdGlvbiA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zY3JvbGxEaXJlY3Rpb24gPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjcm9sbERpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX3Njcm9sbERpcmVjdGlvbjsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tCeTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuICAgIHNldCB0cmFja0J5KHY6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLl90cmFja0J5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNrQnkgPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHRyYWNrQnkoKSB7IHJldHVybiB0aGlzLl90cmFja0J5OyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXZpZGVzOiBudW1iZXIgPSBERUZBVUxUX0RJVklERVM7XHJcblxyXG4gICAgc2V0IGRpdmlkZXModjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RpdmlkZXMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGl2aWRlcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0luZmluaXR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzSW5maW5pdHkodjogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzSW5maW5pdHkgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNMYXp5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzTGF6eSh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzTGF6eSA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc0xhenkgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB0cmFja0J5IHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIHNldCB0cmFja2luZ1Byb3BlcnR5TmFtZSh2OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSA9IHRoaXMuX3RyYWNrZXIudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tpbmdQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc1Njcm9sbFN0YXJ0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU2Nyb2xsU3RhcnQodjogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSB2O1xyXG4gICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzU2Nyb2xsU25hcFRvU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzU2Nyb2xsRW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU2Nyb2xsRW5kKHY6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9pc1Njcm9sbEVuZCA9IHY7XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNTY3JvbGxTbmFwVG9FbmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzU2Nyb2xsU25hcFRvU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgaXNTbmFwcGVkVG9TdGFydCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNTY3JvbGxTdGFydCB8fCB0aGlzLl9pc1Njcm9sbFNuYXBUb1N0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNTY3JvbGxTbmFwVG9FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgaXNTbmFwcGVkVG9FbmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2Nyb2xsRW5kIHx8IHRoaXMuX2lzU2Nyb2xsU25hcFRvRW5kO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2Nyb2xsU3RhcnRPZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgc2Nyb2xsU3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjcm9sbFN0YXJ0T2Zmc2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Njcm9sbEVuZE9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIHNldCBzY3JvbGxFbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0ID0gdjtcclxuICAgIH1cclxuICAgIGdldCBzY3JvbGxFbmRPZmZzZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVuZE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlciA9IG5ldyBUcmFja2VyKHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBzZXQoaWQ6IElkLCBjYWNoZTogQ2FjaGUpOiBDTWFwPElkLCBJU2l6ZT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9tYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICBjb25zdCBiID0gdGhpcy5fbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgIGlmIChiPy53aWR0aCA9PT0gY2FjaGUud2lkdGggJiYgYj8uaGVpZ2h0ID09PSBjYWNoZS5oZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLl9tYXAuc2V0KGlkLCBjYWNoZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzQ29sbGVjdGlvbjogQXJyYXk8SUl0ZW0+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2RlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplIH0gPSB7fTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG4gICAgZ2V0IGNydWREZXRlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2NydWREZXRlY3RlZDsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJlQ2hhbmdlSWZOZWVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXNEZXRlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl92ZXJzaW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGZpcmVUaWNrKCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuVElDSyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c1RvdGFsU2l6ZSA9IDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWx0YU9mTmV3SXRlbXM6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgZGVsdGFPZk5ld0l0ZW1zKCkgeyByZXR1cm4gdGhpcy5fZGVsdGFPZk5ld0l0ZW1zOyB9XHJcblxyXG4gICAgaXNBZGFwdGl2ZUJ1ZmZlciA9IHRydWU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkID0gREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xEO1xyXG5cclxuICAgIHByb3RlY3RlZCBfbWF4QnVmZmVyU2VxdWVuY2VMZW5ndGggPSBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RIO1xyXG5cclxuICAgIHByb3RlY3RlZCBfYnVmZmVyU2l6ZVNlcXVlbmNlOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl9idWZmZXJTaXplOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0QnVmZmVyU2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX21heEJ1ZmZlclNpemU6IG51bWJlciA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZW91dDogbnVtYmVyID0gREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzUmVzZXRlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJlcmVuZGVyZWRDYWNoZTogUHJlcmVuZGVyQ2FjaGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBwcml2YXRlIF9uZXdJdGVtczogQXJyYXk8SWQ+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGxpZmVDaXJjbGUoKSB7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlSWZOZWVkKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlyZVRpY2soKTtcclxuXHJcbiAgICAgICAgdGhpcy5saWZlQ2lyY2xlRG8oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBjb2xsZWN0aW9uIGZvciBkZWxldGVkIGl0ZW1zIGFuZCBmbHVzaGVzIHRoZSBkZWxldGVkIGl0ZW0gY2FjaGUuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q29sbGVjdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oY3VycmVudENvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGl0ZW1TaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY3VycmVudENvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q29sbGVjdGlvbiAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBjdXJyZW50Q29sbGVjdGlvbiA9PT0gdGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQXR0ZW50aW9uISBUaGUgY29sbGVjdGlvbiBtdXN0IGJlIGltbXV0YWJsZS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRlZCA9ICgoIXRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbiB8fCB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSAmJlxyXG4gICAgICAgICAgICAoISFjdXJyZW50Q29sbGVjdGlvbiAmJiBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGggPiAwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lzUmVzZXRlZCA9IHJlc2V0ZWQ7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUodGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uLCBjdXJyZW50Q29sbGVjdGlvbiwgaXRlbVNpemUpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24gPSBbLi4uKGN1cnJlbnRDb2xsZWN0aW9uIHx8IFtdKV07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIGNhY2hlIG9mIGl0ZW1zIGZyb20gdGhlIGxpc3RcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUNhY2hlPEkgZXh0ZW5kcyBJSXRlbSwgQyBleHRlbmRzIEFycmF5PEk+PihwcmV2aW91c0NvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGN1cnJlbnRDb2xsZWN0aW9uOiBDIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuICAgICAgICBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lO1xyXG4gICAgICAgIGxldCBjcnVkRGV0ZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9uZXdJdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIWN1cnJlbnRDb2xsZWN0aW9uIHx8IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHByZXZpb3VzQ29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIWl0ZW0gJiYgdGhpcy5fbWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2aW91c0NvbGxlY3Rpb24gfHwgcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIGFkZGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHsgd2lkdGg6IGl0ZW1TaXplLCBoZWlnaHQ6IGl0ZW1TaXplLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbkRpY3Q6IElJdGVtPEk+ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldO1xyXG4gICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRGljdFtpdGVtW3RyYWNrQnldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgbm90Q2hhbmdlZE1hcDogSUl0ZW08ST4gPSB7fSwgZGVsZXRlZE1hcDogSUl0ZW08ST4gPSB7fSwgZGVsZXRlZEl0ZW1zTWFwOiB7IFtpbmRleDogbnVtYmVyXTogSVNpemUgfSA9IHt9LFxyXG4gICAgICAgICAgICB1cGRhdGVkTWFwOiBJSXRlbTxJPiA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25EaWN0Lmhhc093blByb3BlcnR5KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBjb2xsZWN0aW9uRGljdFtpZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90Q2hhbmdlZE1hcFtpdGVtW3RyYWNrQnldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0aGlzLl9tYXAuZ2V0KGlkKSB8fCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRNYXBbaXRlbVt0cmFja0J5XV0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odGhpcy5fbWFwLmdldChpZCkgfHwgeyB3aWR0aDogaXRlbVNpemUsIGhlaWdodDogaXRlbVNpemUgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZE1hcFtpZF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwW2ldID0gdGhpcy5fbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZGVsZXRlKGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgaWYgKCEhaXRlbSAmJiAhZGVsZXRlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgIXVwZGF0ZWRNYXAuaGFzT3duUHJvcGVydHkoaWQpICYmXHJcbiAgICAgICAgICAgICAgICAhbm90Q2hhbmdlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25ld0l0ZW1zLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkZWRcclxuICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGNydWREZXRlY3RlZDtcclxuICAgICAgICB0aGlzLl9kZWxldGVkSXRlbXNNYXAgPSBkZWxldGVkSXRlbXNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyB0aGUgcG9zaXRpb24gb2YgYSBjb2xsZWN0aW9uIGVsZW1lbnQgYnkgdGhlIGdpdmVuIElkXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW1Qb3NpdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaWQ6IElkLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG9wdGlvbnM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPEksIEM+KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGZyb21JdGVtSWQ6IGlkID8/IG9wdGlvbnMuZnJvbUl0ZW1JZCwgaXRlbUNvbmZpZ01hcCwgLi4ub3B0aW9ucyB9O1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCB7IHNjcm9sbFNpemUsIGlzRnJvbUl0ZW1JZEZvdW5kIH0gPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemU6IHRoaXMuX2NydWREZXRlY3RlZCB8fCBvcHQuZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcDogdGhpcy5fZGVsZXRlZEl0ZW1zTWFwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpc0Zyb21JdGVtSWRGb3VuZCA/IHNjcm9sbFNpemUgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2ZW50U2Nyb2xsU25hcHBpbmcoY2xlYXJCdWZmZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSB0aGlzLl9pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoY2xlYXJCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNTY3JvbGxTbmFwVG9TdGFydCA9IHRoaXMuX2lzU2Nyb2xsU25hcFRvRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHNcclxuICAgICAqL1xyXG4gICAgZ2V0TWV0cmljczxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEksIEM+KTogSUdldE1ldHJpY3NSZXR1cm5zIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfSwgY3J1ZERldGVjdGVkID0gdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAgPSB0aGlzLl9kZWxldGVkSXRlbXNNYXA7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdEJ1ZmZlclNpemUgPSBvcHQuYnVmZmVyU2l6ZTtcclxuICAgICAgICB0aGlzLl9tYXhCdWZmZXJTaXplID0gb3B0Lm1heEJ1ZmZlclNpemU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgY29sbGVjdGlvbjogaXRlbXMsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgdG90YWxTaXplOiBtZXRyaWNzLnRvdGFsU2l6ZSwgZGVsdGE6IG1ldHJpY3MuZGVsdGEsIGNydWREZXRlY3RlZCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQ29sbGVjdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEksIEM+KTogSVVwZGF0ZUNvbGxlY3Rpb25SZXR1cm5zIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfSwgZHluYW1pY1NpemUgPSBvcHQuZHluYW1pY1NpemUsIGNydWREZXRlY3RlZCA9IHRoaXMuX2NydWREZXRlY3RlZCxcclxuICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwID0gdGhpcy5fZGVsZXRlZEl0ZW1zTWFwO1xyXG4gICAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMob3B0LmlzVmVydGljYWwsIG9wdC5pdGVtU2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Moe1xyXG4gICAgICAgICAgICAuLi5vcHQsXHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGl0ZW1zLFxyXG4gICAgICAgICAgICBwcmV2aW91c1RvdGFsU2l6ZTogdGhpcy5fcHJldmlvdXNUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGNydWREZXRlY3RlZDogdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlbHRhICs9IG1ldHJpY3MuZGVsdGE7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXMobWV0cmljcywgaXRlbXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNUb3RhbFNpemUgPSBtZXRyaWNzLnRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVsZXRlZEl0ZW1zTWFwID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAob3B0LmR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlJdGVtcyA9IHRoaXMuZ2VuZXJhdGVEaXNwbGF5Q29sbGVjdGlvbihtZXRyaWNzLml0ZW1zLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5tZXRyaWNzLCB9KTtcclxuICAgICAgICByZXR1cm4geyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogbWV0cmljcy50b3RhbFNpemUsIGRlbHRhOiBtZXRyaWNzLmRlbHRhLCBjcnVkRGV0ZWN0ZWQsIGxlZnRMYXlvdXRPZmZzZXQ6IG1ldHJpY3MubGVmdExheW91dE9mZnNldCB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcHJldmlvdXNTY3JvbGxTaXplID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXM8SSBleHRlbmRzIElJdGVtPihtZXRyaWNzOiBJTWV0cmljczxJPiwgdG90YWxJdGVtc0xlbmd0aDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IG1ldHJpY3Muc2Nyb2xsU2l6ZSArIHRoaXMuX2RlbHRhLCBkZWx0YSA9IE1hdGguYWJzKHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSAtIHNjcm9sbFNpemUpO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemU7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyUmF3U2l6ZSA9IE1hdGgubWluKE1hdGguZmxvb3IobWV0cmljcy50eXBpY2FsSXRlbVNpemUgIT09IDAgPyBkZWx0YSAvIG1ldHJpY3MudHlwaWNhbEl0ZW1TaXplIDogMCkgKiA1LCB0b3RhbEl0ZW1zTGVuZ3RoKSxcclxuICAgICAgICAgICAgbWluQnVmZmVyU2l6ZSA9IGJ1ZmZlclJhd1NpemUgPCB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA/IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplIDogYnVmZmVyUmF3U2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyVmFsdWUgPSBtaW5CdWZmZXJTaXplID4gdGhpcy5fbWF4QnVmZmVyU2l6ZSA/IHRoaXMuX21heEJ1ZmZlclNpemUgOiBtaW5CdWZmZXJTaXplO1xyXG5cclxuICAgICAgICB0aGlzLl9idWZmZXJTaXplID0gYnVmZmVySW50ZXJwb2xhdGlvbih0aGlzLl9idWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UsIGJ1ZmZlclZhbHVlLCB7XHJcbiAgICAgICAgICAgIGV4dHJlbXVtVGhyZXNob2xkOiB0aGlzLl9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkLFxyXG4gICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLl9tYXhCdWZmZXJTZXF1ZW5jZUxlbmd0aCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFJlc2V0QnVmZmVyU2l6ZVRpbWVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHN0YXJ0UmVzZXRCdWZmZXJTaXplVGltZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRCdWZmZXJTaXplVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fYnVmZmVyU2l6ZSA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG4gICAgICAgICAgICB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UgPSBbXTtcclxuICAgICAgICB9LCB0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lb3V0KSBhcyB1bmtub3duIGFzIG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBlbnRyeSBpbnRvIHRoZSBvdmVyc2Nyb2xsIGFyZWEgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBvdmVyc2Nyb2xsIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRFbGVtZW50TnVtVG9FbmQ8SSBleHRlbmRzIElJdGVtLCBDIGV4dGVuZHMgQXJyYXk8ST4+KGk6IG51bWJlciwgY29sbGVjdGlvbjogQywgbWFwOiBDTWFwPElkLCBJU2l6ZT4sIHR5cGljYWxJdGVtU2l6ZTogbnVtYmVyLFxyXG4gICAgICAgIHNpemU6IG51bWJlciwgaXNWZXJ0aWNhbDogYm9vbGVhbiwgaW5kZXhPZmZzZXQ6IG51bWJlciA9IDAsIHJldmVyc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHsgbnVtOiBudW1iZXIsIG9mZnNldDogbnVtYmVyIH0ge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSwgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDAsIG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbGxlY3Rpb24ubGVuZ3RoIC0gaW5kZXhPZmZzZXQgLSAxOyByZXZlcnNlID8gaiA+PSAwIDogaiA+PSBpOyBqLS0pIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNvbGxlY3Rpb25bal0sIGlkID0gaXRlbVt0cmFja0J5XTtcclxuICAgICAgICAgICAgbGV0IGl0ZW1TaXplID0gMDtcclxuICAgICAgICAgICAgaWYgKG1hcC5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9IG1hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSBjYWNoZSAmJiBjYWNoZVtzaXplUHJvcGVydHldID4gMCA/IGNhY2hlW3NpemVQcm9wZXJ0eV0gOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob2Zmc2V0ICsgaXRlbVNpemUgPiBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBudW0sIG9mZnNldCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICAgICAgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG51bSwgb2Zmc2V0IH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGxpc3QgbWV0cmljc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVjYWxjdWxhdGVNZXRyaWNzPEkgZXh0ZW5kcyBJSXRlbSwgQyBleHRlbmRzIEFycmF5PEk+PihvcHRpb25zOiBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPik6IElNZXRyaWNzPEk+IHtcclxuICAgICAgICBjb25zdCB7IGFsaWdubWVudCwgZnJvbUl0ZW1JZCwgYm91bmRzLCBjb2xsZWN0aW9uLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLCBtYXhJdGVtU2l6ZSwgYnVmZmVyU2l6ZTogbWluQnVmZmVyU2l6ZSxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZSwgc3RpY2t5RW5hYmxlZCwgaXRlbUNvbmZpZ01hcCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgcHJldmlvdXNUb3RhbFNpemUsIHNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwLCBpdGVtVHJhbnNmb3JtIH0gPSBvcHRpb25zIGFzIElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+ICYge1xyXG4gICAgICAgICAgICAgICAgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgICAgICAgICAgfSwgcm91bmRlZFNjcm9sbFNpemUgPSBNYXRoLnJvdW5kKHNjcm9sbFNpemUpO1xyXG5cclxuICAgICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUsIGJ1ZmZlclNpemUgPSBNYXRoLm1heChtaW5CdWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplKSxcclxuICAgICAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMsIHNpemVQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLFxyXG4gICAgICAgICAgICBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLCB0b3RhbExlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCB0eXBpY2FsSXRlbVNpemUgPSBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyB3aWR0aCA6IHR5cGljYWxJdGVtU2l6ZSwgaCA9IGlzVmVydGljYWwgPyB0eXBpY2FsSXRlbVNpemUgOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIG1hcCA9IHRoaXMuX21hcCwgc25hcHNob3QgPSB0aGlzLl9zbmFwc2hvdCwgZGl2aWRlcyA9IHRoaXMuX2RpdmlkZXMsXHJcbiAgICAgICAgICAgIHN0aWNreVBvcyA9IE1hdGguZmxvb3Ioc2Nyb2xsU2l6ZSkgKyB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCwgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0czogQXJyYXk8bnVtYmVyPiA9IFtdLFxyXG4gICAgICAgICAgICBpc0Zyb21JZCA9IGZyb21JdGVtSWQgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGZyb21JdGVtSWQgPT09ICdudW1iZXInICYmIGZyb21JdGVtSWQgPiAtMSlcclxuICAgICAgICAgICAgICAgIHx8ICh0eXBlb2YgZnJvbUl0ZW1JZCA9PT0gJ3N0cmluZycgJiYgZnJvbUl0ZW1JZCA+ICctMScpO1xyXG5cclxuICAgICAgICBsZXQgbGVmdEl0ZW1zT2Zmc2V0ID0gMCwgcmlnaHRJdGVtc09mZnNldCA9IDA7XHJcbiAgICAgICAgaWYgKGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24pIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9zY3JvbGxEaXJlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMToge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc09mZnNldCA9IGJ1ZmZlclNpemUgKiBkaXZpZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSAtMToge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IGJ1ZmZlclNpemUgKiBkaXZpZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09mZnNldCA9IHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kOiBudW1iZXIgPSAtMSxcclxuICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gMCxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSAtMSxcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSAwLCByaWdodEl0ZW1MZW5ndGggPSAwLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgPSAwLCByaWdodEl0ZW1zV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zID0gMCxcclxuICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBpdGVtQnlJZDogSSB8IG51bGwgPSBudWxsLFxyXG4gICAgICAgICAgICBpdGVtQnlJZFBvczogbnVtYmVyID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQsXHJcbiAgICAgICAgICAgIGlzVGFyZ2V0SW5PdmVyc2Nyb2xsOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBpdGVtQnlJZFBvcyxcclxuICAgICAgICAgICAgdG90YWxTaXplID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgKyB0aGlzLl9zY3JvbGxFbmRPZmZzZXQsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcclxuICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQgPSBmYWxzZSxcclxuICAgICAgICAgICAgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiA9IDAsXHJcbiAgICAgICAgICAgIGlzVXBkYXRpbmcgPSBmYWxzZSxcclxuICAgICAgICAgICAgbGVmdFlPZmZzZXQgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gMCxcclxuICAgICAgICAgICAgbGVmdExheW91dEluZGV4T2Zmc2V0ID0gMCxcclxuICAgICAgICAgICAgcmlnaHRMYXlvdXRJbmRleE9mZnNldCA9IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhcnQgPSAoKHJvdW5kZWRTY3JvbGxTaXplID09PSAwKSB8fCB0aGlzLmlzU25hcHBlZFRvU3RhcnQpO1xyXG4gICAgICAgIGxldCBzdGlja3lJdGVtSWQ6IElkIHwgdW5kZWZpbmVkLCBpc05ldyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgaXRlbXM6IEFycmF5PEk+O1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgbGlzdCBpcyBkeW5hbWljIG9yIHRoZXJlIGFyZSBuZXcgZWxlbWVudHMgaW4gdGhlIGNvbGxlY3Rpb24sIHRoZW4gaXQgc3dpdGNoZXMgdG8gdGhlIGxvbmcgYWxnb3JpdGhtLlxyXG4gICAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlSWRQcm9wID0gZ2V0U2VydmljZUlkUHJvcCh0cmFja0J5KTtcclxuICAgICAgICAgICAgaWYgKGlzRnJvbUlkKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGlja3lJZDogSWQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsIGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY29sbGVjdGlvbltpXSwgaWQgPSBpdGVtPy5bdHJhY2tCeV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SWQgPSBpZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW1JZCA9IHN0aWNreUlkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gZnJvbUl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCB5ID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICBzdGlja3lDb21wb25lbnRTaXplID0gMCxcclxuICAgICAgICAgICAgICAgIHJvdzoge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SXRlbUluZGV4OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kSXRlbUluZGV4OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHNuYXBzaG90U2l6ZTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb246IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtczogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXM6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFPZk5ld0l0ZW1zOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0czogbnVtYmVyIHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydEl0ZW1JbmRleDogMCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRJdGVtSW5kZXg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMCxcclxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdFNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbjogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFPZk5ld0l0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodDogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodDogMCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZSA9IChpOiBudW1iZXIsIGw6IG51bWJlciwgbGk6IG51bWJlciwgaXNQcmVjb2xsZWN0aW9uOiBib29sZWFuID0gZmFsc2UsIGlkUHJlZml4OiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWkgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgIGlmIChpaSA+IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uSXRlbSA9IGNvbGxlY3Rpb25baV0sXHJcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBjb2xsZWN0aW9uSXRlbVt0cmFja0J5XSxcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3kgPSBpdGVtQ29uZmlnTWFwPy5baWRdPy5zdGlja3kgPz8gMCxcclxuICAgICAgICAgICAgICAgICAgICBpc05ld1JvdyA9IGkgJSBkaXZpZGVzID09PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTGFzdEl0ZW1JblJvdyA9IGlpICUgZGl2aWRlcyA9PT0gMCxcclxuICAgICAgICAgICAgICAgICAgICBpc0xhc3RJdGVtID0gaSA9PT0gbGksXHJcbiAgICAgICAgICAgICAgICAgICAgaXNSb3dFbmQgPSAoaXNMYXN0SXRlbUluUm93IHx8ICghaXNMYXN0SXRlbUluUm93ICYmIGlzTGFzdEl0ZW0pKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goaXNQcmVjb2xsZWN0aW9uID8geyAuLi5jb2xsZWN0aW9uSXRlbSwgW3NlcnZpY2VJZFByb3BdOiBgXyR7aWRQcmVmaXh9LSR7aWR9X2AgfSA6IGNvbGxlY3Rpb25JdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05ld1JvdyB8fCByb3cgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3cgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SXRlbUluZGV4OiBpICsgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kSXRlbUluZGV4OiBpICsgZGl2aWRlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RTaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFPZk5ld0l0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnRTaXplID0gMCwgcm93U2l6ZURlbHRhID0gMCwgaXRlbURpc3BsYXlNZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcyA9IEl0ZW1EaXNwbGF5TWV0aG9kcy5OT1RfQ0hBTkdFRDtcclxuICAgICAgICAgICAgICAgIGlmIChtYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2l6ZSA9IGNhY2hlW3NpemVQcm9wZXJ0eV0gPiAwID8gY2FjaGVbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtRGlzcGxheU1ldGhvZCA9IGNhY2hlPy5tZXRob2QgPz8gSXRlbURpc3BsYXlNZXRob2RzLlVQREFURTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0l0ZW1OZXcgPSB0aGlzLl9uZXdJdGVtcy5pbmRleE9mKGlkKSA+IC0xIHx8ICh0aGlzLl9pc0xhenkgJiYgaXNTdGFydCAmJiAhdGhpcy5faXNSZXNldGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBpc05ldyA9IGlzSXRlbU5ldztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNVcGRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90Qm91bmRzID0gc25hcHNob3QuZ2V0KGlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RTaXplID0gc25hcHNob3RCb3VuZHMgPyBzbmFwc2hvdEJvdW5kc1tzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByb3cuc2l6ZSA9IE1hdGgubWF4KHJvdy5zaXplLCBjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICByb3cuc25hcHNob3RTaXplID0gTWF0aC5tYXgocm93LnNuYXBzaG90U2l6ZSwgc25hcHNob3RTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcm93U2l6ZURlbHRhID0gcm93LnNpemUgLSByb3cuc25hcHNob3RTaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGl0ZW1EaXNwbGF5TWV0aG9kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLlVQREFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLnNldChpZCwgeyAuLi5jYWNoZSwgbWV0aG9kOiBpc05ldyA/IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEUgOiBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQsIFtJU19ORVddOiBpc05ldyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Jvd0VuZCAmJiBpc05ldyAmJiB5IDw9IChzY3JvbGxTaXplICsgc2l6ZSArIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gKyBjb21wb25lbnRTaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5kZWx0YUZyb21TdGFydENyZWF0aW9uID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NpemVEZWx0YSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NpemVEZWx0YSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zZXQoaWQsIHsgLi4uY2FjaGUsIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLlVQREFURSwgW0lTX05FV106IGlzTmV3IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUm93RW5kICYmIGlzTmV3ICYmIHkgPD0gKHNjcm9sbFNpemUgKyBzaXplICsgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiArIGNvbXBvbmVudFNpemUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gPSByb3dTaXplRGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93U2l6ZURlbHRhID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTaXplID0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5zaXplID0gTWF0aC5tYXgocm93LnNpemUsIGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5zbmFwc2hvdFNpemUgPSByb3cuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICByb3dTaXplRGVsdGEgPSByb3cuc2l6ZSAtIHJvdy5zbmFwc2hvdFNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRlbGV0ZWRJdGVtc01hcC5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gZGVsZXRlZEl0ZW1zTWFwW2ldLCBzaXplID0gY2FjaGU/LltzaXplUHJvcGVydHldID8/IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IHNjcm9sbFNpemUgKyB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCAtIHNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRTaXplT2ZEZWxldGVkSXRlbXMgPSBNYXRoLm1heChyb3cubGVmdFNpemVPZkRlbGV0ZWRJdGVtcywgc2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQnlJZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgIT0gZnJvbUl0ZW1JZCAmJiBpZCA9PT0gc3RpY2t5SXRlbUlkICYmIHN0aWNreSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5Q29tcG9uZW50U2l6ZSA9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IC09IHN0aWNreUNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PSBmcm9tSXRlbUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Zyb21JdGVtSWRGb3VuZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWdubWVudCAhPT0gQWxpZ25tZW50cy5DRU5URVIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG51bSwgb2Zmc2V0IH0gPSB0aGlzLmdldEVsZW1lbnROdW1Ub0VuZChpLCBjb2xsZWN0aW9uLCBtYXAsIHR5cGljYWxJdGVtU2l6ZSwgc2l6ZSwgaXNWZXJ0aWNhbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRWaWV3cG9ydFNpemUgPSBzaXplIC0gb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0Vmlld3BvcnRTaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG51bTogbnVtMSwgb2Zmc2V0OiBvZmZzZXQxIH0gPSB0aGlzLmdldEVsZW1lbnROdW1Ub0VuZChpICsgbnVtLCBjb2xsZWN0aW9uLCBtYXAsIHR5cGljYWxJdGVtU2l6ZSwgc2l6ZSwgaXNWZXJ0aWNhbCwgMCwgdHJ1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YU51bSA9IChudW0xIC0gbnVtKSwgZGVsdGFPZmZzZXQgPSAob2Zmc2V0MSAtIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC09IGRlbHRhTnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ID0gcmlnaHRJdGVtTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IGRlbHRhT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLnNwbGljZShsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLmxlbmd0aCAtIGRlbHRhTnVtLCBkZWx0YU51bSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgLT0gZGVsdGFPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1CeUlkID0gY29sbGVjdGlvbkl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQnlJZFBvcyA9IHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLnB1c2goY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSByb3cuc3RhcnRJdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPD0gc2Nyb2xsU2l6ZSAtIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByb3cubGVmdEl0ZW1zT3JSb3dzV2VpZ2h0cyA9IE1hdGgubWF4KHJvdy5sZWZ0SXRlbXNPclJvd3NXZWlnaHRzLCBjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICByb3cubGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gTWF0aC5tYXgocm93LmxlZnRIaWRkZW5JdGVtc1dlaWdodCwgY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ByZWNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IHJvdy5zdGFydEl0ZW1JbmRleDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRnJvbUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1CeUlkID09PSBudWxsIHx8IHkgPCBpdGVtQnlJZFBvcyArIHNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gcm93LmVuZEl0ZW1JbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIHJpZ2h0SXRlbXNPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5IDw9IHNjcm9sbFNpemUgKyBzaXplICsgY29tcG9uZW50U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNQcmVjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gcm93LmVuZEl0ZW1JbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByb3cudG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCA9IE1hdGgubWF4KHJvdy50b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0LCBjb21wb25lbnRTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUm93RW5kICYmIHkgPD0gc2Nyb2xsU2l6ZSArIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtRGlzcGxheU1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRTaXplT2ZBZGRlZEl0ZW1zID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubGVmdFNpemVPZlVwZGF0ZWRJdGVtcyA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkRFTEVURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSb3dFbmQgJiYgaXRlbURpc3BsYXlNZXRob2QgPT09IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmRlbHRhT2ZOZXdJdGVtcyA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Jvd0VuZCAmJiBpIDwgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5yaWdodEl0ZW1zV2VpZ2h0ID0gTWF0aC5tYXgocm93LnJpZ2h0SXRlbXNXZWlnaHQsIGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSb3dFbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUHJlY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uICs9IHJvdy5kZWx0YUZyb21TdGFydENyZWF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyArPSByb3cubGVmdFNpemVPZkFkZGVkSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKz0gcm93LmxlZnRTaXplT2ZVcGRhdGVkSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgKz0gcm93LmxlZnRTaXplT2ZEZWxldGVkSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtcyArPSByb3cuZGVsdGFPZk5ld0l0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ICs9IHJvdy5yaWdodEl0ZW1zV2VpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ICs9IHJvdy50b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgKz0gcm93LmxlZnRIaWRkZW5JdGVtc1dlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdy5sZWZ0SXRlbXNPclJvd3NXZWlnaHRzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLnB1c2gocm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSArPSByb3cuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB5ICs9IHJvdy5zaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydFNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGg7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnVmZlNpemUgPSAtMTtcclxuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxTaXplIDw9IHZpZXdwb3J0U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCBsaSA9IGwgPiAwID8gKGwgLSAxKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gdmlld3BvcnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoeSA8PSBsaW1pdCB8fCBidWZmU2l6ZSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZTaXplID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZTaXplID0gbGVmdEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPj0gbGltaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmU2l6ZS0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxjdWxhdGUobGkgLSBpLCBsLCBsaSwgdHJ1ZSwgU1RBUlRfQ09MTEVDVElPTl9QUkVGSVhfSUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPT09IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRZT2Zmc2V0ID0geTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IHZpZXdwb3J0U2l6ZSAqIC41O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TGF5b3V0SW5kZXhPZmZzZXQgPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0ICsgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocm93IGFzIGFueSkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwgbGkgPSBsIC0gMTsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjYWxjdWxhdGUoaSwgbCwgbGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICAocm93IGFzIGFueSkgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHl5ID0geSwgY3VycmVudFRvdGFsU2l6ZSA9IHRvdGFsU2l6ZSwgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRUb3RhbFNpemUgPSB0b3RhbFNpemUgKyB2aWV3cG9ydFNpemU7XHJcbiAgICAgICAgICAgICAgICByb3cgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJdGVtSW5kZXg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kSXRlbUluZGV4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc25hcHNob3RTaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb246IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCBsaSA9IGwgLSAxO1xyXG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwLCBjb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoeSA8IG5vcm1hbGl6ZWRUb3RhbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FsY3VsYXRlKGksIGwsIGxpLCB0cnVlLCBFTkRfQ09MTEVDVElPTl9QUkVGSVhfSUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPT09IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgeSA9IHl5O1xyXG4gICAgICAgICAgICAgICAgdG90YWxTaXplID0gY3VycmVudFRvdGFsU2l6ZTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0TGF5b3V0SW5kZXhPZmZzZXQgPSBjb3VudDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IChpc0Zyb21JZCA/IGl0ZW1CeUlkUG9zIDogc2Nyb2xsU2l6ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA8PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDw9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHMuc3BsaWNlKDAsIGxlZnRJdGVtc09yUm93c1dlaWdodHMubGVuZ3RoIC0gYnVmZmVyU2l6ZSk7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCArPSB2O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgbGVmdEl0ZW1zT2Zmc2V0KTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0ID4gdG90YWxMZW5ndGhcclxuICAgICAgICAgICAgICAgID8gdG90YWxMZW5ndGggLSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA6IHJpZ2h0SXRlbXNPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBzdGFydEluZGV4ID0gKE1hdGguY2VpbChNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC0gbGVmdEl0ZW1MZW5ndGgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApIC8gZGl2aWRlcykgKiBkaXZpZGVzKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAvLyBCdWZmZXIgb3B0aW1pemF0aW9uIGRvZXMgbm90IHdvcmsgb24gZmFzdCBsaW5lYXIgYWxnb3JpdGhtXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplID0gdHlwaWNhbEl0ZW1TaXplIC8gZGl2aWRlcywgYnVmZmVySXRlbU51bWJlcnMgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IE1hdGguZmxvb3IoZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAhPT0gMCA/IChzY3JvbGxTaXplIC8gZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSkgOiAwKTtcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSBNYXRoLmNlaWwoZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAhPT0gMCA/ICgoc2Nyb2xsU2l6ZSArIHNpemUpIC8gZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSkgOiAwKTtcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLCBidWZmZXJTaXplICogZGl2aWRlcyk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IChpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIGJ1ZmZlckl0ZW1OdW1iZXJzKSA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiBidWZmZXJJdGVtTnVtYmVycztcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0ID0gTWF0aC5mbG9vcihsZWZ0SXRlbUxlbmd0aCAqIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUgLyB0eXBpY2FsSXRlbVNpemUpICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ID0gTWF0aC5mbG9vcihyaWdodEl0ZW1MZW5ndGggKiBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplIC8gdHlwaWNhbEl0ZW1TaXplKSAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gTWF0aC5mbG9vcihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAvIHR5cGljYWxJdGVtU2l6ZSkgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgPSBNYXRoLmZsb29yKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAvIHR5cGljYWxJdGVtU2l6ZSkgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IChNYXRoLmNlaWwodG90YWxMZW5ndGggLyBkaXZpZGVzKSAqIGRpdmlkZXMgKiBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplKSArIHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0ICsgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBrID0gdG90YWxTaXplICE9PSAwID8gcHJldmlvdXNUb3RhbFNpemUgLyB0b3RhbFNpemUgOiAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzRnJvbUlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGNvbGxlY3Rpb24uZmluZEluZGV4KGl0ZW0gPT4gaXRlbVt0cmFja0J5XSA9PSBmcm9tSXRlbUlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUJ5SWRQb3MgPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCArIE1hdGguZmxvb3IoaW5kZXggKiBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplIC8gZGl2aWRlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gKGlzRnJvbUlkID8gaXRlbUJ5SWRQb3MgOiBzY3JvbGxTaXplICogayk7XHJcblxyXG4gICAgICAgICAgICBpdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aDtcclxuICAgICAgICAgICAgICAgIGxldCBidWZmU2l6ZSA9IC0xLCB5ID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA8PSB2aWV3cG9ydFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwgbGkgPSBsID4gMCA/IChsIC0gMSkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdCA9IHZpZXdwb3J0U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHkgPD0gbGltaXQgfHwgYnVmZlNpemUgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWkgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmU2l6ZSA9IGxlZnRJdGVtc09mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID49IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZlNpemUtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IGxpIC0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmxlbmd0aCA+IGl0ZW1JbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY29sbGVjdGlvbltpdGVtSW5kZXhdIGFzIEkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdEl0ZW1JblJvdyA9IGlpICUgZGl2aWRlcyA9PT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3RJdGVtID0gaSA9PT0gbGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNMYXN0SXRlbUluUm93IHx8ICghaXNMYXN0SXRlbUluUm93ICYmIGlzTGFzdEl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlpID09PSBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0WU9mZnNldCA9IHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQgPSB2aWV3cG9ydFNpemUgKiAuNTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdExheW91dEluZGV4T2Zmc2V0ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uY29sbGVjdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNJbmZpbml0eSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHkgPSBNYXRoLmZsb29yKHRvdGFsU2l6ZSAvIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUpICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVG90YWxTaXplID0gdG90YWxTaXplICsgdmlld3BvcnRTaXplO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCBsaSA9IGwgLSAxO1xyXG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwLCBjb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoeSA8IG5vcm1hbGl6ZWRUb3RhbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpaSA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmxlbmd0aCA8PSBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNvbGxlY3Rpb25baV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdEl0ZW1JblJvdyA9IGlpICUgZGl2aWRlcyA9PT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMYXN0SXRlbSA9IGkgPT09IGxpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0xhc3RJdGVtSW5Sb3cgfHwgKCFpc0xhc3RJdGVtSW5Sb3cgJiYgaXNMYXN0SXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPT09IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmlnaHRMYXlvdXRJbmRleE9mZnNldCA9IGNvdW50O1xyXG4gICAgICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLCBsZWZ0SXRlbXNPZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0ID4gdG90YWxMZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiByaWdodEl0ZW1zT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAoTWF0aC5jZWlsKE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLSBsZWZ0SXRlbUxlbmd0aCwgdG90YWxMZW5ndGggPiAwID8gdG90YWxMZW5ndGggLSAxIDogMCkgLyBkaXZpZGVzKSAqIGRpdmlkZXMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLSBsZWZ0SXRlbUxlbmd0aCwgdG90YWxMZW5ndGggPiAwID8gdG90YWxMZW5ndGggLSAxIDogMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zT25EaXNwbGF5V2VpZ2h0ID0gdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCAtIGxlZnRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlMZW5ndGggPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCAtIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCArIGxlZnRIaWRkZW5JdGVtc1dlaWdodCAtIGxlZnRJdGVtc1dlaWdodCAtIGxlZnRZT2Zmc2V0LFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtcyA9IChNYXRoLmNlaWwoKGl0ZW1zT25EaXNwbGF5TGVuZ3RoICsgbGVmdEl0ZW1MZW5ndGggKyByaWdodEl0ZW1MZW5ndGgpIC8gZGl2aWRlcykgKiBkaXZpZGVzKSArIHJpZ2h0TGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgIHN0YXJ0Q3JlYXRpb25EZWx0YSA9IGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gPiAwID8gZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiA6IDAsXHJcbiAgICAgICAgICAgIGRlbHRhID0gbGVmdFNpemVPZlVwZGF0ZWRJdGVtcyArIGxlZnRTaXplT2ZBZGRlZEl0ZW1zIC0gbGVmdFNpemVPZkRlbGV0ZWRJdGVtcyArIHN0YXJ0Q3JlYXRpb25EZWx0YTtcclxuICAgICAgICB0aGlzLl9kZWx0YU9mTmV3SXRlbXMgPSBkZWx0YU9mTmV3SXRlbXM7XHJcblxyXG4gICAgICAgIGlmIChpc0Zyb21JZCAmJiAhaXNUYXJnZXRJbk92ZXJzY3JvbGwpIHtcclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSAtPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1ldHJpY3M6IElNZXRyaWNzPEk+ID0ge1xyXG4gICAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1XaWR0aDogdyxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQ6IGgsXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICBkaXZpZGVzLFxyXG4gICAgICAgICAgICBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgIG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpdGVtcyxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5V2VpZ2h0LFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheUxlbmd0aCxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0LFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zLFxyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zLFxyXG4gICAgICAgICAgICBzaXplUHJvcGVydHksXHJcbiAgICAgICAgICAgIHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgIHN0aWNreVBvcyxcclxuICAgICAgICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCxcclxuICAgICAgICAgICAgdG90YWxMZW5ndGgsXHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSxcclxuICAgICAgICAgICAgdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpc0Zyb21JdGVtSWRGb3VuZCxcclxuICAgICAgICAgICAgaXNVcGRhdGluZyxcclxuICAgICAgICAgICAgc25hcFRvSXRlbSxcclxuICAgICAgICAgICAgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICBpdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBtZXRyaWNzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2hDYWNoZShjYWNoZTogUHJlcmVuZGVyQ2FjaGUpIHtcclxuICAgICAgICB0aGlzLl9wcmVyZW5kZXJlZENhY2hlID0gY2FjaGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJEZWx0YSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9kZWx0YSA9IHRoaXMuX2RlbHRhT2ZOZXdJdGVtcyA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlcyhpbW1lZGlhdGVseTogYm9vbGVhbiA9IGZhbHNlLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGltbWVkaWF0ZWx5KSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JjZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idW1wVmVyc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzVmVyc2lvbiA9IHRoaXMuX3ZlcnNpb247XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goQ0FDSEVfQk9YX0NIQU5HRV9FVkVOVF9OQU1FIGFzIENhY2hlTWFwRXZlbnRzLCB0aGlzLnZlcnNpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JjZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idW1wVmVyc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5nZXNEZXRlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5idW1wVmVyc2lvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYm91bmRzIG9mIGF0IGxlYXN0IG9uZSBzY3JlZW4gb2JqZWN0IGhhdmUgY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgY2hlY2tCb3VuZHNPZkVsZW1lbnRzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHNbaV0sIGl0ZW1JZCA9IGNvbXBvbmVudC5pbnN0YW5jZS5pdGVtSWQ7XHJcbiAgICAgICAgICAgIGlmIChpdGVtSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gY29tcG9uZW50Lmluc3RhbmNlLmdldEJvdW5kcygpLCBjYWNoZSA9IHRoaXMuZ2V0KGl0ZW1JZCk7XHJcbiAgICAgICAgICAgIGlmICghIWJvdW5kcyAmJiAhIWNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRzLndpZHRoICE9PSBjYWNoZS53aWR0aCB8fCBib3VuZHMuaGVpZ2h0ICE9PSBjYWNoZS5oZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlRGlzcGxheUNvbGxlY3Rpb248SSBleHRlbmRzIElJdGVtLCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBhY3R1YWxJdGVtczogQywgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgICAgICBtZXRyaWNzOiBJTWV0cmljczxJPik6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24ge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodCxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1XaWR0aCxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICBkaXZpZGVzLFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheUxlbmd0aCxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgbGVmdExheW91dE9mZnNldDogbGF5b3V0T2Zmc2V0LFxyXG4gICAgICAgICAgICBsZWZ0TGF5b3V0SW5kZXhPZmZzZXQ6IGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtczogcmVuZGVySXRlbXNMZW5ndGgsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIHNpemVQcm9wZXJ0eSxcclxuICAgICAgICAgICAgc3RpY2t5RW5hYmxlZCxcclxuICAgICAgICAgICAgc3RpY2t5UG9zLFxyXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICB0b3RhbExlbmd0aCxcclxuICAgICAgICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgICAgICAgdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgICAgICBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgIHNuYXBUb0l0ZW0sXHJcbiAgICAgICAgICAgIHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICB9ID0gbWV0cmljcyxcclxuICAgICAgICAgICAgZGlzcGxheUl0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcblxyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lLCBhY3R1YWxTbmlwcGVkUG9zaXRpb24gPSBzdGlja3lQb3MsXHJcbiAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICBkZWx0YU9mZmV0ID0gKGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA/IHNjcm9sbFNpemUgOiAwKSxcclxuICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IHRoaXMuX3Njcm9sbERpcmVjdGlvbixcclxuICAgICAgICAgICAgICAgIGJvdW5kc1NpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsIGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiA9IHNjcm9sbFNpemUgKyBib3VuZHNTaXplIC0gdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgcG9zID0gc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIHJlbmRlckl0ZW1zID0gcmVuZGVySXRlbXNMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBzdGlja3lJdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBuZXh0U3RpY2t5OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBzdGlja3lJdGVtSW5kZXggPSAtMSwgbmV4c3RTdGlja3lJdGVtSW5kZXggPSAtMSxcclxuICAgICAgICAgICAgICAgIHN0aWNreUl0ZW1TaXplID0gMCwgZW5kU3RpY2t5SXRlbTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCwgbmV4dEVuZFN0aWNreTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW1JbmRleCA9IC0xLCBlbmRTdGlja3lJdGVtU2l6ZSA9IDA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsaSA9IGxheW91dEluZGV4T2Zmc2V0ICsgYWN0dWFsSXRlbXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgaWYgKHN0aWNreUVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID4gMCA/IChkaXZpZGVzID4gMSA/IChpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC0gMSkgOiBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kKSA6IDAsIHRvdGFsTGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBpdGVtc1tpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEdW1teSA9IGNvbGxlY3Rpb25JdGVtPy5bU0VSVklDRV9QUk9QX0RVTU1ZXSAmJiAoY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldID09PSBTRVJWSUNFX1BST1BfRFVNTVlfRU5BQkxFRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xsZWN0aW9uSXRlbSB8fCBpc0R1bW15KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IE1hdGguZmxvb3IoKChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICsgMSkgLyBkaXZpZGVzKSwgaWQgPSBjb2xsZWN0aW9uSXRlbVt0cmFja0J5XSwgY2FjaGUgPSB0aGlzLmdldChpZCkhLCBzdGlja3kgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc2VsZWN0YWJsZSA/PyB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5jb2xsYXBzYWJsZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGR5bmFtaWNTaXplID8gY2FjaGU/LltzaXplUHJvcGVydHldID4gMCA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZSA6IHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uID0gcG9zIC0gKHNjcm9sbFNpemUgLSBzaXplKSAtIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhdGlvID0gc2l6ZSAhPT0gMCA/IGJvdW5kc1NpemUgLyBzaXplIDogMCwgYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCA9IC0oYm91bmRzU2l6ZSAhPT0gMCA/IGFic29sdXRlU3RhcnRQb3NpdGlvbiAvIGJvdW5kc1NpemUgOiAwKSAqIHJhdGlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uID0gYm91bmRzU2l6ZSAtIChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgc2l6ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb25QZXJjZW50ID0gKGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQgKyAoYm91bmRzU2l6ZSAhPT0gMCA/IChhYnNvbHV0ZUVuZFBvc2l0aW9uICsgc2l6ZSkgLyBib3VuZHNTaXplIDogMCkgKiByYXRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHggPSBpc1ZlcnRpY2FsID8gMCA6IGFjdHVhbFNuaXBwZWRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGlzVmVydGljYWwgPyBhY3R1YWxTbmlwcGVkUG9zaXRpb24gOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3kgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZGQgPSAoaXRlbXMubGVuZ3RoIC0gbGF5b3V0SW5kZXhPZmZzZXQgKyBpKSAlIDIgIT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVzOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtTWVhc3VyZXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkWDogeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFk6IHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgejogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25ZOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWjogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/IHNpemUgOiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IHJvd0luZGV4ICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiByb3dJbmRleCAlIDIgPT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBwb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlU3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvblBlcmNlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiBzdGlja3kgPT09IDEgPyB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCA6IHN0aWNreSA9PT0gMiA/IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGRlbHRhT2ZmZXQgLSBzaXplIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZzogSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsU2l6ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0OiBpID09PSBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3Q6IGkgPT09IGxpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldzogKGNhY2hlIGFzIENhY2hlKT8uW0lTX05FV10gPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiAhaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwOiBzdGlja3lFbmFibGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zOiBpdGVtcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg6IGkgLSBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiBaX0lOREVYXzEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGE6IEkgPSBjb2xsZWN0aW9uSXRlbTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSwgaWQsIG1lYXN1cmVzLCBkYXRhOiBpdGVtRGF0YSwgcHJldmlvdXNlRGF0YTogaSA+IDAgPyBpdGVtc1tpIC0gMV0gOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dERhdGE6IGkgPCB0b3RhbExlbmd0aCA/IGl0ZW1zW2kgKyAxXSA6IG51bGwsIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSBzaXplO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goc3RpY2t5SXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0aWNreUVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNpID0gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCArIGl0ZW1zT25EaXNwbGF5TGVuZ3RoIC0gMSwgc3RhcnRJbmRleCA9IHNpIDwgMCA/IHNpIDogc2k7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gTWF0aC5taW4oc3RhcnRJbmRleCwgdG90YWxMZW5ndGggPiAwID8gdG90YWxMZW5ndGggLSAxIDogMCksXHJcbiAgICAgICAgICAgICAgICAgICAgcm93SW5kZXggPSBNYXRoLmZsb29yKCgoaXRlbXMubGVuZ3RoIC0gbGF5b3V0SW5kZXhPZmZzZXQgKyBpKSArIDEpIC8gZGl2aWRlcyksXHJcbiAgICAgICAgICAgICAgICAgICAgbCA9IHRvdGFsTGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBpdGVtc1tpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEdW1teSA9IGNvbGxlY3Rpb25JdGVtPy5bU0VSVklDRV9QUk9QX0RVTU1ZXSAmJiAoY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldID09PSBTRVJWSUNFX1BST1BfRFVNTVlfRU5BQkxFRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xsZWN0aW9uSXRlbSB8fCBpc0R1bW15KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGNvbGxlY3Rpb25JdGVtW3RyYWNrQnldLCBjYWNoZSA9IHRoaXMuZ2V0KGlkKSEsIHN0aWNreSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPz8gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zZWxlY3RhYmxlID8/IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LmNvbGxhcHNhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZHluYW1pY1NpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY2FjaGU/LltzaXplUHJvcGVydHldIHx8IHR5cGljYWxJdGVtU2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0aWNreSA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyBub3JtYWxpemVkSXRlbVdpZHRoIDogc2l6ZSwgaCA9IGlzVmVydGljYWwgPyBzaXplIDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24gPSBwb3MgLSAoc2Nyb2xsU2l6ZSAtIHNpemUpIC0gc2l6ZSwgcmF0aW8gPSBzaXplICE9PSAwID8gYm91bmRzU2l6ZSAvIHNpemUgOiAwLCBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ID0gLShib3VuZHNTaXplICE9PSAwID8gYWJzb2x1dGVTdGFydFBvc2l0aW9uIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uID0gYm91bmRzU2l6ZSAtIChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgc2l6ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uUGVyY2VudCA9IChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgKGJvdW5kc1NpemUgIT09IDAgPyAoYWJzb2x1dGVFbmRQb3NpdGlvbiArIHNpemUpIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGlzVmVydGljYWwgPyAwIDogYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gdyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBpc1ZlcnRpY2FsID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gaCA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlczogSVJlbmRlclZpcnR1YWxMaXN0SXRlbU1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFg6IHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRZOiB5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25YOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVo6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiByb3dJbmRleCAlIDIgIT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbjogcm93SW5kZXggJSAyID09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kc1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb25QZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGRlbHRhT2ZmZXQgLSBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxTaXplOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3Q6IGkgPT09IGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdDogaSA9PT0gbGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3OiAoY2FjaGUgYXMgQ2FjaGUpPy5bSVNfTkVXXSA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IGlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46ICFpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXA6IHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkT3V0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljOiBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGl0ZW1zLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogaSAtIGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IFpfSU5ERVhfMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGNvbGxlY3Rpb25JdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBwcmV2aW91c2VEYXRhOiBpID4gMCA/IGl0ZW1zW2kgLSAxXSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RGF0YTogaSA8IHRvdGFsTGVuZ3RoID8gaXRlbXNbaSArIDFdIDogbnVsbCwgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtU2l6ZSA9IHNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChlbmRTdGlja3lJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uTGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgaSA9IHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgICAgICBjaSA9IDAsXHJcbiAgICAgICAgICAgICAgICByb3c6IHtcclxuICAgICAgICAgICAgICAgICAgICBzaXplOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgb2RkOiBib29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW46IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICB9ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgb2RkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVuOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHdoaWxlIChyZW5kZXJJdGVtcyA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpID49IGNvbGxlY3Rpb25MZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25JdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25JdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNEdW1teSA9IGNvbGxlY3Rpb25JdGVtPy5bU0VSVklDRV9QUk9QX0RVTU1ZXSAmJiAoY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldID09PSBTRVJWSUNFX1BST1BfRFVNTVlfRU5BQkxFRCksXHJcbiAgICAgICAgICAgICAgICAgICAgaWkgPSBpICsgMSxcclxuICAgICAgICAgICAgICAgICAgICByb3dJbmRleCA9IE1hdGguZmxvb3IoKChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICsgMSkgLyBkaXZpZGVzKSxcclxuICAgICAgICAgICAgICAgICAgICBpZCA9IGNvbGxlY3Rpb25JdGVtW3RyYWNrQnldLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlID0gdGhpcy5nZXQoaWQpISxcclxuICAgICAgICAgICAgICAgICAgICBzaXplID0gaXNEdW1teSA/IHR5cGljYWxJdGVtU2l6ZSA6IChkeW5hbWljU2l6ZSA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemUgOiB0eXBpY2FsSXRlbVNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpdlNpemUgPSAoaXNWZXJ0aWNhbCA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiBub3JtYWxpemVkSXRlbUhlaWdodCkgLyBkaXZpZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpICUgZGl2aWRlcyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICByb3cgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogcm93SW5kZXggJSAyICE9PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVuOiByb3dJbmRleCAlIDIgPT09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnNpemUgPSBNYXRoLm1heChyb3cuc2l6ZSwgc2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2krKztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRHVtbXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCB8fCBpZCAhPT0gc3RpY2t5SXRlbT8uaWQpICYmIGlkICE9PSBlbmRTdGlja3lJdGVtPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFNpemUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uZnVsbFNpemUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LnNlbGVjdGFibGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LmNvbGxhcHNhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZCA9IHN0aWNreUVuYWJsZWQgJiYgKChzdGlja3kgPT09IDEgJiYgKHBvcyA8PSBzY3JvbGxTaXplICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQpKSB8fCAoc3RpY2t5ID09PSAyICYmIChwb3MgPj0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSBzaXplKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uID0gcG9zIC0gc2Nyb2xsU2l6ZSwgcmF0aW8gPSBzaXplICE9PSAwID8gYm91bmRzU2l6ZSAvIHNpemUgOiAwLCBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ID0gLShib3VuZHNTaXplICE9PSAwID8gYWJzb2x1dGVTdGFydFBvc2l0aW9uIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uID0gYm91bmRzU2l6ZSAtIChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgc2l6ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uUGVyY2VudCA9IChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgKGJvdW5kc1NpemUgIT09IDAgPyAoYWJzb2x1dGVFbmRQb3NpdGlvbiArIHNpemUpIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGlzVmVydGljYWwgPyBkaXZTaXplICogKChzdGlja3kgfHwgZnVsbFNpemUpID8gMCA6IGNpKSA6IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBpc1ZlcnRpY2FsID8gcG9zIDogZGl2U2l6ZSAqICgoc3RpY2t5IHx8IGZ1bGxTaXplKSA/IDAgOiBjaSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlczogSVJlbmRlclZpcnR1YWxMaXN0SXRlbU1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFg6IHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRZOiB5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25YOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVo6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uUGVyY2VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/ICgoc3RpY2t5IHx8IGZ1bGxTaXplKSA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiAobm9ybWFsaXplZEl0ZW1XaWR0aCAvIGRpdmlkZXMpKSA6IHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpc1ZlcnRpY2FsID8gc2l6ZSA6ICgoc3RpY2t5IHx8IGZ1bGxTaXplKSA/IG5vcm1hbGl6ZWRJdGVtSGVpZ2h0IDogKG5vcm1hbGl6ZWRJdGVtSGVpZ2h0IC8gZGl2aWRlcykpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YTogc3RpY2t5ID09PSAxID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogKHN0aWNreSA9PT0gMiA/IChhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBkZWx0YU9mZmV0IC0gc2l6ZSkgOiAwKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZzogSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0OiBpID09PSBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3Q6IGkgPT09IGxpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldzogKGNhY2hlIGFzIENhY2hlKT8uW0lTX05FV10gPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiBpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiAhaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwOiBzdGlja3lFbmFibGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtczogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4OiBpIC0gbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdHViOiAoaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIGlkID09PSBzdGlja3lJdGVtPy5pZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogWl9JTkRFWF8wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbmFwcGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuekluZGV4ID0gWl9JTkRFWF8yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGNvbGxlY3Rpb25JdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBwcmV2aW91c2VEYXRhOiBpID4gMCA/IGl0ZW1zW2kgLSAxXSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RGF0YTogaSA8IHRvdGFsTGVuZ3RoID8gaXRlbXNbaSArIDFdIDogbnVsbCwgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRTdGlja3kgJiYgc3RpY2t5SXRlbUluZGV4IDwgaSAmJiBzdGlja3kgPT09IDEgJiYgKHBvcyA8PSBzY3JvbGxTaXplICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgKyBzaXplICsgc3RpY2t5SXRlbVNpemUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnggPSBpc1ZlcnRpY2FsID8gMCA6IHNuYXBwZWQgPyBhY3R1YWxTbmlwcGVkUG9zaXRpb24gOiBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnkgPSBpc1ZlcnRpY2FsID8gc25hcHBlZCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IHBvcyA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHN0U3RpY2t5SXRlbUluZGV4ID0gZGlzcGxheUl0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBzbmFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gaXRlbS5tZWFzdXJlcy55IDogaXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy56SW5kZXggPSBaX0lOREVYXzM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0RW5kU3RpY2t5ICYmIGVuZFN0aWNreUl0ZW1JbmRleCA+IGkgJiYgc3RpY2t5ID09PSAyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9zID49IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIHNpemUgLSBlbmRTdGlja3lJdGVtU2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueCA9IGlzVmVydGljYWwgPyAwIDogc25hcHBlZCA/IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIHNpemUgOiBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnkgPSBpc1ZlcnRpY2FsID8gc25hcHBlZCA/IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIHNpemUgOiBwb3MgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5LmNvbmZpZy56SW5kZXggPSBaX0lOREVYXzM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gc25hcHBlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSAoaXNWZXJ0aWNhbCA/IGl0ZW0ubWVhc3VyZXMueSA6IGl0ZW0ubWVhc3VyZXMueCkgLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMtLTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaWkgJSBkaXZpZGVzID09PSAwIHx8IHJlbmRlckl0ZW1zIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3MgKz0gcm93LnNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSBpc1ZlcnRpY2FsID8gWV9QUk9QX05BTUUgOiBYX1BST1BfTkFNRSwgdHJhbnNmb3JtZWRBeGlzID0gaXNWZXJ0aWNhbCA/IFRSQU5TRk9STUVEX1lfUFJPUF9OQU1FIDogVFJBTlNGT1JNRURfWF9QUk9QX05BTUU7XHJcblxyXG4gICAgICAgICAgICBpZiAoISFuZXh0U3RpY2t5ICYmICEhc3RpY2t5SXRlbSAmJiBuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdIDw9IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiArIHN0aWNreUl0ZW0ubWVhc3VyZXNbc2l6ZVByb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gPiBhY3R1YWxTbmlwcGVkUG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gc3RpY2t5SXRlbS5tZWFzdXJlc1t0cmFuc2Zvcm1lZEF4aXNdID0gbmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSAtIHN0aWNreUl0ZW0ubWVhc3VyZXNbc2l6ZVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkID0gbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnN0aWNreSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gc3RpY2t5SXRlbS5tZWFzdXJlcy55IDogc3RpY2t5SXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSAoaXNWZXJ0aWNhbCA/IG5leHRTdGlja3kubWVhc3VyZXMueSA6IG5leHRTdGlja3kubWVhc3VyZXMueCkgLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPSBzdGlja3lJdGVtLm1lYXN1cmVzW3RyYW5zZm9ybWVkQXhpc10gPSBuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdIC0gc3RpY2t5SXRlbS5tZWFzdXJlc1tzaXplUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0ubWVhc3VyZXMuZGVsdGEgPSAoaXNWZXJ0aWNhbCA/IHN0aWNreUl0ZW0ubWVhc3VyZXMueSA6IHN0aWNreUl0ZW0ubWVhc3VyZXMueCkgLSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RTdGlja3lJdGVtID0gZGlzcGxheUl0ZW1zPy5bbmV4c3RTdGlja3lJdGVtSW5kZXggKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFN0aWNreUl0ZW0/LmNvbmZpZz8uc3RpY2t5ID09PSAxICYmIGRpc3BsYXlJdGVtcz8uW25leHN0U3RpY2t5SXRlbUluZGV4ICsgMl0/LmNvbmZpZz8uc3RpY2t5ICE9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkT3V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPD0gYWN0dWFsU25pcHBlZFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3RpY2t5SXRlbS5jb25maWcuc25hcHBlZCA9IGxhc3RTdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkT3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gbGFzdFN0aWNreUl0ZW0ubWVhc3VyZXNbdHJhbnNmb3JtZWRBeGlzXSA9IGxhc3RTdGlja3lJdGVtLm1lYXN1cmVzLnBvc2l0aW9uID0gYWN0dWFsU25pcHBlZFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN0aWNreUl0ZW0ubWVhc3VyZXMuZGVsdGEgPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdFN0aWNreUl0ZW0/LmNvbmZpZz8uc3RpY2t5ICE9PSAxICYmIGRpc3BsYXlJdGVtcz8uW25leHN0U3RpY2t5SXRlbUluZGV4ICsgMl0/LmNvbmZpZz8uc3RpY2t5ICE9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdIDw9IGFjdHVhbFNuaXBwZWRQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSA9IG5leHRTdGlja3kubWVhc3VyZXNbdHJhbnNmb3JtZWRBeGlzXSA9IG5leHRTdGlja3kubWVhc3VyZXMucG9zaXRpb24gPSBhY3R1YWxTbmlwcGVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gbmV4dFN0aWNreS5jb25maWcuc25hcHBlZE91dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEhbmV4dEVuZFN0aWNreSAmJiAhIWVuZFN0aWNreUl0ZW0gJiZcclxuICAgICAgICAgICAgICAgIChuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW2F4aXNdID49IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGVuZFN0aWNreUl0ZW1TaXplIC0gbmV4dEVuZFN0aWNreS5tZWFzdXJlc1tzaXplUHJvcGVydHldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPCBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gZW5kU3RpY2t5SXRlbS5tZWFzdXJlc1t0cmFuc2Zvcm1lZEF4aXNdID0gbmV4dEVuZFN0aWNreS5tZWFzdXJlc1theGlzXSArIG5leHRFbmRTdGlja3kubWVhc3VyZXNbc2l6ZVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkID0gbmV4dEVuZFN0aWNreS5jb25maWcuc25hcHBlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0uY29uZmlnLnN0aWNreSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy55IDogZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3RyYW5zZm9ybWVkQXhpc10gPSBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gbmV4dEVuZFN0aWNreS5tZWFzdXJlcy55IDogbmV4dEVuZFN0aWNreS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA9IGVuZFN0aWNreUl0ZW0ubWVhc3VyZXNbdHJhbnNmb3JtZWRBeGlzXSA9IG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gKyBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy55IDogZW5kU3RpY2t5SXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtVHJhbnNmb3JtICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRpc3BsYXlJdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZGlzcGxheUl0ZW1zW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIWl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtYXRpb24gPSBpdGVtVHJhbnNmb3JtKGl0ZW0uaW5kZXgsIG9iamVjdEFzUmVhZG9ubHkoaXRlbS5tZWFzdXJlcyksIG9iamVjdEFzUmVhZG9ubHkoaXRlbS5jb25maWcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy50cmFuc2Zvcm1lZFggPSB0cmFuc2Zvcm1hdGlvbi54O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnRyYW5zZm9ybWVkWSA9IHRyYW5zZm9ybWF0aW9uLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueiA9IHRyYW5zZm9ybWF0aW9uLno7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMucm90YXRpb25YID0gdHJhbnNmb3JtYXRpb24ucm90YXRpb25YO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnJvdGF0aW9uWSA9IHRyYW5zZm9ybWF0aW9uLnJvdGF0aW9uWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy5yb3RhdGlvblogPSB0cmFuc2Zvcm1hdGlvbi5yb3RhdGlvblo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMuc2NhbGVYID0gdHJhbnNmb3JtYXRpb24uc2NhbGVYO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnNjYWxlWSA9IHRyYW5zZm9ybWF0aW9uLnNjYWxlWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy5zY2FsZVogPSB0cmFuc2Zvcm1hdGlvbi5zY2FsZVo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29uZmlnLm9wYWNpdHkgPSB0cmFuc2Zvcm1hdGlvbi5vcGFjaXR5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5maWx0ZXIgPSB0cmFuc2Zvcm1hdGlvbi5maWx0ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29uZmlnLmJsZW5kQ29sb3IgPSB0cmFuc2Zvcm1hdGlvbi5ibGVuZENvbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy56SW5kZXggPSBTdHJpbmcodHJhbnNmb3JtYXRpb24uekluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICByZXNldFBvc2l0aW9ucygpIHtcclxuICAgICAgICB0aGlzLl90cmFja2VyLmNsZWFyVHJhY2tNYXAoKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdHJhY2tpbmcgYnkgcHJvcE5hbWVcclxuICAgICAqL1xyXG4gICAgdHJhY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pdGVtcyB8fCAhdGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci50cmFjayh0aGlzLl9pdGVtcywgdGhpcy5fZGlzcGxheUNvbXBvbmVudHMsIHRoaXMuX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50cywgdGhpcy5fc2Nyb2xsRGlyZWN0aW9uLCB0aGlzLl90cmFja0J5KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHY6IHsgW2lkOiBudW1iZXJdOiBudW1iZXIgfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIuZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgdW50cmFja0NvbXBvbmVudEJ5SWRQcm9wZXJ0eShjb21wb25lbnQ/OiBDIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci51bnRyYWNrQ29tcG9uZW50QnlJZFByb3BlcnR5KGNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGlkKSA/PyBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21wb25lbnRCb3VuZHNCeUludGVyc2VjdGlvblBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIsIG1heFBvc2l0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbCk6IChJUmVjdCAmIHsgaWQ6IElkIHwgbnVsbDsgaXNGaXJzdDogYm9vbGVhbjsgaXNMYXN0OiBib29sZWFuOyB9KSB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cztcclxuICAgICAgICBsZXQgZmlyc3Q6IChJUmVjdCAmIHsgaWQ6IElkIHwgbnVsbDsgaXNGaXJzdDogYm9vbGVhbjsgaXNMYXN0OiBib29sZWFuOyB9KSB8IG51bGwgPSBudWxsLFxyXG4gICAgICAgICAgICBsYXN0OiAoSVJlY3QgJiB7IGlkOiBJZCB8IG51bGw7IGlzRmlyc3Q6IGJvb2xlYW47IGlzTGFzdDogYm9vbGVhbjsgfSkgfCBudWxsID0gbnVsbDtcclxuICAgICAgICBpZiAoISFjb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcCBvZiBjb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGNvbXAuaW5zdGFuY2UuaXRlbUlkID8/IG51bGwsIGlzVmVydGljYWwgPSBjb21wLmluc3RhbmNlLml0ZW0/LmNvbmZpZz8uaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICB4ID0gY29tcC5pbnN0YW5jZS5pdGVtPy5tZWFzdXJlcz8ueCA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBjb21wLmluc3RhbmNlLml0ZW0/Lm1lYXN1cmVzPy55ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGaXJzdCA9IGNvbXAuaW5zdGFuY2UuaXRlbT8uY29uZmlnPy5pc0ZpcnN0ID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTGFzdCA9IGNvbXAuaW5zdGFuY2UuaXRlbT8uY29uZmlnPy5pc0xhc3QgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSBjb21wLmluc3RhbmNlLmdldEJvdW5kcygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IHBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWwgJiYgKHBvcyA+PSB5ICYmIHBvcyA8IHkgKyBoZWlnaHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGlzRmlyc3QsIGlzTGFzdCB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNWZXJ0aWNhbCAmJiAocG9zID49IHggJiYgcG9zIDwgeCArIHdpZHRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpc0ZpcnN0LCBpc0xhc3QgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSB7IGlkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpc0ZpcnN0LCBpc0xhc3QgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHsgaWQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGlzRmlyc3QsIGlzTGFzdCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4UG9zaXRpb24gIT09IG51bGwgJiYgcG9zaXRpb24gPiBtYXhQb3NpdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gbGFzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9kZWJvdW5jZWRJc1Njcm9sbFN0YXJ0T2ZmID0gZGVib3VuY2UoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHByb3RlY3RlZCBjYWNoZUVsZW1lbnRzKGlzVmVydGljYWw6IGJvb2xlYW4sIGl0ZW1TaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzW2ldLCBpdGVtSWQgPSBjb21wb25lbnQuaW5zdGFuY2UuaXRlbUlkO1xyXG4gICAgICAgICAgICBpZiAoaXRlbUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGNvbXBvbmVudC5pbnN0YW5jZS5nZXRCb3VuZHMoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXQoaXRlbUlkLCB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldChpdGVtSWQpLCAuLi5ib3VuZHMsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogYm91bmRzLndpZHRoIHx8IChpc1ZlcnRpY2FsID8gMCA6IGl0ZW1TaXplKSxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogYm91bmRzLmhlaWdodCB8fCAoaXNWZXJ0aWNhbCA/IGl0ZW1TaXplIDogMCksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNMYXp5ICYmICh0aGlzLl9pc1Njcm9sbFN0YXJ0KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkSXNTY3JvbGxTdGFydE9mZi5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLl9wcmVyZW5kZXJlZENhY2hlO1xyXG4gICAgICAgIGlmICghIWNhY2hlKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gY2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlSXRlbSA9IGNhY2hlW2lkXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0KGlkLCB7IC4uLih0aGlzLmdldChpZCkgfHwge30pLCAuLi5jYWNoZUl0ZW0gfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcHJlcmVuZGVyZWRDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0Q2FjaGVDaHVua0luZm8oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbmV3SXRlbXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjYWNoZUNsZWFuKCkge1xyXG4gICAgICAgIHRoaXMuX21hcC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuX3NuYXBzaG90LmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcnJpZGUgZGlzcG9zZSgpIHtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCk7XHJcblxyXG4gICAgICAgIGlmICghIXRoaXMuX2RlYm91bmNlZElzU2Nyb2xsU3RhcnRPZmYpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkSXNTY3JvbGxTdGFydE9mZi5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISF0aGlzLl90cmFja2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyYWNrZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
1388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2stYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29yZS90cmFjay1ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFDSCxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUM1SyxXQUFXLEVBQUUsV0FBVyxHQUMzQixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSXBFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsaUNBQWlDLEVBQUUsa0NBQWtDLEVBQUUsaUNBQWlDLEVBQUUsd0JBQXdCLEVBQ2xJLE1BQU0sRUFBRSwwQkFBMEIsR0FDckMsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUt2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXRDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFFBQ1Qs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RSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNyQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVRLE9BQU87UUFDWixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgfSBmcm9tIFwiLi4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfSBmcm9tIFwiLi4vbW9kZWxzL3JlbmRlci1pdGVtLm1vZGVsXCI7XHJcbmltcG9ydCB7IElkIH0gZnJvbSBcIi4uL3R5cGVzL2lkXCI7XHJcbmltcG9ydCB7IENBQ0hFX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgQ2FjaGVNYXAgfSBmcm9tIFwiLi9jYWNoZS1tYXBcIjtcclxuaW1wb3J0IHsgVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuaW1wb3J0IHsgSVJlY3QsIElTaXplIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcclxuaW1wb3J0IHtcclxuICAgIERFRkFVTFRfRElWSURFUywgSEVJR0hUX1BST1BfTkFNRSwgU0VSVklDRV9QUk9QX0RVTU1ZLCBTRVJWSUNFX1BST1BfRFVNTVlfRU5BQkxFRCwgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSwgVFJBTlNGT1JNRURfWF9QUk9QX05BTUUsIFRSQU5TRk9STUVEX1lfUFJPUF9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbiAgICBYX1BST1BfTkFNRSwgWV9QUk9QX05BTUUsXHJcbn0gZnJvbSBcIi4uL2NvbnN0XCI7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1Db25maWcsIElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1NZWFzdXJlcywgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuaW1wb3J0IHsgQ01hcCB9IGZyb20gJy4uL3V0aWxzL2NtYXAnO1xyXG5pbXBvcnQgeyBidWZmZXJJbnRlcnBvbGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzL2J1ZmZlci1pbnRlcnBvbGF0aW9uXCI7XHJcbmltcG9ydCB7IEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vYmFzZVwiO1xyXG5pbXBvcnQgeyBQcmVyZW5kZXJDYWNoZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL25nLXByZXJlbmRlci1jb250YWluZXIvdHlwZXMvY2FjaGVcIjtcclxuaW1wb3J0IHsgU2Nyb2xsRGlyZWN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IG9iamVjdEFzUmVhZG9ubHkgfSBmcm9tIFwiLi4vdXRpbHMvb2JqZWN0XCI7XHJcbmltcG9ydCB7IGdldFNlcnZpY2VJZFByb3AgfSBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xELCBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RILCBERUZBVUxUX1JFU0VUX0JVRkZFUl9TSVpFX1RJTUVPVVQsIEVORF9DT0xMRUNUSU9OX1BSRUZJWF9JRCxcclxuICAgIElTX05FVywgU1RBUlRfQ09MTEVDVElPTl9QUkVGSVhfSUQsXHJcbn0gZnJvbSBcIi4vY29uc3RcIjtcclxuaW1wb3J0IHsgWl9JTkRFWF8wLCBaX0lOREVYXzEsIFpfSU5ERVhfMiwgWl9JTkRFWF8zLCB9IGZyb20gJy4uL2NvbnN0JztcclxuaW1wb3J0IHtcclxuICAgIElHZXRJdGVtUG9zaXRpb25PcHRpb25zLCBJR2V0TWV0cmljc1JldHVybnMsIElJdGVtLCBJTWV0cmljcywgSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucyxcclxuICAgIElVcGRhdGVDb2xsZWN0aW9uUmV0dXJucyxcclxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IFRyYWNrQm94RXZlbnRzIH0gZnJvbSBcIi4vZXZlbnRzXCI7XHJcbmltcG9ydCB7IENhY2hlLCBDYWNoZU1hcEV2ZW50cywgQ2FjaGVNYXBMaXN0ZW5lcnMgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBJdGVtRGlzcGxheU1ldGhvZHMgfSBmcm9tIFwiLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBbGlnbm1lbnRzIH0gZnJvbSBcIi4uL2VudW1zXCI7XHJcblxyXG4vKipcclxuICogQW4gb2JqZWN0IHRoYXQgcGVyZm9ybXMgdHJhY2tpbmcsIGNhbGN1bGF0aW9ucyBhbmQgY2FjaGluZy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb3JlL3RyYWNrLWJveC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFja0JveDxDIGV4dGVuZHMgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCA9IGFueT5cclxuICAgIGV4dGVuZHMgQ2FjaGVNYXA8SWQsIENhY2hlLCBDYWNoZU1hcEV2ZW50cywgQ2FjaGVNYXBMaXN0ZW5lcnM+IHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX3RyYWNrZXIhOiBUcmFja2VyPEM+O1xyXG5cclxuICAgIHByb3RlY3RlZCBfaXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHNldCBpdGVtcyh2OiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pdGVtcyA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pdGVtcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IGRpc3BsYXlDb21wb25lbnRzKHY6IEFycmF5PENvbXBvbmVudFJlZjxDPj4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3NuYXBwZWREaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPEM+PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgc2V0IHNuYXBwZWREaXNwbGF5Q29tcG9uZW50cyh2OiBBcnJheTxDb21wb25lbnRSZWY8Qz4+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zbmFwcGVkRGlzcGxheUNvbXBvbmVudHMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Njcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uID0gMDtcclxuICAgIHNldCBzY3JvbGxEaXJlY3Rpb24odjogU2Nyb2xsRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbERpcmVjdGlvbiA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zY3JvbGxEaXJlY3Rpb24gPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjcm9sbERpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX3Njcm9sbERpcmVjdGlvbjsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tCeTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuICAgIHNldCB0cmFja0J5KHY6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLl90cmFja0J5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNrQnkgPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHRyYWNrQnkoKSB7IHJldHVybiB0aGlzLl90cmFja0J5OyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXZpZGVzOiBudW1iZXIgPSBERUZBVUxUX0RJVklERVM7XHJcblxyXG4gICAgc2V0IGRpdmlkZXModjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RpdmlkZXMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGl2aWRlcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0luZmluaXR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzSW5maW5pdHkodjogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5ID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2lzSW5maW5pdHkgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNMYXp5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzTGF6eSh2OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzTGF6eSA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc0xhenkgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB0cmFja0J5IHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIHNldCB0cmFja2luZ1Byb3BlcnR5TmFtZSh2OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSA9IHRoaXMuX3RyYWNrZXIudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdHJhY2tpbmdQcm9wZXJ0eU5hbWU6IHN0cmluZyA9IFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc1Njcm9sbFN0YXJ0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU2Nyb2xsU3RhcnQodjogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSB2O1xyXG4gICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzU2Nyb2xsU25hcFRvU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzU2Nyb2xsRW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgc2V0IGlzU2Nyb2xsRW5kKHY6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9pc1Njcm9sbEVuZCA9IHY7XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNTY3JvbGxTbmFwVG9FbmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzU2Nyb2xsU25hcFRvU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgaXNTbmFwcGVkVG9TdGFydCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNTY3JvbGxTdGFydCB8fCB0aGlzLl9pc1Njcm9sbFNuYXBUb1N0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaXNTY3JvbGxTbmFwVG9FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgaXNTbmFwcGVkVG9FbmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2Nyb2xsRW5kIHx8IHRoaXMuX2lzU2Nyb2xsU25hcFRvRW5kO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2Nyb2xsU3RhcnRPZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICBzZXQgc2Nyb2xsU3RhcnRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgPSB2O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjcm9sbFN0YXJ0T2Zmc2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Njcm9sbEVuZE9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIHNldCBzY3JvbGxFbmRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0ID0gdjtcclxuICAgIH1cclxuICAgIGdldCBzY3JvbGxFbmRPZmZzZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVuZE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlciA9IG5ldyBUcmFja2VyKHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBzZXQoaWQ6IElkLCBjYWNoZTogQ2FjaGUpOiBDTWFwPElkLCBJU2l6ZT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9tYXAuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICBjb25zdCBiID0gdGhpcy5fbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgIGlmIChiPy53aWR0aCA9PT0gY2FjaGUud2lkdGggJiYgYj8uaGVpZ2h0ID09PSBjYWNoZS5oZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLl9tYXAuc2V0KGlkLCBjYWNoZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzQ29sbGVjdGlvbjogQXJyYXk8SUl0ZW0+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2RlbGV0ZWRJdGVtc01hcDogeyBbaW5kZXg6IG51bWJlcl06IElTaXplIH0gPSB7fTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG4gICAgZ2V0IGNydWREZXRlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2NydWREZXRlY3RlZDsgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJlQ2hhbmdlSWZOZWVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXNEZXRlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl92ZXJzaW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGZpcmVUaWNrKCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2goVHJhY2tCb3hFdmVudHMuVElDSyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9wcmV2aW91c1RvdGFsU2l6ZSA9IDA7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWx0YU9mTmV3SXRlbXM6IG51bWJlciA9IDA7XHJcbiAgICBnZXQgZGVsdGFPZk5ld0l0ZW1zKCkgeyByZXR1cm4gdGhpcy5fZGVsdGFPZk5ld0l0ZW1zOyB9XHJcblxyXG4gICAgaXNBZGFwdGl2ZUJ1ZmZlciA9IHRydWU7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkID0gREVGQVVMVF9CVUZGRVJfRVhUUkVNVU1fVEhSRVNIT0xEO1xyXG5cclxuICAgIHByb3RlY3RlZCBfbWF4QnVmZmVyU2VxdWVuY2VMZW5ndGggPSBERUZBVUxUX01BWF9CVUZGRVJfU0VRVUVOQ0VfTEVOR1RIO1xyXG5cclxuICAgIHByb3RlY3RlZCBfYnVmZmVyU2l6ZVNlcXVlbmNlOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIF9idWZmZXJTaXplOiBudW1iZXIgPSAwO1xyXG4gICAgZ2V0IGJ1ZmZlclNpemUoKSB7IHJldHVybiB0aGlzLl9idWZmZXJTaXplOyB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0QnVmZmVyU2l6ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX21heEJ1ZmZlclNpemU6IG51bWJlciA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZW91dDogbnVtYmVyID0gREVGQVVMVF9SRVNFVF9CVUZGRVJfU0laRV9USU1FT1VUO1xyXG5cclxuICAgIHByb3RlY3RlZCBfcmVzZXRCdWZmZXJTaXplVGltZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzUmVzZXRlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJlcmVuZGVyZWRDYWNoZTogUHJlcmVuZGVyQ2FjaGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBwcml2YXRlIF9uZXdJdGVtczogQXJyYXk8SWQ+ID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGxpZmVDaXJjbGUoKSB7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlSWZOZWVkKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlyZVRpY2soKTtcclxuXHJcbiAgICAgICAgdGhpcy5saWZlQ2lyY2xlRG8oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYW5zIHRoZSBjb2xsZWN0aW9uIGZvciBkZWxldGVkIGl0ZW1zIGFuZCBmbHVzaGVzIHRoZSBkZWxldGVkIGl0ZW0gY2FjaGUuXHJcbiAgICAgKi9cclxuICAgIHJlc2V0Q29sbGVjdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oY3VycmVudENvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGl0ZW1TaXplOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY3VycmVudENvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q29sbGVjdGlvbiAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBjdXJyZW50Q29sbGVjdGlvbiA9PT0gdGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQXR0ZW50aW9uISBUaGUgY29sbGVjdGlvbiBtdXN0IGJlIGltbXV0YWJsZS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRlZCA9ICgoIXRoaXMuX3ByZXZpb3VzQ29sbGVjdGlvbiB8fCB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSAmJlxyXG4gICAgICAgICAgICAoISFjdXJyZW50Q29sbGVjdGlvbiAmJiBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGggPiAwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lzUmVzZXRlZCA9IHJlc2V0ZWQ7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUodGhpcy5fcHJldmlvdXNDb2xsZWN0aW9uLCBjdXJyZW50Q29sbGVjdGlvbiwgaXRlbVNpemUpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcmV2aW91c0NvbGxlY3Rpb24gPSBbLi4uKGN1cnJlbnRDb2xsZWN0aW9uIHx8IFtdKV07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIGNhY2hlIG9mIGl0ZW1zIGZyb20gdGhlIGxpc3RcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUNhY2hlPEkgZXh0ZW5kcyBJSXRlbSwgQyBleHRlbmRzIEFycmF5PEk+PihwcmV2aW91c0NvbGxlY3Rpb246IEMgfCBudWxsIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGN1cnJlbnRDb2xsZWN0aW9uOiBDIHwgbnVsbCB8IHVuZGVmaW5lZCxcclxuICAgICAgICBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lO1xyXG4gICAgICAgIGxldCBjcnVkRGV0ZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9uZXdJdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIWN1cnJlbnRDb2xsZWN0aW9uIHx8IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHByZXZpb3VzQ29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIWl0ZW0gJiYgdGhpcy5fbWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2aW91c0NvbGxlY3Rpb24gfHwgcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIGFkZGVkXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGN1cnJlbnRDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHsgd2lkdGg6IGl0ZW1TaXplLCBoZWlnaHQ6IGl0ZW1TaXplLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5DUkVBVEUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbkRpY3Q6IElJdGVtPEk+ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldO1xyXG4gICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRGljdFtpdGVtW3RyYWNrQnldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgbm90Q2hhbmdlZE1hcDogSUl0ZW08ST4gPSB7fSwgZGVsZXRlZE1hcDogSUl0ZW08ST4gPSB7fSwgZGVsZXRlZEl0ZW1zTWFwOiB7IFtpbmRleDogbnVtYmVyXTogSVNpemUgfSA9IHt9LFxyXG4gICAgICAgICAgICB1cGRhdGVkTWFwOiBJSXRlbTxJPiA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gcHJldmlvdXNDb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcHJldmlvdXNDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25EaWN0Lmhhc093blByb3BlcnR5KGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBjb2xsZWN0aW9uRGljdFtpZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90Q2hhbmdlZE1hcFtpdGVtW3RyYWNrQnldXSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoaWQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0aGlzLl9tYXAuZ2V0KGlkKSB8fCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRNYXBbaXRlbVt0cmFja0J5XV0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odGhpcy5fbWFwLmdldChpZCkgfHwgeyB3aWR0aDogaXRlbVNpemUsIGhlaWdodDogaXRlbVNpemUgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICBjcnVkRGV0ZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZE1hcFtpZF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwW2ldID0gdGhpcy5fbWFwLmdldChpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZGVsZXRlKGlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjdXJyZW50Q29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN1cnJlbnRDb2xsZWN0aW9uW2ldLCBpZCA9IGl0ZW0/Llt0cmFja0J5XTtcclxuICAgICAgICAgICAgaWYgKCEhaXRlbSAmJiAhZGVsZXRlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgIXVwZGF0ZWRNYXAuaGFzT3duUHJvcGVydHkoaWQpICYmXHJcbiAgICAgICAgICAgICAgICAhbm90Q2hhbmdlZE1hcC5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25ld0l0ZW1zLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkZWRcclxuICAgICAgICAgICAgICAgIGNydWREZXRlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KGlkLCB7IHdpZHRoOiBpdGVtU2l6ZSwgaGVpZ2h0OiBpdGVtU2l6ZSwgbWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGNydWREZXRlY3RlZDtcclxuICAgICAgICB0aGlzLl9kZWxldGVkSXRlbXNNYXAgPSBkZWxldGVkSXRlbXNNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyB0aGUgcG9zaXRpb24gb2YgYSBjb2xsZWN0aW9uIGVsZW1lbnQgYnkgdGhlIGdpdmVuIElkXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW1Qb3NpdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaWQ6IElkLCBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwLFxyXG4gICAgICAgIG9wdGlvbnM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPEksIEM+KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGZyb21JdGVtSWQ6IGlkID8/IG9wdGlvbnMuZnJvbUl0ZW1JZCwgaXRlbUNvbmZpZ01hcCwgLi4ub3B0aW9ucyB9O1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCB7IHNjcm9sbFNpemUsIGlzRnJvbUl0ZW1JZEZvdW5kIH0gPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemU6IHRoaXMuX2NydWREZXRlY3RlZCB8fCBvcHQuZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcDogdGhpcy5fZGVsZXRlZEl0ZW1zTWFwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpc0Zyb21JdGVtSWRGb3VuZCA/IHNjcm9sbFNpemUgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2ZW50U2Nyb2xsU25hcHBpbmcoY2xlYXJCdWZmZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsU3RhcnQgPSB0aGlzLl9pc1Njcm9sbEVuZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoY2xlYXJCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNTY3JvbGxTbmFwVG9TdGFydCA9IHRoaXMuX2lzU2Nyb2xsU25hcFRvRW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHNcclxuICAgICAqL1xyXG4gICAgZ2V0TWV0cmljczxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEksIEM+KTogSUdldE1ldHJpY3NSZXR1cm5zIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfSwgY3J1ZERldGVjdGVkID0gdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAgPSB0aGlzLl9kZWxldGVkSXRlbXNNYXA7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdEJ1ZmZlclNpemUgPSBvcHQuYnVmZmVyU2l6ZTtcclxuICAgICAgICB0aGlzLl9tYXhCdWZmZXJTaXplID0gb3B0Lm1heEJ1ZmZlclNpemU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLnJlY2FsY3VsYXRlTWV0cmljcyh7XHJcbiAgICAgICAgICAgIC4uLm9wdCxcclxuICAgICAgICAgICAgY29sbGVjdGlvbjogaXRlbXMsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVG90YWxTaXplOiB0aGlzLl9wcmV2aW91c1RvdGFsU2l6ZSxcclxuICAgICAgICAgICAgY3J1ZERldGVjdGVkOiB0aGlzLl9jcnVkRGV0ZWN0ZWQsXHJcbiAgICAgICAgICAgIGRlbGV0ZWRJdGVtc01hcCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgdG90YWxTaXplOiBtZXRyaWNzLnRvdGFsU2l6ZSwgZGVsdGE6IG1ldHJpY3MuZGVsdGEsIGNydWREZXRlY3RlZCB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY29sbGVjdGlvbiBvZiBkaXNwbGF5IG9iamVjdHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQ29sbGVjdGlvbjxJIGV4dGVuZHMgSUl0ZW0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgb3B0aW9uczogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPEksIEM+KTogSVVwZGF0ZUNvbGxlY3Rpb25SZXR1cm5zIHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IGl0ZW1Db25maWdNYXAsIC4uLm9wdGlvbnMgfSwgZHluYW1pY1NpemUgPSBvcHQuZHluYW1pY1NpemUsIGNydWREZXRlY3RlZCA9IHRoaXMuX2NydWREZXRlY3RlZCxcclxuICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwID0gdGhpcy5fZGVsZXRlZEl0ZW1zTWFwO1xyXG4gICAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMob3B0LmlzVmVydGljYWwsIG9wdC5pdGVtU2l6ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplID0gb3B0LmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5fbWF4QnVmZmVyU2l6ZSA9IG9wdC5tYXhCdWZmZXJTaXplO1xyXG5cclxuICAgICAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Moe1xyXG4gICAgICAgICAgICAuLi5vcHQsXHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGl0ZW1zLFxyXG4gICAgICAgICAgICBwcmV2aW91c1RvdGFsU2l6ZTogdGhpcy5fcHJldmlvdXNUb3RhbFNpemUsXHJcbiAgICAgICAgICAgIGNydWREZXRlY3RlZDogdGhpcy5fY3J1ZERldGVjdGVkLFxyXG4gICAgICAgICAgICBkZWxldGVkSXRlbXNNYXAsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlbHRhICs9IG1ldHJpY3MuZGVsdGE7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXMobWV0cmljcywgaXRlbXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNUb3RhbFNpemUgPSBtZXRyaWNzLnRvdGFsU2l6ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVsZXRlZEl0ZW1zTWFwID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2NydWREZXRlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAob3B0LmR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlJdGVtcyA9IHRoaXMuZ2VuZXJhdGVEaXNwbGF5Q29sbGVjdGlvbihtZXRyaWNzLml0ZW1zLCBpdGVtcywgaXRlbUNvbmZpZ01hcCwgeyAuLi5tZXRyaWNzLCB9KTtcclxuICAgICAgICByZXR1cm4geyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZTogbWV0cmljcy50b3RhbFNpemUsIGRlbHRhOiBtZXRyaWNzLmRlbHRhLCBjcnVkRGV0ZWN0ZWQsIGxlZnRMYXlvdXRPZmZzZXQ6IG1ldHJpY3MubGVmdExheW91dE9mZnNldCB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcHJldmlvdXNTY3JvbGxTaXplID0gMDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlQWRhcHRpdmVCdWZmZXJQYXJhbXM8SSBleHRlbmRzIElJdGVtPihtZXRyaWNzOiBJTWV0cmljczxJPiwgdG90YWxJdGVtc0xlbmd0aDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ2xlYXJCdWZmZXJTaXplVGltZXIoKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IG1ldHJpY3Muc2Nyb2xsU2l6ZSArIHRoaXMuX2RlbHRhLCBkZWx0YSA9IE1hdGguYWJzKHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSAtIHNjcm9sbFNpemUpO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemU7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyUmF3U2l6ZSA9IE1hdGgubWluKE1hdGguZmxvb3IobWV0cmljcy50eXBpY2FsSXRlbVNpemUgIT09IDAgPyBkZWx0YSAvIG1ldHJpY3MudHlwaWNhbEl0ZW1TaXplIDogMCkgKiA1LCB0b3RhbEl0ZW1zTGVuZ3RoKSxcclxuICAgICAgICAgICAgbWluQnVmZmVyU2l6ZSA9IGJ1ZmZlclJhd1NpemUgPCB0aGlzLl9kZWZhdWx0QnVmZmVyU2l6ZSA/IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplIDogYnVmZmVyUmF3U2l6ZSxcclxuICAgICAgICAgICAgYnVmZmVyVmFsdWUgPSBtaW5CdWZmZXJTaXplID4gdGhpcy5fbWF4QnVmZmVyU2l6ZSA/IHRoaXMuX21heEJ1ZmZlclNpemUgOiBtaW5CdWZmZXJTaXplO1xyXG5cclxuICAgICAgICB0aGlzLl9idWZmZXJTaXplID0gYnVmZmVySW50ZXJwb2xhdGlvbih0aGlzLl9idWZmZXJTaXplLCB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UsIGJ1ZmZlclZhbHVlLCB7XHJcbiAgICAgICAgICAgIGV4dHJlbXVtVGhyZXNob2xkOiB0aGlzLl9idWZmZXJTZXF1ZW5jZUV4dHJhVGhyZXNob2xkLFxyXG4gICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLl9tYXhCdWZmZXJTZXF1ZW5jZUxlbmd0aCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFJlc2V0QnVmZmVyU2l6ZVRpbWVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHN0YXJ0UmVzZXRCdWZmZXJTaXplVGltZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRCdWZmZXJTaXplVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fYnVmZmVyU2l6ZSA9IHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplO1xyXG4gICAgICAgICAgICB0aGlzLl9idWZmZXJTaXplU2VxdWVuY2UgPSBbXTtcclxuICAgICAgICB9LCB0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lb3V0KSBhcyB1bmtub3duIGFzIG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZGlzcG9zZUNsZWFyQnVmZmVyU2l6ZVRpbWVyKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNldEJ1ZmZlclNpemVUaW1lcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBlbnRyeSBpbnRvIHRoZSBvdmVyc2Nyb2xsIGFyZWEgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBvdmVyc2Nyb2xsIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRFbGVtZW50TnVtVG9FbmQ8SSBleHRlbmRzIElJdGVtLCBDIGV4dGVuZHMgQXJyYXk8ST4+KGk6IG51bWJlciwgY29sbGVjdGlvbjogQywgbWFwOiBDTWFwPElkLCBJU2l6ZT4sIHR5cGljYWxJdGVtU2l6ZTogbnVtYmVyLFxyXG4gICAgICAgIHNpemU6IG51bWJlciwgaXNWZXJ0aWNhbDogYm9vbGVhbiwgaW5kZXhPZmZzZXQ6IG51bWJlciA9IDAsIHJldmVyc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHsgbnVtOiBudW1iZXIsIG9mZnNldDogbnVtYmVyIH0ge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSwgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDAsIG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbGxlY3Rpb24ubGVuZ3RoIC0gaW5kZXhPZmZzZXQgLSAxOyByZXZlcnNlID8gaiA+PSAwIDogaiA+PSBpOyBqLS0pIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNvbGxlY3Rpb25bal0sIGlkID0gaXRlbVt0cmFja0J5XTtcclxuICAgICAgICAgICAgbGV0IGl0ZW1TaXplID0gMDtcclxuICAgICAgICAgICAgaWYgKG1hcC5oYXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9IG1hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSBjYWNoZSAmJiBjYWNoZVtzaXplUHJvcGVydHldID4gMCA/IGNhY2hlW3NpemVQcm9wZXJ0eV0gOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob2Zmc2V0ICsgaXRlbVNpemUgPiBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBudW0sIG9mZnNldCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICAgICAgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG51bSwgb2Zmc2V0IH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGxpc3QgbWV0cmljc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVjYWxjdWxhdGVNZXRyaWNzPEkgZXh0ZW5kcyBJSXRlbSwgQyBleHRlbmRzIEFycmF5PEk+PihvcHRpb25zOiBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPik6IElNZXRyaWNzPEk+IHtcclxuICAgICAgICBjb25zdCB7IGFsaWdubWVudCwgZnJvbUl0ZW1JZCwgYm91bmRzLCBjb2xsZWN0aW9uLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsIG1pbkl0ZW1TaXplLCBtYXhJdGVtU2l6ZSwgYnVmZmVyU2l6ZTogbWluQnVmZmVyU2l6ZSxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZSwgc3RpY2t5RW5hYmxlZCwgaXRlbUNvbmZpZ01hcCwgZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgcHJldmlvdXNUb3RhbFNpemUsIHNuYXBUb0l0ZW0sIHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgZGVsZXRlZEl0ZW1zTWFwLCBpbnZlcnRlZCwgaXRlbVRyYW5zZm9ybSB9ID0gb3B0aW9ucyBhcyBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPiAmIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgICAgIH0sIHJvdW5kZWRTY3JvbGxTaXplID0gTWF0aC5yb3VuZChzY3JvbGxTaXplKTtcclxuXHJcbiAgICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lLCBidWZmZXJTaXplID0gTWF0aC5tYXgobWluQnVmZmVyU2l6ZSwgdGhpcy5fYnVmZmVyU2l6ZSksXHJcbiAgICAgICAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gYm91bmRzLCBzaXplUHJvcGVydHkgPSBpc1ZlcnRpY2FsID8gSEVJR0hUX1BST1BfTkFNRSA6IFdJRFRIX1BST1BfTkFNRSxcclxuICAgICAgICAgICAgc2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCwgdG90YWxMZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCwgdHlwaWNhbEl0ZW1TaXplID0gaXRlbVNpemUsXHJcbiAgICAgICAgICAgIHcgPSBpc1ZlcnRpY2FsID8gd2lkdGggOiB0eXBpY2FsSXRlbVNpemUsIGggPSBpc1ZlcnRpY2FsID8gdHlwaWNhbEl0ZW1TaXplIDogaGVpZ2h0LFxyXG4gICAgICAgICAgICBtYXAgPSB0aGlzLl9tYXAsIHNuYXBzaG90ID0gdGhpcy5fc25hcHNob3QsIGRpdmlkZXMgPSB0aGlzLl9kaXZpZGVzLFxyXG4gICAgICAgICAgICBzdGlja3lQb3MgPSBNYXRoLmZsb29yKHNjcm9sbFNpemUpICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQsIGxlZnRJdGVtc09yUm93c1dlaWdodHM6IEFycmF5PG51bWJlcj4gPSBbXSxcclxuICAgICAgICAgICAgaXNGcm9tSWQgPSBmcm9tSXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBmcm9tSXRlbUlkID09PSAnbnVtYmVyJyAmJiBmcm9tSXRlbUlkID4gLTEpXHJcbiAgICAgICAgICAgICAgICB8fCAodHlwZW9mIGZyb21JdGVtSWQgPT09ICdzdHJpbmcnICYmIGZyb21JdGVtSWQgPiAnLTEnKTtcclxuXHJcbiAgICAgICAgbGV0IGxlZnRJdGVtc09mZnNldCA9IDAsIHJpZ2h0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgIGlmIChlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2Nyb2xsRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgLTE6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSBidWZmZXJTaXplICogZGl2aWRlcztcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSByaWdodEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZSAqIGRpdmlkZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNPZmZzZXQgPSByaWdodEl0ZW1zT2Zmc2V0ID0gYnVmZmVyU2l6ZSAqIGRpdmlkZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZDogbnVtYmVyID0gLTEsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCA9IDAsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gLTEsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gMCwgcmlnaHRJdGVtTGVuZ3RoID0gMCxcclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0ID0gMCwgcmlnaHRJdGVtc1dlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICBkZWx0YU9mTmV3SXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgPSAwLFxyXG4gICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zID0gMCxcclxuICAgICAgICAgICAgaXRlbUJ5SWQ6IEkgfCBudWxsID0gbnVsbCxcclxuICAgICAgICAgICAgaXRlbUJ5SWRQb3M6IG51bWJlciA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0LFxyXG4gICAgICAgICAgICBpc1RhcmdldEluT3ZlcnNjcm9sbDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gaXRlbUJ5SWRQb3MsXHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0ICsgdGhpcy5fc2Nyb2xsRW5kT2Zmc2V0LFxyXG4gICAgICAgICAgICBzdGFydEluZGV4OiBudW1iZXIsXHJcbiAgICAgICAgICAgIGlzRnJvbUl0ZW1JZEZvdW5kID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gPSAwLFxyXG4gICAgICAgICAgICBpc1VwZGF0aW5nID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGxlZnRZT2Zmc2V0ID0gMCxcclxuICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCA9IDAsXHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRJbmRleE9mZnNldCA9IDAsXHJcbiAgICAgICAgICAgIHJpZ2h0TGF5b3V0SW5kZXhPZmZzZXQgPSAwO1xyXG5cclxuICAgICAgICBjb25zdCBpc1N0YXJ0ID0gKChyb3VuZGVkU2Nyb2xsU2l6ZSA9PT0gMCkgfHwgdGhpcy5pc1NuYXBwZWRUb1N0YXJ0KTtcclxuICAgICAgICBsZXQgc3RpY2t5SXRlbUlkOiBJZCB8IHVuZGVmaW5lZCwgaXNOZXcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW1zOiBBcnJheTxJPjtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGxpc3QgaXMgZHluYW1pYyBvciB0aGVyZSBhcmUgbmV3IGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLCB0aGVuIGl0IHN3aXRjaGVzIHRvIHRoZSBsb25nIGFsZ29yaXRobS5cclxuICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUlkUHJvcCA9IGdldFNlcnZpY2VJZFByb3AodHJhY2tCeSk7XHJcbiAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgc3RpY2t5SWQ6IElkIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNvbGxlY3Rpb25baV0sIGlkID0gaXRlbT8uW3RyYWNrQnldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUlkID0gaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtSWQgPSBzdGlja3lJZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkID09IGZyb21JdGVtSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgeSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgc3RpY2t5Q29tcG9uZW50U2l6ZSA9IDAsXHJcbiAgICAgICAgICAgICAgICByb3c6IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydEl0ZW1JbmRleDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZEl0ZW1JbmRleDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdFNpemU6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtczogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtczogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc09yUm93c1dlaWdodHM6IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIH0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJdGVtSW5kZXg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kSXRlbUluZGV4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc25hcHNob3RTaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb246IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZlVwZGF0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBjYWxjdWxhdGUgPSAoaTogbnVtYmVyLCBsOiBudW1iZXIsIGxpOiBudW1iZXIsIGlzUHJlY29sbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlLCBpZFByZWZpeDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlpID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWkgPiBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkl0ZW0gPSBjb2xsZWN0aW9uW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gY29sbGVjdGlvbkl0ZW1bdHJhY2tCeV0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcD8uW2lkXT8uc3RpY2t5ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNOZXdSb3cgPSBpICUgZGl2aWRlcyA9PT0gMCxcclxuICAgICAgICAgICAgICAgICAgICBpc0xhc3RJdGVtSW5Sb3cgPSBpaSAlIGRpdmlkZXMgPT09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNMYXN0SXRlbSA9IGkgPT09IGxpLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzUm93RW5kID0gKGlzTGFzdEl0ZW1JblJvdyB8fCAoIWlzTGFzdEl0ZW1JblJvdyAmJiBpc0xhc3RJdGVtKSk7XHJcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGlzUHJlY29sbGVjdGlvbiA/IHsgLi4uY29sbGVjdGlvbkl0ZW0sIFtzZXJ2aWNlSWRQcm9wXTogYF8ke2lkUHJlZml4fS0ke2lkfV9gIH0gOiBjb2xsZWN0aW9uSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOZXdSb3cgfHwgcm93ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydEl0ZW1JbmRleDogaSArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEl0ZW1JbmRleDogaSArIGRpdmlkZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90U2l6ZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZEZWxldGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhT2ZOZXdJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50U2l6ZSA9IDAsIHJvd1NpemVEZWx0YSA9IDAsIGl0ZW1EaXNwbGF5TWV0aG9kOiBJdGVtRGlzcGxheU1ldGhvZHMgPSBJdGVtRGlzcGxheU1ldGhvZHMuTk9UX0NIQU5HRUQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwLmhhcyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9IG1hcC5nZXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFNpemUgPSBjYWNoZVtzaXplUHJvcGVydHldID4gMCA/IGNhY2hlW3NpemVQcm9wZXJ0eV0gOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbURpc3BsYXlNZXRob2QgPSBjYWNoZT8ubWV0aG9kID8/IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJdGVtTmV3ID0gdGhpcy5fbmV3SXRlbXMuaW5kZXhPZihpZCkgPiAtMSB8fCAodGhpcy5faXNMYXp5ICYmIGlzU3RhcnQgJiYgIXRoaXMuX2lzUmVzZXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNOZXcgPSBpc0l0ZW1OZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzbmFwc2hvdEJvdW5kcyA9IHNuYXBzaG90LmdldChpZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90U2l6ZSA9IHNuYXBzaG90Qm91bmRzID8gc25hcHNob3RCb3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnNpemUgPSBNYXRoLm1heChyb3cuc2l6ZSwgY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnNuYXBzaG90U2l6ZSA9IE1hdGgubWF4KHJvdy5zbmFwc2hvdFNpemUsIHNuYXBzaG90U2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1NpemVEZWx0YSA9IHJvdy5zaXplIC0gcm93LnNuYXBzaG90U2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtRGlzcGxheU1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zZXQoaWQsIHsgLi4uY2FjaGUsIG1ldGhvZDogaXNOZXcgPyBJdGVtRGlzcGxheU1ldGhvZHMuVVBEQVRFIDogSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VELCBbSVNfTkVXXTogaXNOZXcgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSb3dFbmQgJiYgaXNOZXcgJiYgeSA8PSAoc2Nyb2xsU2l6ZSArIHNpemUgKyBkZWx0YUZyb21TdGFydENyZWF0aW9uICsgY29tcG9uZW50U2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dTaXplRGVsdGEgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dTaXplRGVsdGEgPSB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KGlkLCB7IC4uLmNhY2hlLCBtZXRob2Q6IEl0ZW1EaXNwbGF5TWV0aG9kcy5VUERBVEUsIFtJU19ORVddOiBpc05ldyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Jvd0VuZCAmJiBpc05ldyAmJiB5IDw9IChzY3JvbGxTaXplICsgc2l6ZSArIGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gKyBjb21wb25lbnRTaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5kZWx0YUZyb21TdGFydENyZWF0aW9uID0gcm93U2l6ZURlbHRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NpemVEZWx0YSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2l6ZSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICByb3cuc2l6ZSA9IE1hdGgubWF4KHJvdy5zaXplLCBjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICByb3cuc25hcHNob3RTaXplID0gcm93LnNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U2l6ZURlbHRhID0gcm93LnNpemUgLSByb3cuc25hcHNob3RTaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkZWxldGVkSXRlbXNNYXAuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9IGRlbGV0ZWRJdGVtc01hcFtpXSwgc2l6ZSA9IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSA/PyB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCBzY3JvbGxTaXplICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgLSBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zID0gTWF0aC5tYXgocm93LmxlZnRTaXplT2ZEZWxldGVkSXRlbXMsIHNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGcm9tSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUJ5SWQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkICE9IGZyb21JdGVtSWQgJiYgaWQgPT09IHN0aWNreUl0ZW1JZCAmJiBzdGlja3kgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUNvbXBvbmVudFNpemUgPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtPSBzdGlja3lDb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gZnJvbUl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGcm9tSXRlbUlkRm91bmQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGlnbm1lbnQgIT09IEFsaWdubWVudHMuQ0VOVEVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBudW0sIG9mZnNldCB9ID0gdGhpcy5nZXRFbGVtZW50TnVtVG9FbmQoaSwgY29sbGVjdGlvbiwgbWFwLCB0eXBpY2FsSXRlbVNpemUsIHNpemUsIGlzVmVydGljYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0Vmlld3BvcnRTaXplID0gc2l6ZSAtIG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdFZpZXdwb3J0U2l6ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBudW06IG51bTEsIG9mZnNldDogb2Zmc2V0MSB9ID0gdGhpcy5nZXRFbGVtZW50TnVtVG9FbmQoaSArIG51bSwgY29sbGVjdGlvbiwgbWFwLCB0eXBpY2FsSXRlbVNpemUsIHNpemUsIGlzVmVydGljYWwsIDAsIHRydWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFOdW0gPSAobnVtMSAtIG51bSksIGRlbHRhT2Zmc2V0ID0gKG9mZnNldDEgLSBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ICs9IG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAtPSBkZWx0YU51bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodCA9IHJpZ2h0SXRlbUxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCAtPSBkZWx0YU9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0cy5zcGxpY2UobGVmdEl0ZW1zT3JSb3dzV2VpZ2h0cy5sZW5ndGggLSBkZWx0YU51bSwgZGVsdGFOdW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IC09IGRlbHRhT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQnlJZCA9IGNvbGxlY3Rpb25JdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUJ5SWRQb3MgPSB5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0cy5wdXNoKGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gcm93LnN0YXJ0SXRlbUluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5IDw9IHNjcm9sbFNpemUgLSBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvdy5sZWZ0SXRlbXNPclJvd3NXZWlnaHRzID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZWZ0SXRlbXNPclJvd3NXZWlnaHRzID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRJdGVtc09yUm93c1dlaWdodHMgPSBNYXRoLm1heChyb3cubGVmdEl0ZW1zT3JSb3dzV2VpZ2h0cywgY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRIaWRkZW5JdGVtc1dlaWdodCA9IE1hdGgubWF4KHJvdy5sZWZ0SGlkZGVuSXRlbXNXZWlnaHQsIGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNQcmVjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSByb3cuc3RhcnRJdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQnlJZCA9PT0gbnVsbCB8fCB5IDwgaXRlbUJ5SWRQb3MgKyBzaXplICsgY29tcG9uZW50U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IHJvdy5lbmRJdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyByaWdodEl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA8PSBzY3JvbGxTaXplICsgc2l6ZSArIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUHJlY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IHJvdy5lbmRJdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgcmlnaHRJdGVtc09mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgPSBNYXRoLm1heChyb3cudG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCwgY29tcG9uZW50U2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Jvd0VuZCAmJiB5IDw9IHNjcm9sbFNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbURpc3BsYXlNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLkNSRUFURToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZWZ0U2l6ZU9mQWRkZWRJdGVtcyA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLlVQREFURTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSXRlbURpc3BsYXlNZXRob2RzLk5PVF9DSEFOR0VEOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgPSByb3dTaXplRGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEl0ZW1EaXNwbGF5TWV0aG9kcy5ERUxFVEU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubGVmdFNpemVPZkRlbGV0ZWRJdGVtcyA9IHJvd1NpemVEZWx0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUm93RW5kICYmIGl0ZW1EaXNwbGF5TWV0aG9kID09PSBJdGVtRGlzcGxheU1ldGhvZHMuQ1JFQVRFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5kZWx0YU9mTmV3SXRlbXMgPSByb3dTaXplRGVsdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSb3dFbmQgJiYgaSA8IGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3cucmlnaHRJdGVtc1dlaWdodCA9IE1hdGgubWF4KHJvdy5yaWdodEl0ZW1zV2VpZ2h0LCBjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzUm93RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ByZWNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFGcm9tU3RhcnRDcmVhdGlvbiArPSByb3cuZGVsdGFGcm9tU3RhcnRDcmVhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkFkZGVkSXRlbXMgKz0gcm93LmxlZnRTaXplT2ZBZGRlZEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zICs9IHJvdy5sZWZ0U2l6ZU9mVXBkYXRlZEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zICs9IHJvdy5sZWZ0U2l6ZU9mRGVsZXRlZEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YU9mTmV3SXRlbXMgKz0gcm93LmRlbHRhT2ZOZXdJdGVtcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodCArPSByb3cucmlnaHRJdGVtc1dlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCArPSByb3cudG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ICs9IHJvdy5sZWZ0SGlkZGVuSXRlbXNXZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cubGVmdEl0ZW1zT3JSb3dzV2VpZ2h0cyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0cy5wdXNoKHJvdy5sZWZ0SXRlbXNPclJvd3NXZWlnaHRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0b3RhbFNpemUgKz0gcm93LnNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgeSArPSByb3cuc2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNJbmZpbml0eSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZTaXplID0gLTE7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSA8PSB2aWV3cG9ydFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwgbGkgPSBsID4gMCA/IChsIC0gMSkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW1pdCA9IHZpZXdwb3J0U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHkgPD0gbGltaXQgfHwgYnVmZlNpemUgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWkgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmU2l6ZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmU2l6ZSA9IGxlZnRJdGVtc09mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5ID49IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZlNpemUtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FsY3VsYXRlKGxpIC0gaSwgbCwgbGksIHRydWUsIFNUQVJUX0NPTExFQ1RJT05fUFJFRklYX0lEKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlpID09PSBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0WU9mZnNldCA9IHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQgPSB2aWV3cG9ydFNpemUgKiAuNTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdExheW91dEluZGV4T2Zmc2V0ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFNpemUgPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCArIHRoaXMuX3Njcm9sbEVuZE9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKHJvdyBhcyBhbnkpID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGgsIGxpID0gbCAtIDE7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghY2FsY3VsYXRlKGksIGwsIGxpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5faXNJbmZpbml0eSkge1xyXG4gICAgICAgICAgICAgICAgKHJvdyBhcyBhbnkpID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB5eSA9IHksIGN1cnJlbnRUb3RhbFNpemUgPSB0b3RhbFNpemUsIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVG90YWxTaXplID0gdG90YWxTaXplICsgdmlld3BvcnRTaXplO1xyXG4gICAgICAgICAgICAgICAgcm93ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SXRlbUluZGV4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZEl0ZW1JbmRleDogMCxcclxuICAgICAgICAgICAgICAgICAgICBzaXplOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNuYXBzaG90U2l6ZTogMCxcclxuICAgICAgICAgICAgICAgICAgICBkZWx0YUZyb21TdGFydENyZWF0aW9uOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRTaXplT2ZVcGRhdGVkSXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNpemVPZkRlbGV0ZWRJdGVtczogMCxcclxuICAgICAgICAgICAgICAgICAgICBkZWx0YU9mTmV3SXRlbXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zT3JSb3dzV2VpZ2h0czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodDogMCxcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwgbGkgPSBsIC0gMTtcclxuICAgICAgICAgICAgICAgIGxldCBpID0gMCwgY291bnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHkgPCBub3JtYWxpemVkVG90YWxTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWkgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGN1bGF0ZShpLCBsLCBsaSwgdHJ1ZSwgRU5EX0NPTExFQ1RJT05fUFJFRklYX0lEKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlpID09PSBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHkgPSB5eTtcclxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSA9IGN1cnJlbnRUb3RhbFNpemU7XHJcbiAgICAgICAgICAgICAgICByaWdodExheW91dEluZGV4T2Zmc2V0ID0gY291bnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSAoaXNGcm9tSWQgPyBpdGVtQnlJZFBvcyA6IHNjcm9sbFNpemUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPD0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA8PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLnNwbGljZSgwLCBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLmxlbmd0aCAtIGJ1ZmZlclNpemUpO1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNPclJvd3NXZWlnaHRzLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgKz0gdjtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsIGxlZnRJdGVtc09mZnNldCk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgcmlnaHRJdGVtc09mZnNldCA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiByaWdodEl0ZW1zT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgc3RhcnRJbmRleCA9IChNYXRoLmNlaWwoTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAtIGxlZnRJdGVtTGVuZ3RoLCB0b3RhbExlbmd0aCA+IDAgPyB0b3RhbExlbmd0aCAtIDEgOiAwKSAvIGRpdmlkZXMpICogZGl2aWRlcyk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgLy8gQnVmZmVyIG9wdGltaXphdGlvbiBkb2VzIG5vdCB3b3JrIG9uIGZhc3QgbGluZWFyIGFsZ29yaXRobVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSA9IHR5cGljYWxJdGVtU2l6ZSAvIGRpdmlkZXMsIGJ1ZmZlckl0ZW1OdW1iZXJzID0gYnVmZmVyU2l6ZSAqIGRpdmlkZXM7XHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSBNYXRoLmZsb29yKGRpdmlkZWRUeXBpY2FsSXRlbVNpemUgIT09IDAgPyAoc2Nyb2xsU2l6ZSAvIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUpIDogMCk7XHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gTWF0aC5jZWlsKGRpdmlkZWRUeXBpY2FsSXRlbVNpemUgIT09IDAgPyAoKHNjcm9sbFNpemUgKyBzaXplKSAvIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUpIDogMCk7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgYnVmZmVyU2l6ZSAqIGRpdmlkZXMpO1xyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGggPSAoaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyBidWZmZXJJdGVtTnVtYmVycykgPiB0b3RhbExlbmd0aFxyXG4gICAgICAgICAgICAgICAgPyB0b3RhbExlbmd0aCAtIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDogYnVmZmVySXRlbU51bWJlcnM7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCA9IE1hdGguZmxvb3IobGVmdEl0ZW1MZW5ndGggKiBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplIC8gdHlwaWNhbEl0ZW1TaXplKSAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodCA9IE1hdGguZmxvb3IocmlnaHRJdGVtTGVuZ3RoICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAvIHR5cGljYWxJdGVtU2l6ZSkgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCA9IE1hdGguZmxvb3IoaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAqIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUgLyB0eXBpY2FsSXRlbVNpemUpICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ID0gTWF0aC5mbG9vcihpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCAqIGRpdmlkZWRUeXBpY2FsSXRlbVNpemUgLyB0eXBpY2FsSXRlbVNpemUpICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSAoTWF0aC5jZWlsKHRvdGFsTGVuZ3RoIC8gZGl2aWRlcykgKiBkaXZpZGVzICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSkgKyB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCArIHRoaXMuX3Njcm9sbEVuZE9mZnNldDtcclxuICAgICAgICAgICAgY29uc3QgayA9IHRvdGFsU2l6ZSAhPT0gMCA/IHByZXZpb3VzVG90YWxTaXplIC8gdG90YWxTaXplIDogMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb2xsZWN0aW9uLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bdHJhY2tCeV0gPT0gZnJvbUl0ZW1JZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1CeUlkUG9zID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgKyBNYXRoLmZsb29yKGluZGV4ICogZGl2aWRlZFR5cGljYWxJdGVtU2l6ZSAvIGRpdmlkZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlzRnJvbUl0ZW1JZEZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IChpc0Zyb21JZCA/IGl0ZW1CeUlkUG9zIDogc2Nyb2xsU2l6ZSAqIGspO1xyXG5cclxuICAgICAgICAgICAgaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luZmluaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydFNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGg7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnVmZlNpemUgPSAtMSwgeSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHNjcm9sbFNpemUgPD0gdmlld3BvcnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGgsIGxpID0gbCA+IDAgPyAobCAtIDEpIDogMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGltaXQgPSB2aWV3cG9ydFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh5IDw9IGxpbWl0IHx8IGJ1ZmZTaXplID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlpID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZlNpemUgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZlNpemUgPSBsZWZ0SXRlbXNPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA+PSBsaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZTaXplLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBsaSAtIGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPiBpdGVtSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNvbGxlY3Rpb25baXRlbUluZGV4XSBhcyBJKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0xhc3RJdGVtSW5Sb3cgPSBpaSAlIGRpdmlkZXMgPT09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMYXN0SXRlbSA9IGkgPT09IGxpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGFzdEl0ZW1JblJvdyB8fCAoIWlzTGFzdEl0ZW1JblJvdyAmJiBpc0xhc3RJdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gZGl2aWRlZFR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpaSA9PT0gbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFlPZmZzZXQgPSB5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0TGF5b3V0T2Zmc2V0ID0gdmlld3BvcnRTaXplICogLjU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRMYXlvdXRJbmRleE9mZnNldCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKC4uLmNvbGxlY3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW5maW5pdHkpIHtcclxuICAgICAgICAgICAgICAgIGxldCB5ID0gTWF0aC5mbG9vcih0b3RhbFNpemUgLyBkaXZpZGVkVHlwaWNhbEl0ZW1TaXplKSAqIGRpdmlkZWRUeXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3cG9ydFNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFRvdGFsU2l6ZSA9IHRvdGFsU2l6ZSArIHZpZXdwb3J0U2l6ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwgbGkgPSBsIC0gMTtcclxuICAgICAgICAgICAgICAgIGxldCBpID0gMCwgY291bnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHkgPCBub3JtYWxpemVkVG90YWxTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWkgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPD0gaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChjb2xsZWN0aW9uW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0xhc3RJdGVtSW5Sb3cgPSBpaSAlIGRpdmlkZXMgPT09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdEl0ZW0gPSBpID09PSBsaTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNMYXN0SXRlbUluUm93IHx8ICghaXNMYXN0SXRlbUluUm93ICYmIGlzTGFzdEl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gZGl2aWRlZFR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlpID09PSBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJpZ2h0TGF5b3V0SW5kZXhPZmZzZXQgPSBjb3VudDtcclxuICAgICAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgbGVmdEl0ZW1zT2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgcmlnaHRJdGVtc09mZnNldCA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0b3RhbExlbmd0aCAtIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDogcmlnaHRJdGVtc09mZnNldDtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKE1hdGguY2VpbChNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC0gbGVmdEl0ZW1MZW5ndGgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApIC8gZGl2aWRlcykgKiBkaXZpZGVzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC0gbGVmdEl0ZW1MZW5ndGgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtc09uRGlzcGxheVdlaWdodCA9IHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgLSBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgLSBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgKyBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgLSBsZWZ0SXRlbXNXZWlnaHQgLSBsZWZ0WU9mZnNldCxcclxuICAgICAgICAgICAgcmVuZGVySXRlbXMgPSAoTWF0aC5jZWlsKChpdGVtc09uRGlzcGxheUxlbmd0aCArIGxlZnRJdGVtTGVuZ3RoICsgcmlnaHRJdGVtTGVuZ3RoKSAvIGRpdmlkZXMpICogZGl2aWRlcykgKyByaWdodExheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICBzdGFydENyZWF0aW9uRGVsdGEgPSBkZWx0YUZyb21TdGFydENyZWF0aW9uID4gMCA/IGRlbHRhRnJvbVN0YXJ0Q3JlYXRpb24gOiAwLFxyXG4gICAgICAgICAgICBkZWx0YSA9IGxlZnRTaXplT2ZVcGRhdGVkSXRlbXMgKyBsZWZ0U2l6ZU9mQWRkZWRJdGVtcyAtIGxlZnRTaXplT2ZEZWxldGVkSXRlbXMgKyBzdGFydENyZWF0aW9uRGVsdGE7XHJcbiAgICAgICAgdGhpcy5fZGVsdGFPZk5ld0l0ZW1zID0gZGVsdGFPZk5ld0l0ZW1zO1xyXG5cclxuICAgICAgICBpZiAoaXNGcm9tSWQgJiYgIWlzVGFyZ2V0SW5PdmVyc2Nyb2xsKSB7XHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgLT0gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtZXRyaWNzOiBJTWV0cmljczxJPiA9IHtcclxuICAgICAgICAgICAgZGVsdGEsXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRJdGVtV2lkdGg6IHcsXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRJdGVtSGVpZ2h0OiBoLFxyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgZGl2aWRlcyxcclxuICAgICAgICAgICAgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kLFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheVdlaWdodCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlMZW5ndGgsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgbGVmdExheW91dE9mZnNldCxcclxuICAgICAgICAgICAgbGVmdExheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtcyxcclxuICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoLFxyXG4gICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLFxyXG4gICAgICAgICAgICBtYXhTY3JvbGxTaXplOiB0b3RhbFNpemUsXHJcbiAgICAgICAgICAgIGxlZnRTaXplT2ZBZGRlZEl0ZW1zLFxyXG4gICAgICAgICAgICBzaXplUHJvcGVydHksXHJcbiAgICAgICAgICAgIHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgIHN0aWNreVBvcyxcclxuICAgICAgICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCxcclxuICAgICAgICAgICAgdG90YWxMZW5ndGgsXHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSxcclxuICAgICAgICAgICAgdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpc0Zyb21JdGVtSWRGb3VuZCxcclxuICAgICAgICAgICAgaXNVcGRhdGluZyxcclxuICAgICAgICAgICAgc25hcFRvSXRlbSxcclxuICAgICAgICAgICAgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICBpbnZlcnRlZCxcclxuICAgICAgICAgICAgaXRlbVRyYW5zZm9ybSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gbWV0cmljcztcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoQ2FjaGUoY2FjaGU6IFByZXJlbmRlckNhY2hlKSB7XHJcbiAgICAgICAgdGhpcy5fcHJlcmVuZGVyZWRDYWNoZSA9IGNhY2hlO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyRGVsdGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGVsdGEgPSB0aGlzLl9kZWx0YU9mTmV3SXRlbXMgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZXMoaW1tZWRpYXRlbHk6IGJvb2xlYW4gPSBmYWxzZSwgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChpbW1lZGlhdGVseSkge1xyXG4gICAgICAgICAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c1ZlcnNpb24gPSB0aGlzLl92ZXJzaW9uO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoKENBQ0hFX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSBhcyBDYWNoZU1hcEV2ZW50cywgdGhpcy52ZXJzaW9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGFuZ2VzRGV0ZWN0ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGJvdW5kcyBvZiBhdCBsZWFzdCBvbmUgc2NyZWVuIG9iamVjdCBoYXZlIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIGNoZWNrQm91bmRzT2ZFbGVtZW50cygpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzW2ldLCBpdGVtSWQgPSBjb21wb25lbnQuaW5zdGFuY2UuaXRlbUlkO1xyXG4gICAgICAgICAgICBpZiAoaXRlbUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGNvbXBvbmVudC5pbnN0YW5jZS5nZXRCb3VuZHMoKSwgY2FjaGUgPSB0aGlzLmdldChpdGVtSWQpO1xyXG4gICAgICAgICAgICBpZiAoISFib3VuZHMgJiYgISFjYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvdW5kcy53aWR0aCAhPT0gY2FjaGUud2lkdGggfHwgYm91bmRzLmhlaWdodCAhPT0gY2FjaGUuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZURpc3BsYXlDb2xsZWN0aW9uPEkgZXh0ZW5kcyBJSXRlbSwgQyBleHRlbmRzIEFycmF5PEk+PihpdGVtczogQywgYWN0dWFsSXRlbXM6IEMsIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAsXHJcbiAgICAgICAgbWV0cmljczogSU1ldHJpY3M8ST4pOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHtcclxuICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQsXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRJdGVtV2lkdGgsXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRJdGVtSGVpZ2h0LFxyXG4gICAgICAgICAgICBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgZGl2aWRlcyxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlMZW5ndGgsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgIGxlZnRMYXlvdXRPZmZzZXQ6IGxheW91dE9mZnNldCxcclxuICAgICAgICAgICAgbGVmdExheW91dEluZGV4T2Zmc2V0OiBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgcmVuZGVySXRlbXM6IHJlbmRlckl0ZW1zTGVuZ3RoLFxyXG4gICAgICAgICAgICBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgICBtYXhTY3JvbGxTaXplLFxyXG4gICAgICAgICAgICBzaXplUHJvcGVydHksXHJcbiAgICAgICAgICAgIHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgIHN0aWNreVBvcyxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgdG90YWxMZW5ndGgsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgIHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICAgICAgbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgIG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICBzbmFwVG9JdGVtLFxyXG4gICAgICAgICAgICBzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgIGludmVydGVkLFxyXG4gICAgICAgICAgICBpdGVtVHJhbnNmb3JtLFxyXG4gICAgICAgIH0gPSBtZXRyaWNzLFxyXG4gICAgICAgICAgICBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUsIGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA9IHN0aWNreVBvcyxcclxuICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgIGRlbHRhT2ZmZXQgPSAoaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkID8gc2Nyb2xsU2l6ZSA6IDApLFxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gdGhpcy5fc2Nyb2xsRGlyZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgYm91bmRzU2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCwgYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uID0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSB0aGlzLl9zY3JvbGxFbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGxldCBwb3MgPSBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgPSByZW5kZXJJdGVtc0xlbmd0aCxcclxuICAgICAgICAgICAgICAgIHN0aWNreUl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIG5leHRTdGlja3k6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIHN0aWNreUl0ZW1JbmRleCA9IC0xLCBuZXhzdFN0aWNreUl0ZW1JbmRleCA9IC0xLFxyXG4gICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSAwLCBlbmRTdGlja3lJdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBuZXh0RW5kU3RpY2t5OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbUluZGV4ID0gLTEsIGVuZFN0aWNreUl0ZW1TaXplID0gMDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxpID0gbGF5b3V0SW5kZXhPZmZzZXQgKyBhY3R1YWxJdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBpZiAoc3RpY2t5RW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPiAwID8gKGRpdmlkZXMgPiAxID8gKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLSAxKSA6IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQpIDogMCwgdG90YWxMZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uSXRlbSA9IGl0ZW1zW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0R1bW15ID0gY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldICYmIChjb2xsZWN0aW9uSXRlbT8uW1NFUlZJQ0VfUFJPUF9EVU1NWV0gPT09IFNFUlZJQ0VfUFJPUF9EVU1NWV9FTkFCTEVEKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25JdGVtIHx8IGlzRHVtbXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gTWF0aC5mbG9vcigoKGl0ZW1zLmxlbmd0aCAtIGxheW91dEluZGV4T2Zmc2V0ICsgaSkgKyAxKSAvIGRpdmlkZXMpLCBpZCA9IGNvbGxlY3Rpb25JdGVtW3RyYWNrQnldLCBjYWNoZSA9IHRoaXMuZ2V0KGlkKSEsIHN0aWNreSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zdGlja3kgPz8gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5zZWxlY3RhYmxlID8/IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LmNvbGxhcHNhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZHluYW1pY1NpemUgPyBjYWNoZT8uW3NpemVQcm9wZXJ0eV0gPiAwID8gY2FjaGU/LltzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplIDogdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24gPSBwb3MgLSAoc2Nyb2xsU2l6ZSAtIHNpemUpIC0gc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmF0aW8gPSBzaXplICE9PSAwID8gYm91bmRzU2l6ZSAvIHNpemUgOiAwLCBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ID0gLShib3VuZHNTaXplICE9PSAwID8gYWJzb2x1dGVTdGFydFBvc2l0aW9uIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb24gPSBib3VuZHNTaXplIC0gKGFic29sdXRlU3RhcnRQb3NpdGlvblBlcmNlbnQgKyBzaXplKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvblBlcmNlbnQgPSAoYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCArIChib3VuZHNTaXplICE9PSAwID8gKGFic29sdXRlRW5kUG9zaXRpb24gKyBzaXplKSAvIGJvdW5kc1NpemUgOiAwKSAqIHJhdGlvKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGlzVmVydGljYWwgPyAwIDogYWN0dWFsU25pcHBlZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB5ID0gaXNWZXJ0aWNhbCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0aWNreSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZXM6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1NZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRYOiB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkWTogeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25aOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVaOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpc1ZlcnRpY2FsID8gbm9ybWFsaXplZEl0ZW1XaWR0aCA6IHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpc1ZlcnRpY2FsID8gc2l6ZSA6IG5vcm1hbGl6ZWRJdGVtSGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogcm93SW5kZXggJSAyICE9IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46IHJvd0luZGV4ICUgMiA9PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb25QZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YTogc3RpY2t5ID09PSAxID8gdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQgOiBzdGlja3kgPT09IDIgPyBhY3R1YWxFbmRTbmlwcGVkUG9zaXRpb24gLSBkZWx0YU9mZmV0IC0gc2l6ZSA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjb25maWc6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1Db25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFNpemU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXJzdDogaSA9PT0gbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMYXN0OiBpID09PSBsaSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXc6IChjYWNoZSBhcyBDYWNoZSk/LltJU19ORVddID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogaXNPZGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbjogIWlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2FibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcDogc3RpY2t5RW5hYmxlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtczogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbUFsaWduLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4OiBpIC0gbGF5b3V0SW5kZXhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmVydGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogWl9JTkRFWF8xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1EYXRhOiBJID0gY29sbGVjdGlvbkl0ZW07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksIGlkLCBtZWFzdXJlcywgZGF0YTogaXRlbURhdGEsIHByZXZpb3VzZURhdGE6IGkgPiAwID8gaXRlbXNbaSAtIDFdIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHREYXRhOiBpIDwgdG90YWxMZW5ndGggPyBpdGVtc1tpICsgMV0gOiBudWxsLCBjb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW1JbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW1TaXplID0gc2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJdGVtcy5wdXNoKHN0aWNreUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdGlja3lFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaSA9IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgKyBpdGVtc09uRGlzcGxheUxlbmd0aCAtIDEsIHN0YXJ0SW5kZXggPSBzaSA8IDAgPyBzaSA6IHNpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWluKHN0YXJ0SW5kZXgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gTWF0aC5mbG9vcigoKGl0ZW1zLmxlbmd0aCAtIGxheW91dEluZGV4T2Zmc2V0ICsgaSkgKyAxKSAvIGRpdmlkZXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIGwgPSB0b3RhbExlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25JdGVtID0gaXRlbXNbaV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRHVtbXkgPSBjb2xsZWN0aW9uSXRlbT8uW1NFUlZJQ0VfUFJPUF9EVU1NWV0gJiYgKGNvbGxlY3Rpb25JdGVtPy5bU0VSVklDRV9QUk9QX0RVTU1ZXSA9PT0gU0VSVklDRV9QUk9QX0RVTU1ZX0VOQUJMRUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29sbGVjdGlvbkl0ZW0gfHwgaXNEdW1teSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBjb2xsZWN0aW9uSXRlbVt0cmFja0J5XSwgY2FjaGUgPSB0aGlzLmdldChpZCkhLCBzdGlja3kgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc3RpY2t5ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uc2VsZWN0YWJsZSA/PyB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzYWJsZSA9IGl0ZW1Db25maWdNYXBbaWRdPy5jb2xsYXBzYWJsZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGR5bmFtaWNTaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3kgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNPZGQgPSAoaXRlbXMubGVuZ3RoIC0gbGF5b3V0SW5kZXhPZmZzZXQgKyBpKSAlIDIgIT0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgPSBpc1ZlcnRpY2FsID8gbm9ybWFsaXplZEl0ZW1XaWR0aCA6IHNpemUsIGggPSBpc1ZlcnRpY2FsID8gc2l6ZSA6IG5vcm1hbGl6ZWRJdGVtSGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uID0gcG9zIC0gKHNjcm9sbFNpemUgLSBzaXplKSAtIHNpemUsIHJhdGlvID0gc2l6ZSAhPT0gMCA/IGJvdW5kc1NpemUgLyBzaXplIDogMCwgYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCA9IC0oYm91bmRzU2l6ZSAhPT0gMCA/IGFic29sdXRlU3RhcnRQb3NpdGlvbiAvIGJvdW5kc1NpemUgOiAwKSAqIHJhdGlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvbiA9IGJvdW5kc1NpemUgLSAoYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCArIHNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVFbmRQb3NpdGlvblBlcmNlbnQgPSAoYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCArIChib3VuZHNTaXplICE9PSAwID8gKGFic29sdXRlRW5kUG9zaXRpb24gKyBzaXplKSAvIGJvdW5kc1NpemUgOiAwKSAqIHJhdGlvKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBpc1ZlcnRpY2FsID8gMCA6IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIHcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gaXNWZXJ0aWNhbCA/IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGggOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZXM6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1NZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRYOiB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkWTogeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25aOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVaOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogcm93SW5kZXggJSAyICE9IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46IHJvd0luZGV4ICUgMiA9PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb25QZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5JdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBtYXhJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGRlbHRhT2ZmZXQgLSBzaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxTaXplOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3Q6IGkgPT09IGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdDogaSA9PT0gbGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3OiAoY2FjaGUgYXMgQ2FjaGUpPy5bSVNfTkVXXSA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IGlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46ICFpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXA6IHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkT3V0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljOiBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM6IGl0ZW1zLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBUb0l0ZW1BbGlnbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogaSAtIGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IFpfSU5ERVhfMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGNvbGxlY3Rpb25JdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBwcmV2aW91c2VEYXRhOiBpID4gMCA/IGl0ZW1zW2kgLSAxXSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RGF0YTogaSA8IHRvdGFsTGVuZ3RoID8gaXRlbXNbaSArIDFdIDogbnVsbCwgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtU2l6ZSA9IHNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChlbmRTdGlja3lJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uTGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgaSA9IHN0YXJ0SW5kZXgsXHJcbiAgICAgICAgICAgICAgICBjaSA9IDAsXHJcbiAgICAgICAgICAgICAgICByb3c6IHtcclxuICAgICAgICAgICAgICAgICAgICBzaXplOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgb2RkOiBib29sZWFuO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW46IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICB9ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgb2RkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVuOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHdoaWxlIChyZW5kZXJJdGVtcyA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpID49IGNvbGxlY3Rpb25MZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25JdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25JdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNEdW1teSA9IGNvbGxlY3Rpb25JdGVtPy5bU0VSVklDRV9QUk9QX0RVTU1ZXSAmJiAoY29sbGVjdGlvbkl0ZW0/LltTRVJWSUNFX1BST1BfRFVNTVldID09PSBTRVJWSUNFX1BST1BfRFVNTVlfRU5BQkxFRCksXHJcbiAgICAgICAgICAgICAgICAgICAgaWkgPSBpICsgMSxcclxuICAgICAgICAgICAgICAgICAgICByb3dJbmRleCA9IE1hdGguZmxvb3IoKChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICsgMSkgLyBkaXZpZGVzKSxcclxuICAgICAgICAgICAgICAgICAgICBpZCA9IGNvbGxlY3Rpb25JdGVtW3RyYWNrQnldLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlID0gdGhpcy5nZXQoaWQpISxcclxuICAgICAgICAgICAgICAgICAgICBzaXplID0gaXNEdW1teSA/IHR5cGljYWxJdGVtU2l6ZSA6IChkeW5hbWljU2l6ZSA/IGNhY2hlPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemUgOiB0eXBpY2FsSXRlbVNpemUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpdlNpemUgPSAoaXNWZXJ0aWNhbCA/IG5vcm1hbGl6ZWRJdGVtV2lkdGggOiBub3JtYWxpemVkSXRlbUhlaWdodCkgLyBkaXZpZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpICUgZGl2aWRlcyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNpID0gMDtcclxuICAgICAgICAgICAgICAgICAgICByb3cgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9kZDogcm93SW5kZXggJSAyICE9PSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVuOiByb3dJbmRleCAlIDIgPT09IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnNpemUgPSBNYXRoLm1heChyb3cuc2l6ZSwgc2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2krKztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRHVtbXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCB8fCBpZCAhPT0gc3RpY2t5SXRlbT8uaWQpICYmIGlkICE9PSBlbmRTdGlja3lJdGVtPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc09kZCA9IChpdGVtcy5sZW5ndGggLSBsYXlvdXRJbmRleE9mZnNldCArIGkpICUgMiAhPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5ID0gaXRlbUNvbmZpZ01hcFtpZF0/LnN0aWNreSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFNpemUgPSBpdGVtQ29uZmlnTWFwW2lkXT8uZnVsbFNpemUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LnNlbGVjdGFibGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcFtpZF0/LmNvbGxhcHNhYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZCA9IHN0aWNreUVuYWJsZWQgJiYgKChzdGlja3kgPT09IDEgJiYgKHBvcyA8PSBzY3JvbGxTaXplICsgdGhpcy5fc2Nyb2xsU3RhcnRPZmZzZXQpKSB8fCAoc3RpY2t5ID09PSAyICYmIChwb3MgPj0gc2Nyb2xsU2l6ZSArIGJvdW5kc1NpemUgLSBzaXplKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uID0gcG9zIC0gc2Nyb2xsU2l6ZSwgcmF0aW8gPSBzaXplICE9PSAwID8gYm91bmRzU2l6ZSAvIHNpemUgOiAwLCBhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ID0gLShib3VuZHNTaXplICE9PSAwID8gYWJzb2x1dGVTdGFydFBvc2l0aW9uIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uID0gYm91bmRzU2l6ZSAtIChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgc2l6ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uUGVyY2VudCA9IChhYnNvbHV0ZVN0YXJ0UG9zaXRpb25QZXJjZW50ICsgKGJvdW5kc1NpemUgIT09IDAgPyAoYWJzb2x1dGVFbmRQb3NpdGlvbiArIHNpemUpIC8gYm91bmRzU2l6ZSA6IDApICogcmF0aW8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGlzVmVydGljYWwgPyBkaXZTaXplICogKChzdGlja3kgfHwgZnVsbFNpemUpID8gMCA6IGNpKSA6IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBpc1ZlcnRpY2FsID8gcG9zIDogZGl2U2l6ZSAqICgoc3RpY2t5IHx8IGZ1bGxTaXplKSA/IDAgOiBjaSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlczogSVJlbmRlclZpcnR1YWxMaXN0SXRlbU1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFg6IHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRZOiB5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25YOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uWTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvblo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVo6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVTdGFydFBvc2l0aW9uUGVyY2VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZUVuZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlRW5kUG9zaXRpb25QZXJjZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpc1ZlcnRpY2FsID8gKChzdGlja3kgfHwgZnVsbFNpemUpID8gbm9ybWFsaXplZEl0ZW1XaWR0aCA6IChub3JtYWxpemVkSXRlbVdpZHRoIC8gZGl2aWRlcykpIDogc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGlzVmVydGljYWwgPyBzaXplIDogKChzdGlja3kgfHwgZnVsbFNpemUpID8gbm9ybWFsaXplZEl0ZW1IZWlnaHQgOiAobm9ybWFsaXplZEl0ZW1IZWlnaHQgLyBkaXZpZGVzKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG1pbkl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbWluSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG1heEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbWF4SXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiBzdGlja3kgPT09IDEgPyBhY3R1YWxTbmlwcGVkUG9zaXRpb24gOiAoc3RpY2t5ID09PSAyID8gKGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIGRlbHRhT2ZmZXQgLSBzaXplKSA6IDApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3Q6IGkgPT09IGxheW91dEluZGV4T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdDogaSA9PT0gbGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3OiAoY2FjaGUgYXMgQ2FjaGUpPy5bSVNfTkVXXSA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGQ6IGlzT2RkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW46ICFpc09kZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXA6IHN0aWNreUVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zOiBpdGVtcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcFRvSXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwVG9JdGVtQWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXg6IGkgLSBsYXlvdXRJbmRleE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N0dWI6IChpc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgaWQgPT09IHN0aWNreUl0ZW0/LmlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiBaX0lOREVYXzAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJ0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNuYXBwZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy56SW5kZXggPSBaX0lOREVYXzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1EYXRhOiBJID0gY29sbGVjdGlvbkl0ZW07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksIGlkLCBtZWFzdXJlcywgZGF0YTogaXRlbURhdGEsIHByZXZpb3VzZURhdGE6IGkgPiAwID8gaXRlbXNbaSAtIDFdIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHREYXRhOiBpIDwgdG90YWxMZW5ndGggPyBpdGVtc1tpICsgMV0gOiBudWxsLCBjb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV4dFN0aWNreSAmJiBzdGlja3lJdGVtSW5kZXggPCBpICYmIHN0aWNreSA9PT0gMSAmJiAocG9zIDw9IHNjcm9sbFNpemUgKyB0aGlzLl9zY3JvbGxTdGFydE9mZnNldCArIHNpemUgKyBzdGlja3lJdGVtU2l6ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueCA9IGlzVmVydGljYWwgPyAwIDogc25hcHBlZCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueSA9IGlzVmVydGljYWwgPyBzbmFwcGVkID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogcG9zIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4c3RTdGlja3lJdGVtSW5kZXggPSBkaXNwbGF5SXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IHNuYXBwZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gKGlzVmVydGljYWwgPyBpdGVtLm1lYXN1cmVzLnkgOiBpdGVtLm1lYXN1cmVzLngpIC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnpJbmRleCA9IFpfSU5ERVhfMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRFbmRTdGlja3kgJiYgZW5kU3RpY2t5SXRlbUluZGV4ID4gaSAmJiBzdGlja3kgPT09IDIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3MgPj0gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSAtIGVuZFN0aWNreUl0ZW1TaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy54ID0gaXNWZXJ0aWNhbCA/IDAgOiBzbmFwcGVkID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSA6IHBvcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueSA9IGlzVmVydGljYWwgPyBzbmFwcGVkID8gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gc2l6ZSA6IHBvcyA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5ID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnpJbmRleCA9IFpfSU5ERVhfMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbmRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBzbmFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gaXRlbS5tZWFzdXJlcy55IDogaXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtcy0tO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpaSAlIGRpdmlkZXMgPT09IDAgfHwgcmVuZGVySXRlbXMgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcyArPSByb3cuc2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYXhpcyA9IGlzVmVydGljYWwgPyBZX1BST1BfTkFNRSA6IFhfUFJPUF9OQU1FLCB0cmFuc2Zvcm1lZEF4aXMgPSBpc1ZlcnRpY2FsID8gVFJBTlNGT1JNRURfWV9QUk9QX05BTUUgOiBUUkFOU0ZPUk1FRF9YX1BST1BfTkFNRTtcclxuXHJcbiAgICAgICAgICAgIGlmICghIW5leHRTdGlja3kgJiYgISFzdGlja3lJdGVtICYmIG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gPD0gYWN0dWFsU25pcHBlZFBvc2l0aW9uICsgc3RpY2t5SXRlbS5tZWFzdXJlc1tzaXplUHJvcGVydHldKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSA+IGFjdHVhbFNuaXBwZWRQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPSBzdGlja3lJdGVtLm1lYXN1cmVzW3RyYW5zZm9ybWVkQXhpc10gPSBuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdIC0gc3RpY2t5SXRlbS5tZWFzdXJlc1tzaXplUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWQgPSBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc3RpY2t5ID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzLmRlbHRhID0gKGlzVmVydGljYWwgPyBzdGlja3lJdGVtLm1lYXN1cmVzLnkgOiBzdGlja3lJdGVtLm1lYXN1cmVzLngpIC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gbmV4dFN0aWNreS5tZWFzdXJlcy55IDogbmV4dFN0aWNreS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA9IHN0aWNreUl0ZW0ubWVhc3VyZXNbdHJhbnNmb3JtZWRBeGlzXSA9IG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gLSBzdGlja3lJdGVtLm1lYXN1cmVzW3NpemVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5tZWFzdXJlcy5kZWx0YSA9IChpc1ZlcnRpY2FsID8gc3RpY2t5SXRlbS5tZWFzdXJlcy55IDogc3RpY2t5SXRlbS5tZWFzdXJlcy54KSAtIHNjcm9sbFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdFN0aWNreUl0ZW0gPSBkaXNwbGF5SXRlbXM/LltuZXhzdFN0aWNreUl0ZW1JbmRleCArIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0U3RpY2t5SXRlbT8uY29uZmlnPy5zdGlja3kgPT09IDEgJiYgZGlzcGxheUl0ZW1zPy5bbmV4c3RTdGlja3lJdGVtSW5kZXggKyAyXT8uY29uZmlnPy5zdGlja3kgIT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWRPdXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0U3RpY2t5SXRlbS5tZWFzdXJlc1theGlzXSA8PSBhY3R1YWxTbmlwcGVkUG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkID0gbGFzdFN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWRPdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPSBsYXN0U3RpY2t5SXRlbS5tZWFzdXJlc1t0cmFuc2Zvcm1lZEF4aXNdID0gbGFzdFN0aWNreUl0ZW0ubWVhc3VyZXMucG9zaXRpb24gPSBhY3R1YWxTbmlwcGVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3RpY2t5SXRlbS5tZWFzdXJlcy5kZWx0YSA9IHRoaXMuX3Njcm9sbFN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0U3RpY2t5SXRlbT8uY29uZmlnPy5zdGlja3kgIT09IDEgJiYgZGlzcGxheUl0ZW1zPy5bbmV4c3RTdGlja3lJdGVtSW5kZXggKyAyXT8uY29uZmlnPy5zdGlja3kgIT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gPD0gYWN0dWFsU25pcHBlZFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gbmV4dFN0aWNreS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdID0gbmV4dFN0aWNreS5tZWFzdXJlc1t0cmFuc2Zvcm1lZEF4aXNdID0gbmV4dFN0aWNreS5tZWFzdXJlcy5wb3NpdGlvbiA9IGFjdHVhbFNuaXBwZWRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kubWVhc3VyZXMuZGVsdGEgPSB0aGlzLl9zY3JvbGxTdGFydE9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkT3V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoISFuZXh0RW5kU3RpY2t5ICYmICEhZW5kU3RpY2t5SXRlbSAmJlxyXG4gICAgICAgICAgICAgICAgKG5leHRFbmRTdGlja3kubWVhc3VyZXNbYXhpc10gPj0gYWN0dWFsRW5kU25pcHBlZFBvc2l0aW9uIC0gZW5kU3RpY2t5SXRlbVNpemUgLSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW3NpemVQcm9wZXJ0eV0pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dEVuZFN0aWNreS5tZWFzdXJlc1theGlzXSA8IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIG5leHRFbmRTdGlja3kubWVhc3VyZXNbc2l6ZVByb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPSBlbmRTdGlja3lJdGVtLm1lYXN1cmVzW3RyYW5zZm9ybWVkQXhpc10gPSBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzW2F4aXNdICsgbmV4dEVuZFN0aWNreS5tZWFzdXJlc1tzaXplUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZFN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWQgPSBuZXh0RW5kU3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kU3RpY2t5SXRlbS5jb25maWcuc3RpY2t5ID0gMjtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLm1lYXN1cmVzLmRlbHRhID0gKGlzVmVydGljYWwgPyBlbmRTdGlja3lJdGVtLm1lYXN1cmVzLnkgOiBlbmRTdGlja3lJdGVtLm1lYXN1cmVzLngpIC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreS5jb25maWcuc25hcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVuZFN0aWNreS5tZWFzdXJlc1theGlzXSA9IG5leHRFbmRTdGlja3kubWVhc3VyZXNbdHJhbnNmb3JtZWRBeGlzXSA9IGFjdHVhbEVuZFNuaXBwZWRQb3NpdGlvbiAtIG5leHRFbmRTdGlja3kubWVhc3VyZXNbc2l6ZVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzLmRlbHRhID0gKGlzVmVydGljYWwgPyBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzLnkgOiBuZXh0RW5kU3RpY2t5Lm1lYXN1cmVzLngpIC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gZW5kU3RpY2t5SXRlbS5tZWFzdXJlc1t0cmFuc2Zvcm1lZEF4aXNdID0gbmV4dEVuZFN0aWNreS5tZWFzdXJlc1theGlzXSArIG5leHRFbmRTdGlja3kubWVhc3VyZXNbc2l6ZVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICBlbmRTdGlja3lJdGVtLm1lYXN1cmVzLmRlbHRhID0gKGlzVmVydGljYWwgPyBlbmRTdGlja3lJdGVtLm1lYXN1cmVzLnkgOiBlbmRTdGlja3lJdGVtLm1lYXN1cmVzLngpIC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW1UcmFuc2Zvcm0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGlzcGxheUl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkaXNwbGF5SXRlbXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1hdGlvbiA9IGl0ZW1UcmFuc2Zvcm0oaXRlbS5pbmRleCwgb2JqZWN0QXNSZWFkb25seShpdGVtLm1lYXN1cmVzKSwgb2JqZWN0QXNSZWFkb25seShpdGVtLmNvbmZpZykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnRyYW5zZm9ybWVkWCA9IHRyYW5zZm9ybWF0aW9uLng7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMudHJhbnNmb3JtZWRZID0gdHJhbnNmb3JtYXRpb24ueTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy56ID0gdHJhbnNmb3JtYXRpb24uejtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy5yb3RhdGlvblggPSB0cmFuc2Zvcm1hdGlvbi5yb3RhdGlvblg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMucm90YXRpb25ZID0gdHJhbnNmb3JtYXRpb24ucm90YXRpb25ZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnJvdGF0aW9uWiA9IHRyYW5zZm9ybWF0aW9uLnJvdGF0aW9uWjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy5zY2FsZVggPSB0cmFuc2Zvcm1hdGlvbi5zY2FsZVg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMuc2NhbGVZID0gdHJhbnNmb3JtYXRpb24uc2NhbGVZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnNjYWxlWiA9IHRyYW5zZm9ybWF0aW9uLnNjYWxlWjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb25maWcub3BhY2l0eSA9IHRyYW5zZm9ybWF0aW9uLm9wYWNpdHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29uZmlnLmZpbHRlciA9IHRyYW5zZm9ybWF0aW9uLmZpbHRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb25maWcuYmxlbmRDb2xvciA9IHRyYW5zZm9ybWF0aW9uLmJsZW5kQ29sb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29uZmlnLnpJbmRleCA9IFN0cmluZyh0cmFuc2Zvcm1hdGlvbi56SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGlzcGxheUl0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0UG9zaXRpb25zKCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIuY2xlYXJUcmFja01hcCgpO1xyXG5cclxuICAgICAgICB0aGlzLnRyYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB0cmFja2luZyBieSBwcm9wTmFtZVxyXG4gICAgICovXHJcbiAgICB0cmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2l0ZW1zIHx8ICF0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFja2VyLnRyYWNrKHRoaXMuX2l0ZW1zLCB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cywgdGhpcy5fc25hcHBlZERpc3BsYXlDb21wb25lbnRzLCB0aGlzLl9zY3JvbGxEaXJlY3Rpb24sIHRoaXMuX3RyYWNrQnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQodjogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci5kaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkID0gdjtcclxuICAgIH1cclxuXHJcbiAgICB1bnRyYWNrQ29tcG9uZW50QnlJZFByb3BlcnR5KGNvbXBvbmVudD86IEMgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl90cmFja2VyLnVudHJhY2tDb21wb25lbnRCeUlkUHJvcGVydHkoY29tcG9uZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzKGlkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoaWQpID8/IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbXBvbmVudEJvdW5kc0J5SW50ZXJzZWN0aW9uUG9zaXRpb24ocG9zaXRpb246IG51bWJlciwgbWF4UG9zaXRpb246IG51bWJlciB8IG51bGwgPSBudWxsKTogKElSZWN0ICYgeyBpZDogSWQgfCBudWxsOyBpc0ZpcnN0OiBib29sZWFuOyBpc0xhc3Q6IGJvb2xlYW47IH0pIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG4gICAgICAgIGxldCBmaXJzdDogKElSZWN0ICYgeyBpZDogSWQgfCBudWxsOyBpc0ZpcnN0OiBib29sZWFuOyBpc0xhc3Q6IGJvb2xlYW47IH0pIHwgbnVsbCA9IG51bGwsXHJcbiAgICAgICAgICAgIGxhc3Q6IChJUmVjdCAmIHsgaWQ6IElkIHwgbnVsbDsgaXNGaXJzdDogYm9vbGVhbjsgaXNMYXN0OiBib29sZWFuOyB9KSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGlmICghIWNvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wIG9mIGNvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gY29tcC5pbnN0YW5jZS5pdGVtSWQgPz8gbnVsbCwgaXNWZXJ0aWNhbCA9IGNvbXAuaW5zdGFuY2UuaXRlbT8uY29uZmlnPy5pc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICAgIGludmVydGVkID0gY29tcC5pbnN0YW5jZS5pdGVtPy5jb25maWcuaW52ZXJ0ZWQgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4U2Nyb2xsU2l6ZSA9IGNvbXAuaW5zdGFuY2UuaXRlbT8ubWVhc3VyZXMubWF4U2Nyb2xsU2l6ZSA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gY29tcC5pbnN0YW5jZS5nZXRCb3VuZHMoKSxcclxuICAgICAgICAgICAgICAgICAgICB4ID0gY29tcC5pbnN0YW5jZS5pdGVtPy5tZWFzdXJlcz8ueCA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHh4ID0gaW52ZXJ0ZWQgPyAobWF4U2Nyb2xsU2l6ZSAtIHgpIC0gd2lkdGggOiB4LFxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBjb21wLmluc3RhbmNlLml0ZW0/Lm1lYXN1cmVzPy55ID8/IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGaXJzdCA9IGNvbXAuaW5zdGFuY2UuaXRlbT8uY29uZmlnPy5pc0ZpcnN0ID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTGFzdCA9IGNvbXAuaW5zdGFuY2UuaXRlbT8uY29uZmlnPy5pc0xhc3QgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gcG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCAmJiAocG9zID49IHkgJiYgcG9zIDwgeSArIGhlaWdodCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpZCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgaXNGaXJzdCwgaXNMYXN0IH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1ZlcnRpY2FsICYmIChwb3MgPj0geHggJiYgcG9zIDwgeHggKyB3aWR0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpZCwgeDogeHgsIHksIHdpZHRoLCBoZWlnaHQsIGlzRmlyc3QsIGlzTGFzdCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRmlyc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IHsgaWQsIHg6IHh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpc0ZpcnN0LCBpc0xhc3QgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHsgaWQsIHg6IHh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpc0ZpcnN0LCBpc0xhc3QgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heFBvc2l0aW9uICE9PSBudWxsICYmIHBvc2l0aW9uID4gbWF4UG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxhc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkSXNTY3JvbGxTdGFydE9mZiA9IGRlYm91bmNlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9pc1Njcm9sbFN0YXJ0ID0gZmFsc2U7XHJcbiAgICB9KTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY2FjaGVFbGVtZW50cyhpc1ZlcnRpY2FsOiBib29sZWFuLCBpdGVtU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50c1tpXSwgaXRlbUlkID0gY29tcG9uZW50Lmluc3RhbmNlLml0ZW1JZDtcclxuICAgICAgICAgICAgaWYgKGl0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSBjb21wb25lbnQuaW5zdGFuY2UuZ2V0Qm91bmRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0KGl0ZW1JZCwge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXQoaXRlbUlkKSwgLi4uYm91bmRzLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IGJvdW5kcy53aWR0aCB8fCAoaXNWZXJ0aWNhbCA/IDAgOiBpdGVtU2l6ZSksXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQgfHwgKGlzVmVydGljYWwgPyBpdGVtU2l6ZSA6IDApLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTGF6eSAmJiAodGhpcy5faXNTY3JvbGxTdGFydCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZElzU2Nyb2xsU3RhcnRPZmYuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5fcHJlcmVuZGVyZWRDYWNoZTtcclxuICAgICAgICBpZiAoISFjYWNoZSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZUl0ZW0gPSBjYWNoZVtpZF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldChpZCwgeyAuLi4odGhpcy5nZXQoaWQpIHx8IHt9KSwgLi4uY2FjaGVJdGVtIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXJlbmRlcmVkQ2FjaGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXNldENhY2hlQ2h1bmtJbmZvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX25ld0l0ZW1zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgY2FjaGVDbGVhbigpIHtcclxuICAgICAgICB0aGlzLl9tYXAuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLl9zbmFwc2hvdC5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG92ZXJyaWRlIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3Bvc2VDbGVhckJ1ZmZlclNpemVUaW1lcigpO1xyXG5cclxuICAgICAgICBpZiAoISF0aGlzLl9kZWJvdW5jZWRJc1Njcm9sbFN0YXJ0T2ZmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZElzU2Nyb2xsU3RhcnRPZmYuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5fdHJhY2tlcikge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja2VyLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19